Skip to content

Commit 5b181a7

Browse files
committed
Move EMFArray unit test
1 parent 830f3ec commit 5b181a7

File tree

2 files changed

+144
-171
lines changed

2 files changed

+144
-171
lines changed

tests/model_fields_/test_embedded_model.py

Lines changed: 1 addition & 164 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import operator
2-
from datetime import date, timedelta
2+
from datetime import timedelta
33

44
from django.core.exceptions import FieldDoesNotExist, ValidationError
55
from django.db import models
@@ -19,17 +19,13 @@
1919

2020
from .models import (
2121
Address,
22-
ArtifactDetail,
2322
Author,
2423
Book,
2524
Data,
26-
ExhibitSection,
2725
Holder,
2826
Library,
2927
Movie,
30-
MuseumExhibit,
3128
NestedData,
32-
RestorationRecord,
3329
Review,
3430
)
3531
from .utils import truncate_ms
@@ -125,165 +121,6 @@ def test_save_load_null(self):
125121
self.assertIsNone(movie.reviews)
126122

127123

128-
class EmbeddedArrayQueryingTests(TestCase):
129-
@classmethod
130-
def setUpTestData(cls):
131-
reviews = [
132-
Review(title="The best", rating=10),
133-
Review(title="Mediocre", rating=5),
134-
Review(title="Horrible", rating=1),
135-
]
136-
cls.clouds = Movie.objects.create(title="Clouds", reviews=reviews)
137-
reviews = [
138-
Review(title="Super", rating=9),
139-
Review(title="Meh", rating=5),
140-
Review(title="Horrible", rating=2),
141-
]
142-
cls.frozen = Movie.objects.create(title="Frozen", reviews=reviews)
143-
reviews = [
144-
Review(title="Excellent", rating=9),
145-
Review(title="Wow", rating=8),
146-
Review(title="Classic", rating=7),
147-
]
148-
cls.bears = Movie.objects.create(title="Bears", reviews=reviews)
149-
cls.egypt = MuseumExhibit.objects.create(
150-
exhibit_name="Ancient Egypt",
151-
sections=[
152-
ExhibitSection(
153-
section_number=1,
154-
artifacts=[
155-
ArtifactDetail(
156-
name="Ptolemaic Crown",
157-
description="Royal headpiece worn by Ptolemy kings.",
158-
metadata={
159-
"material": "gold",
160-
"origin": "Egypt",
161-
"era": "Ptolemaic Period",
162-
},
163-
)
164-
],
165-
)
166-
],
167-
)
168-
cls.wonders = MuseumExhibit.objects.create(
169-
exhibit_name="Wonders of the Ancient World",
170-
sections=[
171-
ExhibitSection(
172-
section_number=1,
173-
artifacts=[
174-
ArtifactDetail(
175-
name="Statue of Zeus",
176-
description="One of the Seven Wonders, created by Phidias.",
177-
metadata={"location": "Olympia", "height_m": 12},
178-
),
179-
ArtifactDetail(
180-
name="Hanging Gardens",
181-
description="Legendary gardens of Babylon.",
182-
metadata={"debated_existence": True},
183-
),
184-
],
185-
),
186-
ExhibitSection(
187-
section_number=2,
188-
artifacts=[
189-
ArtifactDetail(
190-
name="Lighthouse of Alexandria",
191-
description="Guided sailors safely to port.",
192-
metadata={"height_m": 100, "built": "3rd century BC"},
193-
)
194-
],
195-
),
196-
],
197-
)
198-
cls.new_descoveries = MuseumExhibit.objects.create(
199-
exhibit_name="New Discoveries",
200-
sections=[ExhibitSection(section_number=1, artifacts=[])],
201-
)
202-
cls.lost_empires = MuseumExhibit.objects.create(
203-
exhibit_name="Lost Empires",
204-
main_section=ExhibitSection(
205-
section_number=3,
206-
artifacts=[
207-
ArtifactDetail(
208-
name="Bronze Statue",
209-
description="Statue from the Hellenistic period.",
210-
metadata={"origin": "Pergamon", "material": "bronze"},
211-
restorations=[
212-
RestorationRecord(
213-
date=date(1998, 4, 15),
214-
description="Removed oxidized layer.",
215-
restored_by="Restoration Lab A",
216-
),
217-
RestorationRecord(
218-
date=date(2010, 7, 22),
219-
description="Reinforced the base structure.",
220-
restored_by="Dr. Liu Cheng",
221-
),
222-
],
223-
last_restoration=RestorationRecord(
224-
date=date(2010, 7, 22),
225-
description="Reinforced the base structure.",
226-
restored_by="Dr. Liu Cheng",
227-
),
228-
)
229-
],
230-
),
231-
)
232-
233-
def test_filter_with_field(self):
234-
self.assertCountEqual(
235-
Movie.objects.filter(reviews__title="Horrible"), [self.clouds, self.frozen]
236-
)
237-
238-
def test_filter_with_embeddedfield_path(self):
239-
self.assertCountEqual(
240-
MuseumExhibit.objects.filter(sections__0__section_number=1),
241-
[self.egypt, self.wonders, self.new_descoveries],
242-
)
243-
244-
def test_filter_with_embeddedfield_array_path(self):
245-
self.assertCountEqual(
246-
MuseumExhibit.objects.filter(
247-
main_section__artifacts__restorations__0__restored_by="Restoration Lab A"
248-
),
249-
[self.lost_empires],
250-
)
251-
252-
def test_len(self):
253-
self.assertCountEqual(MuseumExhibit.objects.filter(sections__len=10), [])
254-
self.assertCountEqual(
255-
MuseumExhibit.objects.filter(sections__len=1), [self.egypt, self.new_descoveries]
256-
)
257-
# Nested EMF
258-
self.assertCountEqual(
259-
MuseumExhibit.objects.filter(main_section__artifacts__len=1), [self.lost_empires]
260-
)
261-
self.assertCountEqual(MuseumExhibit.objects.filter(main_section__artifacts__len=2), [])
262-
self.assertCountEqual(MuseumExhibit.objects.filter(main_section__artifacts__len=2), [])
263-
# Nested Indexed Array
264-
self.assertCountEqual(
265-
MuseumExhibit.objects.filter(sections__0__artifacts__len=2), [self.wonders]
266-
)
267-
self.assertCountEqual(
268-
MuseumExhibit.objects.filter(sections__0__artifacts__len=0), [self.new_descoveries]
269-
)
270-
self.assertCountEqual(
271-
MuseumExhibit.objects.filter(sections__1__artifacts__len=1), [self.wonders]
272-
)
273-
274-
def test_overlap_simplefield(self):
275-
self.assertSequenceEqual(
276-
MuseumExhibit.objects.filter(sections__section_number__overlap=[10]), []
277-
)
278-
self.assertSequenceEqual(
279-
MuseumExhibit.objects.filter(sections__section_number__overlap=[1]),
280-
[self.egypt, self.wonders, self.new_descoveries],
281-
)
282-
self.assertSequenceEqual(
283-
MuseumExhibit.objects.filter(sections__section_number__overlap=[2]), [self.wonders]
284-
)
285-
286-
287124
class QueryingTests(TestCase):
288125
@classmethod
289126
def setUpTestData(cls):

tests/model_fields_/test_embedded_model_array.py

Lines changed: 143 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
1-
from django.core.exceptions import FieldError
1+
from datetime import date
2+
23
from django.db import models
34
from django.test import SimpleTestCase, TestCase
45
from django.test.utils import isolate_apps
56

67
from django_mongodb_backend.fields import EmbeddedModelArrayField
78
from django_mongodb_backend.models import EmbeddedModel
89

9-
from .models import Movie, Review
10+
from .models import (
11+
ArtifactDetail,
12+
ExhibitSection,
13+
Movie,
14+
MuseumExhibit,
15+
RestorationRecord,
16+
Review,
17+
)
1018

1119

1220
class MethodTests(SimpleTestCase):
@@ -77,14 +85,142 @@ def setUpTestData(cls):
7785
Review(title="Classic", rating=7),
7886
]
7987
cls.bears = Movie.objects.create(title="Bears", reviews=reviews)
88+
cls.egypt = MuseumExhibit.objects.create(
89+
exhibit_name="Ancient Egypt",
90+
sections=[
91+
ExhibitSection(
92+
section_number=1,
93+
artifacts=[
94+
ArtifactDetail(
95+
name="Ptolemaic Crown",
96+
description="Royal headpiece worn by Ptolemy kings.",
97+
metadata={
98+
"material": "gold",
99+
"origin": "Egypt",
100+
"era": "Ptolemaic Period",
101+
},
102+
)
103+
],
104+
)
105+
],
106+
)
107+
cls.wonders = MuseumExhibit.objects.create(
108+
exhibit_name="Wonders of the Ancient World",
109+
sections=[
110+
ExhibitSection(
111+
section_number=1,
112+
artifacts=[
113+
ArtifactDetail(
114+
name="Statue of Zeus",
115+
description="One of the Seven Wonders, created by Phidias.",
116+
metadata={"location": "Olympia", "height_m": 12},
117+
),
118+
ArtifactDetail(
119+
name="Hanging Gardens",
120+
description="Legendary gardens of Babylon.",
121+
metadata={"debated_existence": True},
122+
),
123+
],
124+
),
125+
ExhibitSection(
126+
section_number=2,
127+
artifacts=[
128+
ArtifactDetail(
129+
name="Lighthouse of Alexandria",
130+
description="Guided sailors safely to port.",
131+
metadata={"height_m": 100, "built": "3rd century BC"},
132+
)
133+
],
134+
),
135+
],
136+
)
137+
cls.new_descoveries = MuseumExhibit.objects.create(
138+
exhibit_name="New Discoveries",
139+
sections=[ExhibitSection(section_number=1, artifacts=[])],
140+
)
141+
cls.lost_empires = MuseumExhibit.objects.create(
142+
exhibit_name="Lost Empires",
143+
main_section=ExhibitSection(
144+
section_number=3,
145+
artifacts=[
146+
ArtifactDetail(
147+
name="Bronze Statue",
148+
description="Statue from the Hellenistic period.",
149+
metadata={"origin": "Pergamon", "material": "bronze"},
150+
restorations=[
151+
RestorationRecord(
152+
date=date(1998, 4, 15),
153+
description="Removed oxidized layer.",
154+
restored_by="Restoration Lab A",
155+
),
156+
RestorationRecord(
157+
date=date(2010, 7, 22),
158+
description="Reinforced the base structure.",
159+
restored_by="Dr. Liu Cheng",
160+
),
161+
],
162+
last_restoration=RestorationRecord(
163+
date=date(2010, 7, 22),
164+
description="Reinforced the base structure.",
165+
restored_by="Dr. Liu Cheng",
166+
),
167+
)
168+
],
169+
),
170+
)
80171

81172
def test_filter_with_field(self):
82-
msg = (
83-
"Unsupported lookup 'title' for EmbeddedModelArrayField or join "
84-
"on the field not permitted."
173+
self.assertCountEqual(
174+
Movie.objects.filter(reviews__title="Horrible"), [self.clouds, self.frozen]
175+
)
176+
177+
def test_filter_with_embeddedfield_path(self):
178+
self.assertCountEqual(
179+
MuseumExhibit.objects.filter(sections__0__section_number=1),
180+
[self.egypt, self.wonders, self.new_descoveries],
181+
)
182+
183+
def test_filter_with_embeddedfield_array_path(self):
184+
self.assertCountEqual(
185+
MuseumExhibit.objects.filter(
186+
main_section__artifacts__restorations__0__restored_by="Restoration Lab A"
187+
),
188+
[self.lost_empires],
189+
)
190+
191+
def test_len(self):
192+
self.assertCountEqual(MuseumExhibit.objects.filter(sections__len=10), [])
193+
self.assertCountEqual(
194+
MuseumExhibit.objects.filter(sections__len=1), [self.egypt, self.new_descoveries]
195+
)
196+
# Nested EMF
197+
self.assertCountEqual(
198+
MuseumExhibit.objects.filter(main_section__artifacts__len=1), [self.lost_empires]
199+
)
200+
self.assertCountEqual(MuseumExhibit.objects.filter(main_section__artifacts__len=2), [])
201+
self.assertCountEqual(MuseumExhibit.objects.filter(main_section__artifacts__len=2), [])
202+
# Nested Indexed Array
203+
self.assertCountEqual(
204+
MuseumExhibit.objects.filter(sections__0__artifacts__len=2), [self.wonders]
205+
)
206+
self.assertCountEqual(
207+
MuseumExhibit.objects.filter(sections__0__artifacts__len=0), [self.new_descoveries]
208+
)
209+
self.assertCountEqual(
210+
MuseumExhibit.objects.filter(sections__1__artifacts__len=1), [self.wonders]
211+
)
212+
213+
def test_overlap_simplefield(self):
214+
self.assertSequenceEqual(
215+
MuseumExhibit.objects.filter(sections__section_number__overlap=[10]), []
216+
)
217+
self.assertSequenceEqual(
218+
MuseumExhibit.objects.filter(sections__section_number__overlap=[1]),
219+
[self.egypt, self.wonders, self.new_descoveries],
220+
)
221+
self.assertSequenceEqual(
222+
MuseumExhibit.objects.filter(sections__section_number__overlap=[2]), [self.wonders]
85223
)
86-
with self.assertRaisesMessage(FieldError, msg):
87-
Movie.objects.filter(reviews__title="Horrible")
88224

89225

90226
@isolate_apps("model_fields_")

0 commit comments

Comments
 (0)