-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathtests.py
153 lines (126 loc) · 5.2 KB
/
tests.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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
import os
import sqlite3
from django.db import connections
from django.test import TestCase
from django.utils import six
from django_dynamic_fixture import G
from dynamic_db_router import DynamicDbRouter, in_database
from .models import TestModel
class TestInDataBaseContextManager(TestCase):
multi_db = True
def test_string_identifier(self):
G(TestModel, name='Arnold')
with in_database('default'):
count = TestModel.objects.count()
expected = 1
self.assertEqual(count, expected)
def test_unicode_identifier(self):
G(TestModel, name='Arnold')
with in_database(six.text_type('default')):
count = TestModel.objects.count()
expected = 1
self.assertEqual(count, expected)
def test_readonly_connection_writes_to_default(self):
with in_database('test'):
G(TestModel, name='Arnold')
test_count = TestModel.objects.count()
default_count = TestModel.objects.count()
self.assertEqual(test_count, 0)
self.assertEqual(default_count, 1)
def test_write_connection_writes_to_test(self):
with in_database('test', write=True):
G(TestModel, name='Arnold')
test_count = TestModel.objects.count()
default_count = TestModel.objects.count()
self.assertEqual(test_count, 1)
self.assertEqual(default_count, 0)
def test_write_only_connection_reads_from_default(self):
with in_database('test', read=False, write=True):
G(TestModel, name='Arnold')
test_count = TestModel.objects.count()
default_count = TestModel.objects.count()
self.assertEqual(test_count, 0)
self.assertEqual(default_count, 0)
def test_recursive_context_manager(self):
with in_database('test', write=True):
G(TestModel, name='Arnold')
with in_database('default', write=True):
pass
test_count = TestModel.objects.count()
self.assertEqual(test_count, 1)
def test_bad_input_value(self):
with self.assertRaises(ValueError):
with in_database(2):
pass
class TestDynamicDatabaseConnection(TestCase):
def setUp(self):
# Create a sqlite database with the models that django will
# expect.
PROJECT_DIR = os.path.abspath(os.path.dirname(__file__))
self.db_filename = os.path.join(PROJECT_DIR, 'dynamic_test_router.db')
conn = sqlite3.connect(self.db_filename)
cur = conn.cursor()
create_table_query = (
'CREATE TABLE tests_testmodel('
' id PRIMARY KEY, name varchar(32));'
)
cur.execute(create_table_query)
conn.commit()
conn.close()
# The database configuration to use with in_database
self.test_db_config = {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': self.db_filename,
}
def tearDown(self):
os.remove(self.db_filename)
def test_create_db_object(self):
with in_database(self.test_db_config, write=True):
G(TestModel, name='Arnold')
G(TestModel, name='Sue')
count = TestModel.objects.count()
expected = 2
self.assertEqual(count, expected)
def test_where_db_objects_come_from(self):
with in_database(self.test_db_config, write=True) as x:
G(TestModel, name='Sue')
database_name = TestModel.objects.get(name='Sue')._state.db
expected_database_name = x.unique_db_id
self.assertEqual(database_name, expected_database_name)
def test_cleans_up(self):
starting_connections = len(connections.databases)
with in_database(self.test_db_config, write=True):
G(TestModel, name='Sue')
ending_connections = len(connections.databases)
self.assertEqual(starting_connections, ending_connections)
class TestInDatabaseDecorator(TestCase):
def test_decorator_matches_context_manager(self):
@in_database('test')
def test_db_record_count():
return TestModel.objects.count()
with in_database('test'):
G(TestModel, name='Michael Bluth')
context_count = TestModel.objects.count()
decorator_count = test_db_record_count()
self.assertEqual(context_count, decorator_count)
class TestDynamicDbRouterDefaults(TestCase):
def test_db_for_read(self):
router = DynamicDbRouter()
db_for_read = router.db_for_read(None)
self.assertIn(db_for_read, ['default', None])
def test_db_for_wrte(self):
router = DynamicDbRouter()
db_for_write = router.db_for_write(None)
self.assertIn(db_for_write, ['default', None])
def test_allow_relation(self):
router = DynamicDbRouter()
allow_relation = router.allow_relation(None, None)
self.assertEqual(allow_relation, True)
def test_allow_syncdb(self):
router = DynamicDbRouter()
allow_syncdb = router.allow_syncdb(None, None)
self.assertEqual(allow_syncdb, None)
def test_allow_migrate(self):
router = DynamicDbRouter()
allow_migrate = router.allow_migrate(None, None)
self.assertEqual(allow_migrate, None)