Python 3, Django 1.7+ compatilibity, some tests.
[fnpdjango.git] / runtests.py
diff --git a/runtests.py b/runtests.py
new file mode 100644 (file)
index 0000000..fd4e24a
--- /dev/null
@@ -0,0 +1,87 @@
+#!/usr/bin/env python
+# -*- coding: utf-8
+# This file is part of FNPDjango, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See README.md for more information.
+#
+"""
+Creates a simple Django configuration and runs tests for fnpdjango.
+"""
+from __future__ import unicode_literals
+
+import sys
+import os
+from os.path import dirname, abspath
+from optparse import OptionParser
+from shutil import rmtree
+
+from django.conf import settings
+from fnpdjango.utils.settings import LazyUGettextLazy as _
+
+
+# For convenience configure settings if they are not pre-configured or if we
+# haven't been provided settings to use by environment variable.
+if not settings.configured and not os.environ.get('DJANGO_SETTINGS_MODULE'):
+    import tempfile
+    media_root = tempfile.mkdtemp(prefix='djangotest_')
+
+    settings.configure(
+        DATABASES={
+            'default': {
+                'ENGINE': 'django.db.backends.sqlite3',
+            }
+        },
+        INSTALLED_APPS=[
+            'django.contrib.auth',
+            'django.contrib.contenttypes',
+            'django.contrib.sessions',
+            'django.contrib.sites',
+
+            'fnpdjango',
+            'tests',
+        ],
+        LANGUAGE_CODE='pl',
+        MEDIA_ROOT=media_root,
+        TEST_LAZY_UGETTEXT_LAZY=_("Lazy setting."),
+    )
+else:
+    media_root = None
+
+try:
+    from django.test.runner import DiscoverRunner
+except ImportError:
+    # Django < 1.6
+    from django.test.simple import DjangoTestSuiteRunner as DiscoverRunner
+
+
+def runtests(*test_args, **kwargs):
+    """Actual test suite entry point."""
+    if not test_args:
+        test_args = ['tests']
+    parent = dirname(abspath(__file__))
+    sys.path.insert(0, parent)
+
+    # For Django 1.7+
+    try:
+        from django import setup
+    except ImportError:
+        pass
+    else:
+        setup()
+
+    test_runner = DiscoverRunner(
+        verbosity=kwargs.get('verbosity', 1),
+        interactive=kwargs.get('interactive', False),
+        failfast=kwargs.get('failfast'))
+    failures = test_runner.run_tests(test_args)
+    if media_root:
+        rmtree(media_root)
+    sys.exit(failures)
+
+if __name__ == '__main__':
+    parser = OptionParser()
+    parser.add_option('--failfast', action='store_true',
+                      default=False, dest='failfast')
+
+    (options, args) = parser.parse_args()
+
+    runtests(failfast=options.failfast, *args)