Skip to content

Commit 71b6cf5

Browse files
timgrahamWaVEV
authored andcommitted
add EmbeddedModelField support to ArrayField
1 parent 663761e commit 71b6cf5

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

tests/model_fields_/test_embedded_model.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,22 @@
1717
from django_mongodb_backend.fields import EmbeddedModelField
1818
from django_mongodb_backend.models import EmbeddedModel
1919

20+
2021
from .models import (
22+
A,
2123
Address,
2224
Author,
25+
B,
2326
Book,
27+
C,
28+
D,
2429
Data,
30+
E,
2531
Holder,
2632
Library,
33+
Movie,
2734
NestedData,
35+
Review,
2836
)
2937
from .utils import truncate_ms
3038

@@ -96,6 +104,63 @@ def test_pre_save(self):
96104
self.assertGreater(obj.data.auto_now, auto_now_two)
97105

98106

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+
99164
class QueryingTests(TestCase):
100165
@classmethod
101166
def setUpTestData(cls):

0 commit comments

Comments
 (0)