3f8dd954c0405f6355c49b5318e71b55ba548604
[fnpdjango.git] / runtests.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8
3 # This file is part of FNPDjango, licensed under GNU Affero GPLv3 or later.
4 # Copyright © Fundacja Nowoczesna Polska. See README.md for more information.
5 #
6 """
7 Creates a simple Django configuration and runs tests for fnpdjango.
8 """
9 from __future__ import unicode_literals
10
11 import sys
12 import os
13 from os.path import dirname, abspath
14 from optparse import OptionParser
15 from shutil import rmtree
16
17 from django.conf import settings
18 from fnpdjango.utils.settings import LazyUGettextLazy as _
19
20
21 # For convenience configure settings if they are not pre-configured or if we
22 # haven't been provided settings to use by environment variable.
23 if not settings.configured and not os.environ.get('DJANGO_SETTINGS_MODULE'):
24     import tempfile
25     media_root = tempfile.mkdtemp(prefix='djangotest_')
26
27     settings.configure(
28         DATABASES={
29             'default': {
30                 'ENGINE': 'django.db.backends.sqlite3',
31             }
32         },
33         INSTALLED_APPS=[
34             'django.contrib.auth',
35             'django.contrib.contenttypes',
36             'django.contrib.sessions',
37             'django.contrib.sites',
38
39             'fnpdjango',
40             'tests',
41         ],
42         LANGUAGE_CODE='pl',
43         MEDIA_ROOT=media_root,
44         MIDDLEWARE_CLASSES=[
45             'django.middleware.common.CommonMiddleware',
46             'fnpdjango.middleware.URLLocaleMiddleware',
47             'fnpdjango.middleware.SetRemoteAddrFromXRealIP',
48         ],
49         FNPDJANGO_REALIP = True,
50         ROOT_URLCONF='tests.urls',
51         TEMPLATES=[
52             {
53                 'BACKEND': 'django.template.backends.django.DjangoTemplates',
54             },
55         ],
56         TEST_LAZY_UGETTEXT_LAZY=_("Lazy setting."),
57         USE_I18N=True,
58     )
59 else:
60     media_root = None
61
62 try:
63     from django.test.runner import DiscoverRunner
64 except ImportError:
65     # Django < 1.6
66     from django.test.simple import DjangoTestSuiteRunner as DiscoverRunner
67
68
69 def runtests(*test_args, **kwargs):
70     """Actual test suite entry point."""
71     if not test_args:
72         test_args = ['tests']
73     parent = dirname(abspath(__file__))
74     sys.path.insert(0, parent)
75
76     # For Django 1.7+
77     try:
78         from django import setup
79     except ImportError:
80         pass
81     else:
82         setup()
83
84     test_runner = DiscoverRunner(
85         verbosity=kwargs.get('verbosity', 1),
86         interactive=kwargs.get('interactive', False),
87         failfast=kwargs.get('failfast'))
88     failures = test_runner.run_tests(test_args)
89     if media_root:
90         rmtree(media_root)
91     sys.exit(failures)
92
93 if __name__ == '__main__':
94     parser = OptionParser()
95     parser.add_option('--failfast', action='store_true',
96                       default=False, dest='failfast')
97
98     (options, args) = parser.parse_args()
99
100     runtests(failfast=options.failfast, *args)