|
2 | 2 | from decimal import Decimal
|
3 | 3 |
|
4 | 4 | from django.core.exceptions import ValidationError
|
5 |
| -from django.db import models |
6 | 5 | from django.test import SimpleTestCase, TestCase
|
7 | 6 |
|
8 | 7 | from django_mongodb.fields import EmbeddedModelField
|
|
18 | 17 |
|
19 | 18 | class MethodTests(SimpleTestCase):
|
20 | 19 | def test_deconstruct(self):
|
21 |
| - field = EmbeddedModelField() |
22 |
| - name, path, args, kwargs = field.deconstruct() |
23 |
| - self.assertEqual(path, "django_mongodb.fields.EmbeddedModelField") |
24 |
| - self.assertEqual(args, []) |
25 |
| - self.assertEqual(kwargs, {}) |
26 |
| - |
27 |
| - def test_deconstruct_with_model(self): |
28 | 20 | field = EmbeddedModelField("EmbeddedModel", null=True)
|
29 | 21 | name, path, args, kwargs = field.deconstruct()
|
30 | 22 | self.assertEqual(path, "django_mongodb.fields.EmbeddedModelField")
|
31 | 23 | self.assertEqual(args, [])
|
32 | 24 | self.assertEqual(kwargs, {"embedded_model": "EmbeddedModel", "null": True})
|
33 | 25 |
|
34 | 26 | def test_validate(self):
|
35 |
| - instance = EmbeddedModelFieldModel(simple=EmbeddedModel(someint=None)) |
| 27 | + obj = EmbeddedModelFieldModel(simple=EmbeddedModel(someint=None)) |
36 | 28 | # This isn't quite right because "someint" is the field that's non-null.
|
37 | 29 | msg = "{'simple': ['This field cannot be null.']}"
|
38 | 30 | with self.assertRaisesMessage(ValidationError, msg):
|
39 |
| - instance.full_clean() |
| 31 | + obj.full_clean() |
40 | 32 |
|
41 | 33 |
|
42 | 34 | class QueryingTests(TestCase):
|
43 | 35 | def assertEqualDatetime(self, d1, d2):
|
44 |
| - """Compares d1 and d2, ignoring microseconds.""" |
| 36 | + """Compare d1 and d2, ignoring microseconds.""" |
45 | 37 | self.assertEqual(d1.replace(microsecond=0), d2.replace(microsecond=0))
|
46 | 38 |
|
47 | 39 | def assertNotEqualDatetime(self, d1, d2):
|
48 | 40 | self.assertNotEqual(d1.replace(microsecond=0), d2.replace(microsecond=0))
|
49 | 41 |
|
50 | 42 | def test_save_load(self):
|
51 | 43 | EmbeddedModelFieldModel.objects.create(simple=EmbeddedModel(someint="5"))
|
52 |
| - instance = EmbeddedModelFieldModel.objects.get() |
53 |
| - self.assertIsInstance(instance.simple, EmbeddedModel) |
| 44 | + obj = EmbeddedModelFieldModel.objects.get() |
| 45 | + self.assertIsInstance(obj.simple, EmbeddedModel) |
54 | 46 | # Make sure get_prep_value is called.
|
55 |
| - self.assertEqual(instance.simple.someint, 5) |
| 47 | + self.assertEqual(obj.simple.someint, 5) |
56 | 48 | # Primary keys should not be populated...
|
57 |
| - self.assertEqual(instance.simple.id, None) |
| 49 | + self.assertEqual(obj.simple.id, None) |
58 | 50 | # ... unless set explicitly.
|
59 |
| - instance.simple.id = instance.id |
60 |
| - instance.save() |
61 |
| - instance = EmbeddedModelFieldModel.objects.get() |
62 |
| - self.assertEqual(instance.simple.id, instance.id) |
| 51 | + obj.simple.id = obj.id |
| 52 | + obj.save() |
| 53 | + obj = EmbeddedModelFieldModel.objects.get() |
| 54 | + self.assertEqual(obj.simple.id, obj.id) |
63 | 55 |
|
64 |
| - def test_save_load_untyped(self): |
65 |
| - EmbeddedModelFieldModel.objects.create(simple=EmbeddedModel(someint="5")) |
66 |
| - instance = EmbeddedModelFieldModel.objects.get() |
67 |
| - self.assertIsInstance(instance.simple, EmbeddedModel) |
68 |
| - # Make sure get_prep_value is called. |
69 |
| - self.assertEqual(instance.simple.someint, 5) |
70 |
| - # Primary keys should not be populated... |
71 |
| - self.assertEqual(instance.simple.id, None) |
72 |
| - # ... unless set explicitly. |
73 |
| - instance.simple.id = instance.id |
74 |
| - instance.save() |
75 |
| - instance = EmbeddedModelFieldModel.objects.get() |
76 |
| - self.assertEqual(instance.simple.id, instance.id) |
| 56 | + def test_save_load_null(self): |
| 57 | + EmbeddedModelFieldModel.objects.create(simple=None) |
| 58 | + obj = EmbeddedModelFieldModel.objects.get() |
| 59 | + self.assertIsNone(obj.simple) |
77 | 60 |
|
78 |
| - def _test_pre_save(self, instance, get_field): |
79 |
| - # Field.pre_save() is called on embedded model fields. |
| 61 | + def test_pre_save(self): |
| 62 | + """Field.pre_save() is called on embedded model fields.""" |
| 63 | + obj = EmbeddedModelFieldModel(simple=EmbeddedModel()) |
80 | 64 |
|
81 |
| - instance.save() |
82 |
| - auto_now = get_field(instance).auto_now |
83 |
| - auto_now_add = get_field(instance).auto_now_add |
| 65 | + obj.save() |
| 66 | + auto_now = obj.simple.auto_now |
| 67 | + auto_now_add = obj.simple.auto_now_add |
84 | 68 | self.assertNotEqual(auto_now, None)
|
85 | 69 | self.assertNotEqual(auto_now_add, None)
|
86 | 70 |
|
87 | 71 | time.sleep(1) # FIXME
|
88 |
| - instance.save() |
89 |
| - self.assertNotEqualDatetime(get_field(instance).auto_now, get_field(instance).auto_now_add) |
| 72 | + obj.save() |
| 73 | + self.assertNotEqualDatetime(obj.simple.auto_now, obj.simple.auto_now_add) |
90 | 74 |
|
91 |
| - instance = EmbeddedModelFieldModel.objects.get() |
92 |
| - instance.save() |
| 75 | + obj = EmbeddedModelFieldModel.objects.get() |
| 76 | + obj.save() |
93 | 77 | # auto_now_add shouldn't have changed now, but auto_now should.
|
94 |
| - self.assertEqualDatetime(get_field(instance).auto_now_add, auto_now_add) |
95 |
| - self.assertGreater(get_field(instance).auto_now, auto_now) |
96 |
| - |
97 |
| - def test_pre_save(self): |
98 |
| - obj = EmbeddedModelFieldModel(simple=EmbeddedModel()) |
99 |
| - self._test_pre_save(obj, lambda instance: instance.simple) |
100 |
| - |
101 |
| - def test_pre_save_untyped(self): |
102 |
| - obj = EmbeddedModelFieldModel(untyped=EmbeddedModel()) |
103 |
| - self._test_pre_save(obj, lambda instance: instance.untyped) |
| 78 | + self.assertEqualDatetime(obj.simple.auto_now_add, auto_now_add) |
| 79 | + self.assertGreater(obj.simple.auto_now, auto_now) |
104 | 80 |
|
105 | 81 | def test_error_messages(self):
|
106 |
| - for model_kwargs, expected in ( |
107 |
| - ({"simple": 42}, EmbeddedModel), |
108 |
| - ({"untyped": 42}, models.Model), |
109 |
| - ): |
110 |
| - msg = "Expected instance of type %r" % expected |
111 |
| - with self.assertRaisesMessage(TypeError, msg): |
112 |
| - EmbeddedModelFieldModel(**model_kwargs).save() |
| 82 | + msg = ( |
| 83 | + "Expected instance of type <class 'model_fields_.models.EmbeddedModel'>, " |
| 84 | + "not <class 'int'>." |
| 85 | + ) |
| 86 | + with self.assertRaisesMessage(TypeError, msg): |
| 87 | + EmbeddedModelFieldModel(simple=42).save() |
113 | 88 |
|
114 | 89 | def test_foreign_key_in_embedded_object(self):
|
115 | 90 | simple = EmbeddedModel(some_relation=Target.objects.create(index=1))
|
|
0 commit comments