-
Notifications
You must be signed in to change notification settings - Fork 282
/
quicktest.py
113 lines (99 loc) · 3.87 KB
/
quicktest.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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import argparse
import os
import sys
from django.conf import settings
from django.test.runner import DiscoverRunner
import django
class QuickDjangoTest:
"""
A quick way to run the Django test suite without a fully-configured project.
Example usage:
>>> QuickDjangoTest(apps=['app1', 'app2'], db='sqlite')
Based on a script published by Lukasz Dziedzia at:
http://stackoverflow.com/questions/3841725/how-to-launch-tests-for-django-reusable-app
"""
DIRNAME = os.path.dirname(__file__)
INSTALLED_APPS = [
'django.contrib.staticfiles',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.admin',
'django.contrib.messages',
]
def __init__(self, *args, **kwargs):
self.apps = kwargs.get('apps', [])
self.database= kwargs.get('db', 'sqlite')
self.run_tests()
def run_tests(self):
"""
Fire up the Django test suite.
"""
if self.database == 'postgres':
databases = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'test_db',
'HOST': 'localhost',
'USER': 'postgres',
'PASSWORD': 'password',
}
}
else:
databases = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': os.path.join(self.DIRNAME, 'database.db'),
}
}
conf = {
'DATABASES': databases,
'DEFAULT_AUTO_FIELD': 'django.db.models.BigAutoField',
'INSTALLED_APPS': self.INSTALLED_APPS + self.apps,
'STATIC_URL': '/static/',
'MIDDLEWARE': [
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
],
"SECRET_KEY": "insecure-secret-key",
'TEMPLATES': [{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'OPTIONS': {
'context_processors': [
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.request',
]
},
'APP_DIRS': True,
}],
}
if 'SPATIALITE_LIBRARY_PATH' in os.environ:
# If you get SpatiaLite-related errors, refer to this document
# to find out the proper SPATIALITE_LIBRARY_PATH value
# for your platform.
# https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/spatialite/
#
# Example for macOS (with spatialite-tools installed using brew):
# $ export SPATIALITE_LIBRARY_PATH='/usr/local/lib/mod_spatialite.dylib'
conf['SPATIALITE_LIBRARY_PATH'] = os.getenv('SPATIALITE_LIBRARY_PATH')
settings.configure(**conf)
django.setup()
failures = DiscoverRunner().run_tests(self.apps, verbosity=1)
if failures: # pragma: no cover
sys.exit(failures)
if __name__ == '__main__':
"""
What do when the user hits this file from the shell.
Example usage:
$ python quicktest.py app1 app2 --db=sqlite
"""
parser = argparse.ArgumentParser(
usage="[args] [--db=sqlite]",
description="Run Django tests on the provided applications."
)
parser.add_argument('apps', nargs='+', type=str)
parser.add_argument('--db', nargs='?', type=str, default='sqlite')
args = parser.parse_args()
QuickDjangoTest(apps=args.apps, db=args.db)