/
test_d12f.py
87 lines (68 loc) · 2.65 KB
/
test_d12f.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
from __future__ import absolute_import
import django12factor
import unittest
from .env import env
d12f = django12factor.factorise
def debugenv(**kwargs):
return env(DEBUG="true", **kwargs)
class TestD12F(unittest.TestCase):
def test_object_no_secret_key_prod(self):
with env(DEBUG="false"):
self.assertRaises(SystemExit, d12f)
def test_debug(self):
with debugenv():
self.assertTrue(d12f()['DEBUG'])
def test_debug_defaults_to_off(self):
"""
Ensure that by default, DEBUG is false (for safety reasons)
"""
with env(SECRET_KEY="x"):
self.assertFalse(d12f()['DEBUG'])
def test_template_debug(self):
with debugenv():
# Unless explicitly set, TEMPLATE_DEBUG = DEBUG
self.assertTrue(d12f()['TEMPLATE_DEBUG'])
with debugenv(TEMPLATE_DEBUG="false"):
s = d12f()
self.assertFalse(s['TEMPLATE_DEBUG'])
self.assertTrue(s['DEBUG'])
def test_db(self):
with debugenv():
self.assertIn("sqlite", d12f()['DATABASES']['default']['ENGINE'])
with debugenv(DATABASE_URL="sqlite://:memory:"):
self.assertIn("sqlite", d12f()['DATABASES']['default']['ENGINE'])
postgenv = debugenv(
DATABASE_URL="postgres://username:password@host:1234/dbname",
)
with postgenv:
db = d12f()['DATABASES']['default']
self.assertIn("postgres", db['ENGINE'])
self.assertEquals("dbname", db['NAME'])
def test_custom_key(self):
with debugenv(CUSTOM_KEY="banana"):
settings = d12f(['CUSTOM_KEY'])
self.assertIn("banana", settings['CUSTOM_KEY'])
def test_missing_custom_keys(self):
present = 1
with debugenv(PRESENT=present):
settings = d12f(['PRESENT', 'MISSING'])
self.assertEquals(present, settings['PRESENT'])
self.assertIsNone(settings['MISSING'])
def test_multiple_db_support(self):
DBNAME = "test"
DB_URL_NAME = "%s_DATABASE_URL" % DBNAME.upper()
e = {DB_URL_NAME: "postgres://username:password@host:1234/dbname"}
with debugenv(**e):
dbs = d12f()['DATABASES']
self.assertIn(
'sqlite',
dbs['default']['ENGINE'],
"Failed to load default DATABASE"
)
self.assertIn(
DBNAME,
dbs,
"Failed to parse a database called '%s' from the environment "
"variable %s" % (DBNAME, DB_URL_NAME)
)
self.assertIn('postgres', dbs[DBNAME]['ENGINE'])