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