File: test_wrappers.py

package info (click to toggle)
python-django-dynamic-fixture 4.0.1-1~bpo12%2B1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 616 kB
  • sloc: python: 3,909; makefile: 237; sh: 6
file content (276 lines) | stat: -rw-r--r-- 12,072 bytes parent folder | download | duplicates (2)
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276

from django.test import TransactionTestCase as TestCase

from django_dynamic_fixture.models_test import EmptyModel, ModelWithRelationships, ModelForLibrary, ModelWithStrings
from django_dynamic_fixture import N, G, F, C, M, P, teach, look_up_alias, PRE_SAVE, POST_SAVE


class NShortcutTest(TestCase):
    def test_shortcut_N(self):
        instance = N(EmptyModel)
        assert instance.id == None


class GShortcutTest(TestCase):
    def test_shortcut_G(self):
        instance = G(EmptyModel)
        assert instance.id != None


class PShortcutTest(TestCase):
    def test_accept_model_instance(self):
        P(N(EmptyModel))
        P(G(EmptyModel))

    def test_accepts_list(self):
        P([N(EmptyModel), G(EmptyModel)])

    def test_accepts_tuple(self):
        P((N(EmptyModel), G(EmptyModel)))

    def test_accepts_queryset(self):
        P(EmptyModel.objects.all())


class FShortcutTest(TestCase):
    def test_fk(self):
        instance = G(ModelWithRelationships, integer=1000, foreignkey=F(integer=1001))
        assert 1000, instance.integer == 1000
        assert instance.foreignkey.integer == 1001

    def test_self_fk(self):
        instance = G(ModelWithRelationships, integer=1000, selfforeignkey=F(integer=1001))
        assert instance.integer == 1000
        assert instance.selfforeignkey.integer == 1001

    def test_o2o(self):
        instance = G(ModelWithRelationships, integer=1000, onetoone=F(integer=1001))
        assert instance.integer == 1000
        assert instance.onetoone.integer == 1001

    def test_m2m_with_one_element(self):
        instance = G(ModelWithRelationships, integer=1000, manytomany=[F(integer=1001)])
        assert instance.integer == 1000
        assert instance.manytomany.all()[0].integer == 1001

    def test_m2m_with_many_elements(self):
        instance = G(ModelWithRelationships, integer=1000, manytomany=[F(integer=1001), F(integer=1002)])
        assert instance.integer == 1000
        assert instance.manytomany.all()[0].integer == 1001
        assert instance.manytomany.all()[1].integer == 1002

    def test_full_example(self):
        instance = G(ModelWithRelationships, integer=1000,
                     foreignkey=F(integer=1001),
                     selfforeignkey=F(integer=1002),
                     onetoone=F(integer=1003),
                     manytomany=[F(integer=1004), F(integer=1005), F(selfforeignkey=F(integer=1006))])
        assert instance.integer == 1000
        assert instance.foreignkey.integer == 1001
        assert instance.selfforeignkey.integer == 1002
        assert instance.onetoone.integer == 1003
        assert instance.manytomany.all()[0].integer == 1004
        assert instance.manytomany.all()[1].integer == 1005
        assert instance.manytomany.all()[2].selfforeignkey.integer == 1006

    def test_two_properties_same_object(self):
        instance = G(ModelWithRelationships, integer=1000, foreignkey=F(integer=1001, integer_b=1002))
        assert instance.integer == 1000
        assert instance.foreignkey.integer == 1001
        assert instance.foreignkey.integer_b == 1002

    def test_using_look_up_alias(self):
        instance = G(ModelWithRelationships, integer=1000,
                     foreignkey__integer=1001,
                     selfforeignkey__integer=1002,
                     onetoone__integer=1003,
                     manytomany=[F(integer=1004), F(integer=1005), F(selfforeignkey__integer=1006)])
        assert instance.integer == 1000
        assert instance.foreignkey.integer == 1001
        assert instance.selfforeignkey.integer == 1002
        assert instance.onetoone.integer == 1003
        assert instance.manytomany.all()[0].integer == 1004
        assert instance.manytomany.all()[1].integer == 1005
        assert instance.manytomany.all()[2].selfforeignkey.integer == 1006

    def test_using_look_up_alias_two_properties_same_object(self):
        instance = G(ModelWithRelationships, integer=1000,
                                             foreignkey__integer=1001,
                                             foreignkey__integer_b=1002)
        assert instance.integer == 1000
        assert instance.foreignkey.integer == 1001
        assert instance.foreignkey.integer_b == 1002

    def test_using_look_up_alias_two_properties_same_object(self):
        instance = G(ModelWithRelationships, integer=1000,
                                             foreignkey__integer=1001,
                                             foreignkey__integer_b=1002)
        assert instance.integer == 1000
        assert instance.foreignkey.integer_b == 1002
        assert instance.foreignkey.integer == 1001


class CShortcutTest(TestCase):
    def test_copying_from_the_same_model(self):
        instance = G(ModelWithRelationships, integer=C('integer_b'))
        assert instance.integer == instance.integer_b

    def test_copying_from_a_fk(self):
        instance = G(ModelWithRelationships, foreignkey=F(), integer=C('foreignkey.integer'))
        assert instance.integer == instance.foreignkey.integer

    def test_copying_from_a_one2one(self):
        instance = G(ModelWithRelationships, onetoone=F(), integer=C('onetoone.integer'))
        assert instance.integer == instance.onetoone.integer

    def test_copying_from_a_self_fk(self):
        instance = G(ModelWithRelationships, selfforeignkey=F(), integer=C('selfforeignkey.integer_b'))
        assert instance.integer == instance.selfforeignkey.integer_b

    def test_copying_inside_fk(self):
        instance = G(ModelWithRelationships, selfforeignkey=F(selfforeignkey=F(), integer=C('selfforeignkey.integer_b')))
        assert instance.selfforeignkey.integer == instance.selfforeignkey.selfforeignkey.integer_b

    def test_copying_inside_many_to_many(self):
        instance = G(ModelWithRelationships, manytomany=[F(integer=C('integer_b'))])
        instance1 = instance.manytomany.all()[0]
        assert instance1.integer == instance1.integer_b


class MShortcutTest(TestCase):
    def test_full_data_mask_sample(self):
        import re
        instance = G(ModelWithStrings, string=M(r'St. -______, ### !- -- --'))
        assert re.match(r'St\. [A-Z]{1}[a-z]{6}, \d{3} - [A-Z]{2} [A-Z]{2}', instance.string)


class TeachingAndLessonsTest(TestCase):
    def test_global_lesson(self):
        teach(ModelForLibrary, integer=1000)
        instance = G(ModelForLibrary)
        assert instance.integer == 1000

        instance = G(ModelForLibrary, integer=1001)
        assert instance.integer == 1001

        instance = G(ModelForLibrary)
        assert instance.integer == 1000


class CreatingMultipleObjectsTest(TestCase):
    def test_new(self):
        assert N(EmptyModel, n=0) == []
        assert N(EmptyModel, n= -1) == []
        assert isinstance(N(EmptyModel), EmptyModel) # default is 1
        assert isinstance(N(EmptyModel, n=1), EmptyModel)
        assert len(N(EmptyModel, n=2)) == 2

    def test_get(self):
        assert G(EmptyModel, n=0) == []
        assert G(EmptyModel, n= -1) == []
        assert isinstance(G(EmptyModel), EmptyModel) # default is 1
        assert isinstance(G(EmptyModel, n=1), EmptyModel)
        assert len(G(EmptyModel, n=2)) == 2


class LookUpSeparatorTest(TestCase):
    def test_look_up_alias_with_all_params_combination(self):
        assert {'a': 1} == look_up_alias(a=1, ddf_as_f=False)
        assert {'a': 1, 'b': 2} == look_up_alias(a=1, b=2, ddf_as_f=False)
        assert {'a': {'b': 1}} == look_up_alias(a__b=1, ddf_as_f=False)
        assert {'a': {'b': 1}, 'c': 2} == look_up_alias(a__b=1, c=2, ddf_as_f=False)
        assert {'a': {'b': 1}, 'c': {'d': 2}} == look_up_alias(a__b=1, c__d=2, ddf_as_f=False)
        assert {'a': {'b': 1, 'c': 2}} == look_up_alias(a__b=1, a__c=2, ddf_as_f=False)
        assert {'a': {'b': 1, 'c': {'d': 2}}} == look_up_alias(a__b=1, a__c__d=2, ddf_as_f=False)
        assert {'a': {'b': 1, 'c': {'d': 2}}, 'e': {'f': 3}, 'g': 4} == look_up_alias(a__b=1, a__c__d=2, e__f=3, g=4, ddf_as_f=False)

    def test_look_up_alias_as_f_with_all_params_combination(self):
        assert {'a': 1} == look_up_alias(a=1)
        assert {'a': 1, 'b': 2} == look_up_alias(a=1, b=2)
        assert {'a': F(b=1)} == look_up_alias(a__b=1)
        assert {'a': F(b=1), 'c': 2} == look_up_alias(a__b=1, c=2)
        assert {'a': F(b=1), 'c': F(d=2)} == look_up_alias(a__b=1, c__d=2)
        assert {'a': F(b=1, c=2)} == look_up_alias(a__b=1, a__c=2)
        assert {'a': F(b=1, c=F(d=2))} == look_up_alias(a__b=1, a__c__d=2)
        assert {'a': F(b=1, c=F(d=2)), 'e': F(f=3), 'g': 4} == look_up_alias(a__b=1, a__c__d=2, e__f=3, g=4)

    def test_look_up_alias_with_just_one_parameter(self):
        assert {'a': 1} == look_up_alias(a=1)
        assert {'a': F()} == look_up_alias(a=F())
        assert {'a_b': 1} == look_up_alias(a_b=1)
        assert {'a': F(b=1)} == look_up_alias(a__b=1)
        assert {'a_b': F(c=1)} == look_up_alias(a_b__c=1)
        assert {'a': F(b=F(c=1))} == look_up_alias(a__b__c=1)
        assert {'a_b': F(c_d=F(e_f=1))} == look_up_alias(a_b__c_d__e_f=1)

    def test_look_up_alias_with_many_parameters(self):
        assert {'a': 1, 'b': 2} == look_up_alias(a=1, b=2)
        assert {'a': 1, 'b_c': 2} == look_up_alias(a=1, b_c=2)
        assert {'a': 1, 'b': F(c=2)} == look_up_alias(a=1, b__c=2)
        assert {'a': F(b=1), 'c': F(d=2)} == look_up_alias(a__b=1, c__d=2)

    def test_dont_format_default_dict_values(self):
        kwargs = dict(metadata=dict(a=1))
        assert {'metadata': {'a': 1}} == look_up_alias(**kwargs)
        assert {'metadata': {'a': 1}} == look_up_alias(metadata={'a': 1})


class PreAndPostSaveTest(TestCase):
    def tearDown(self):
        # Workaround to pass the tests in Travis, caused by an unknown issue
        # with LazySettings and ALLOWED_HOSTS
        pass

    def test_pre_save(self):
        PRE_SAVE(EmptyModel, lambda x: x)

    def test_post_save(self):
        POST_SAVE(EmptyModel, lambda x: x)


class UsingModelNameInsteadTest(TestCase):
    def test_compatibility_for_new(self):
        instance = N('django_dynamic_fixture.ModelWithNumbers', integer=5)
        assert instance.integer == 5

    def test_compatibility_for_get(self):
        instance = G('django_dynamic_fixture.ModelWithNumbers', integer=5)
        assert instance.integer == 5

    def test_compatibility_for_teach(self):
        teach('django_dynamic_fixture.ModelWithDefaultValues', integer_with_default=5)
        instance = G('django_dynamic_fixture.ModelWithDefaultValues')
        assert instance.integer_with_default == 5


class OverrideDataFixture(TestCase):
    def test_random(self):
        instance = N('django_dynamic_fixture.ModelWithNumbers', data_fixture='random')
        assert instance is not None
        instance = G('django_dynamic_fixture.ModelWithNumbers', data_fixture='random')
        assert instance is not None

    def test_sequential(self):
        instance = N('django_dynamic_fixture.ModelWithNumbers', data_fixture='sequential')
        assert instance is not None
        instance = G('django_dynamic_fixture.ModelWithNumbers', data_fixture='sequential')
        assert instance is not None

    def test_static_sequential(self):
        instance = N('django_dynamic_fixture.ModelWithNumbers', data_fixture='static_sequential')
        assert instance is not None
        instance = G('django_dynamic_fixture.ModelWithNumbers', data_fixture='static_sequential')
        assert instance is not None

    def test_custom_one(self):
        from django_dynamic_fixture.fixture_algorithms.sequential_fixture import SequentialDataFixture
        instance = N('django_dynamic_fixture.ModelWithNumbers', data_fixture=SequentialDataFixture())
        assert instance is not None
        instance = G('django_dynamic_fixture.ModelWithNumbers', data_fixture=SequentialDataFixture())
        assert instance is not None


class Version(TestCase):
    def test_version(self):
        from django_dynamic_fixture import __version__
        from ddf import __version__