|
17 | 17 | from django_mongodb_backend.fields import EmbeddedModelField
|
18 | 18 | from django_mongodb_backend.models import EmbeddedModel
|
19 | 19 |
|
20 |
| -from .models import A, Address, Author, B, Book, C, D, Data, E, Holder, Library |
| 20 | +from .models import A, Address, Author, B, Book, C, D, Data, E, Holder, Library, Movie, Review |
21 | 21 | from .utils import truncate_ms
|
22 | 22 |
|
23 | 23 |
|
@@ -83,6 +83,63 @@ def test_pre_save(self):
|
83 | 83 | self.assertGreater(obj.data.auto_now, auto_now_two)
|
84 | 84 |
|
85 | 85 |
|
| 86 | +class EmbeddedArrayTests(TestCase): |
| 87 | + def test_save_load(self): |
| 88 | + reviews = [ |
| 89 | + Review(title="The best", rating=10), |
| 90 | + Review(title="Mediocre", rating=5), |
| 91 | + Review(title="Horrible", rating=1), |
| 92 | + ] |
| 93 | + Movie.objects.create(title="Lion King", reviews=reviews) |
| 94 | + movie = Movie.objects.get(title="Lion King") |
| 95 | + self.assertEqual(movie.reviews[0].title, "The best") |
| 96 | + self.assertEqual(movie.reviews[0].rating, 10) |
| 97 | + self.assertEqual(movie.reviews[1].title, "Mediocre") |
| 98 | + self.assertEqual(movie.reviews[1].rating, 5) |
| 99 | + self.assertEqual(movie.reviews[2].title, "Horrible") |
| 100 | + self.assertEqual(movie.reviews[2].rating, 1) |
| 101 | + self.assertEqual(len(movie.reviews), 3) |
| 102 | + |
| 103 | + def test_save_load_null(self): |
| 104 | + movie = Movie.objects.create(title="Lion King") |
| 105 | + movie = Movie.objects.get(title="Lion King") |
| 106 | + self.assertIsNone(movie.reviews) |
| 107 | + |
| 108 | + |
| 109 | +class EmbeddedArrayQueryingTests(TestCase): |
| 110 | + @classmethod |
| 111 | + def setUpTestData(cls): |
| 112 | + reviews = [ |
| 113 | + Review(title="The best", rating=10), |
| 114 | + Review(title="Mediocre", rating=5), |
| 115 | + Review(title="Horrible", rating=1), |
| 116 | + ] |
| 117 | + cls.clouds = Movie.objects.create(title="Clouds", reviews=reviews) |
| 118 | + reviews = [ |
| 119 | + Review(title="Super", rating=9), |
| 120 | + Review(title="Meh", rating=5), |
| 121 | + Review(title="Horrible", rating=2), |
| 122 | + ] |
| 123 | + cls.frozen = Movie.objects.create(title="Frozen", reviews=reviews) |
| 124 | + reviews = [ |
| 125 | + Review(title="Excellent", rating=9), |
| 126 | + Review(title="Wow", rating=8), |
| 127 | + Review(title="Classic", rating=7), |
| 128 | + ] |
| 129 | + cls.bears = Movie.objects.create(title="Bears", reviews=reviews) |
| 130 | + |
| 131 | + def test_filter_with_field(self): |
| 132 | + self.assertCountEqual( |
| 133 | + Movie.objects.filter(reviews__title="Horrible"), [self.clouds, self.frozen] |
| 134 | + ) |
| 135 | + |
| 136 | + def test_filter_with_model(self): |
| 137 | + self.assertCountEqual( |
| 138 | + Movie.objects.filter(reviews=Review(title="Horrible", rating=2)), |
| 139 | + [self.clouds, self.frozen], |
| 140 | + ) |
| 141 | + |
| 142 | + |
86 | 143 | class QueryingTests(TestCase):
|
87 | 144 | @classmethod
|
88 | 145 | def setUpTestData(cls):
|
|
0 commit comments