#!/usr/bin/env python
import argparse
from os.path import abspath, dirname, join
import sys

REPO_DIR = dirname(dirname(abspath(__file__)))
TESTS_DIR = join(REPO_DIR, 'tests')

sys.path.append(REPO_DIR)
sys.path.append(TESTS_DIR)


DATABASES_FOR_DB = {
    'postgresql': {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'partial_index',
        }
    },
    'sqlite': {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': join(REPO_DIR, 'partial_index.sqlite3'),
        }
    },
}


def main(args):
    # Since this test suite is designed to be ran outside of ./manage.py test, we need to do some setup first.
    import django
    from django.conf import settings
    settings.configure(INSTALLED_APPS=['testapp'], DATABASES=DATABASES_FOR_DB[args.db], DB_NAME=args.db)
    django.setup()

    from django.test.runner import DiscoverRunner
    test_runner = DiscoverRunner(top_level=TESTS_DIR, interactive=False, keepdb=False)
    if args.testpaths:
        paths = ['tests.' + p for p in args.testpaths]
        failures = test_runner.run_tests(paths)
    else:
        failures = test_runner.run_tests(['tests'])
    if failures:
        sys.exit(1)


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--db', required=True)
    parser.add_argument('testpaths', nargs='*')
    args = parser.parse_args()
    main(args)