|
17 | 17 | from django_mongodb_backend.fields import EmbeddedModelField
|
18 | 18 | from django_mongodb_backend.models import EmbeddedModel
|
19 | 19 |
|
| 20 | + |
20 | 21 | from .models import (
|
| 22 | + A, |
21 | 23 | Address,
|
22 | 24 | Author,
|
| 25 | + B, |
23 | 26 | Book,
|
| 27 | + C, |
| 28 | + D, |
24 | 29 | Data,
|
| 30 | + E, |
25 | 31 | Holder,
|
26 | 32 | Library,
|
| 33 | + Movie, |
27 | 34 | NestedData,
|
| 35 | + Review, |
28 | 36 | )
|
29 | 37 | from .utils import truncate_ms
|
30 | 38 |
|
@@ -96,6 +104,63 @@ def test_pre_save(self):
|
96 | 104 | self.assertGreater(obj.data.auto_now, auto_now_two)
|
97 | 105 |
|
98 | 106 |
|
| 107 | +class EmbeddedArrayTests(TestCase): |
| 108 | + def test_save_load(self): |
| 109 | + reviews = [ |
| 110 | + Review(title="The best", rating=10), |
| 111 | + Review(title="Mediocre", rating=5), |
| 112 | + Review(title="Horrible", rating=1), |
| 113 | + ] |
| 114 | + Movie.objects.create(title="Lion King", reviews=reviews) |
| 115 | + movie = Movie.objects.get(title="Lion King") |
| 116 | + self.assertEqual(movie.reviews[0].title, "The best") |
| 117 | + self.assertEqual(movie.reviews[0].rating, 10) |
| 118 | + self.assertEqual(movie.reviews[1].title, "Mediocre") |
| 119 | + self.assertEqual(movie.reviews[1].rating, 5) |
| 120 | + self.assertEqual(movie.reviews[2].title, "Horrible") |
| 121 | + self.assertEqual(movie.reviews[2].rating, 1) |
| 122 | + self.assertEqual(len(movie.reviews), 3) |
| 123 | + |
| 124 | + def test_save_load_null(self): |
| 125 | + movie = Movie.objects.create(title="Lion King") |
| 126 | + movie = Movie.objects.get(title="Lion King") |
| 127 | + self.assertIsNone(movie.reviews) |
| 128 | + |
| 129 | + |
| 130 | +class EmbeddedArrayQueryingTests(TestCase): |
| 131 | + @classmethod |
| 132 | + def setUpTestData(cls): |
| 133 | + reviews = [ |
| 134 | + Review(title="The best", rating=10), |
| 135 | + Review(title="Mediocre", rating=5), |
| 136 | + Review(title="Horrible", rating=1), |
| 137 | + ] |
| 138 | + cls.clouds = Movie.objects.create(title="Clouds", reviews=reviews) |
| 139 | + reviews = [ |
| 140 | + Review(title="Super", rating=9), |
| 141 | + Review(title="Meh", rating=5), |
| 142 | + Review(title="Horrible", rating=2), |
| 143 | + ] |
| 144 | + cls.frozen = Movie.objects.create(title="Frozen", reviews=reviews) |
| 145 | + reviews = [ |
| 146 | + Review(title="Excellent", rating=9), |
| 147 | + Review(title="Wow", rating=8), |
| 148 | + Review(title="Classic", rating=7), |
| 149 | + ] |
| 150 | + cls.bears = Movie.objects.create(title="Bears", reviews=reviews) |
| 151 | + |
| 152 | + def test_filter_with_field(self): |
| 153 | + self.assertCountEqual( |
| 154 | + Movie.objects.filter(reviews__title="Horrible"), [self.clouds, self.frozen] |
| 155 | + ) |
| 156 | + |
| 157 | + def test_filter_with_model(self): |
| 158 | + self.assertCountEqual( |
| 159 | + Movie.objects.filter(reviews=Review(title="Horrible", rating=2)), |
| 160 | + [self.clouds, self.frozen], |
| 161 | + ) |
| 162 | + |
| 163 | + |
99 | 164 | class QueryingTests(TestCase):
|
100 | 165 | @classmethod
|
101 | 166 | def setUpTestData(cls):
|
|
0 commit comments