forked from dimagi/commcare-hq
-
Notifications
You must be signed in to change notification settings - Fork 0
/
testrunner.py
48 lines (40 loc) · 2.33 KB
/
testrunner.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from couchdbkit.ext.django.testrunner import CouchDbKitTestSuiteRunner
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.db.models.loading import get_app
import settingshelper
class HqTestSuiteRunner(CouchDbKitTestSuiteRunner):
"""
A test suite runner for Hq. On top of the couchdb testrunner, also
apply all our monkeypatches to the settings.
To use this, change the settings.py file to read:
TEST_RUNNER = 'Hq.testrunner.HqTestSuiteRunner'
"""
dbs = []
def setup_test_environment(self, **kwargs):
# monkey patch TEST_APPS into INSTALLED_APPS so that tests are run for them
# without having to explicitly have them in INSTALLED_APPS
# weird list/tuple type issues, so force everything to tuples
settings.INSTALLED_APPS = tuple(settings.INSTALLED_APPS) + tuple(settings.TEST_APPS)
return super(HqTestSuiteRunner, self).setup_test_environment(**kwargs)
def setup_databases(self, **kwargs):
self.newdbname = self.get_test_db_name(settings.COUCH_DATABASE_NAME)
print "overridding the couch settings!"
new_db_settings = settingshelper.get_dynamic_db_settings(settings.COUCH_SERVER_ROOT,
settings.COUCH_USERNAME,
settings.COUCH_PASSWORD,
self.newdbname,
settings.INSTALLED_APPS)
settings.COUCH_DATABASE_NAME = self.newdbname
for (setting, value) in new_db_settings.items():
setattr(settings, setting, value)
print "set %s settting to %s" % (setting, value)
return super(HqTestSuiteRunner, self).setup_databases(**kwargs)
def run_tests(self, test_labels, extra_tests=None, **kwargs):
if not test_labels:
test_labels = [self._strip(app) for app in settings.INSTALLED_APPS
if not app in settings.APPS_TO_EXCLUDE_FROM_TESTS
and not app.startswith('django.')]
return super(HqTestSuiteRunner, self).run_tests(test_labels, extra_tests, **kwargs)
def _strip(self, app_name):
return app_name.split('.')[-1]