#!/usr/bin/env python import sys import django from django.conf import settings from django.test.utils import get_runner from collections import defaultdict def configure(databases): from faker import Faker fake = Faker() settings.configure( DATABASES=databases, INSTALLED_APPS=( 'django_seed', 'django_nose', ), TEST_RUNNER='django_nose.NoseTestSuiteRunner', NOSE_ARGS=[ '--exe', # nose will skip files with the executable bit set without this '--with-coverage', '--cover-package=django_seed', ], SITE_ID=1, SECRET_KEY=fake.sha1(), ) if not settings.configured: argv = sys.argv[1:] args=defaultdict(list) for k, v in ((k.lstrip('-'), v) for k,v in (a.split('=') for a in sys.argv[1:])): args[k].append(v) # Remove all args that are already sys.argv = list(filter(lambda arg: any(arg_name.startswith(arg) for arg_name in [ '--database' ]), sys.argv)) databases = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': ':memory:', } } # Used for tests in Github Actions # Refer to .github/workflows/test.yml to see the Postgres service that is # being hosted if 'postgres' in args['database']: databases['default'] = { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'dbtest', 'USER': 'postgres', 'PASSWORD': 'postgres', 'HOST': 'localhost', 'PORT': '5432', } configure(databases) def runtests(): django.setup() TestRunner = get_runner(settings) test_runner = TestRunner(verbosity=1, interactive=True, failfast=False) failures = test_runner.run_tests(['django_seed', ]) sys.exit(failures) if __name__ == '__main__': runtests()