Skip to content

Commit 71dcca1

Browse files
committed
Add group by and order tests.
1 parent 9a8ffd5 commit 71dcca1

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

tests/model_fields_/test_embedded_model.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
import operator
2+
from datetime import timedelta
13
from decimal import Decimal
24

35
from django.core.exceptions import FieldDoesNotExist, ValidationError
6+
from django.db.models import ExpressionWrapper, F, IntegerField, Max, Sum
47
from django.test import SimpleTestCase, TestCase
58

69
from django_mongodb.fields import EmbeddedModelField
@@ -171,3 +174,48 @@ def test_embedded_with_json_field(self):
171174
),
172175
models[1:3],
173176
)
177+
178+
@staticmethod
179+
def _truncate_ms(time):
180+
return time - timedelta(microseconds=time.microsecond)
181+
182+
################
183+
def test_ordering_by_embedded_field(self):
184+
query = (
185+
EmbeddedModelFieldModel.objects.filter(simple__someint__gt=3)
186+
.order_by("-simple__someint")
187+
.values("pk")
188+
)
189+
expected = [{"pk": e.pk} for e in list(reversed(self.objs[4:]))]
190+
self.assertSequenceEqual(query, expected)
191+
192+
def test_ordering_grouping_by_embedded_field(self):
193+
query = (
194+
EmbeddedModelFieldModel.objects.annotate(
195+
group=ExpressionWrapper(F("simple__someint") + 5, output_field=IntegerField())
196+
)
197+
.values("group")
198+
.annotate(max_pk=Max("simple__auto_now"))
199+
.order_by("simple__someint")
200+
)
201+
query = [{**e, "max_pk": self._truncate_ms(e["max_pk"])} for e in query]
202+
expected = [
203+
EmbeddedModelFieldModel.objects.create(simple=EmbeddedModel(someint=x))
204+
for x in range(6)
205+
]
206+
self.assertSequenceEqual(
207+
query,
208+
[
209+
{"group": e.simple.someint + 5, "max_pk": self._truncate_ms(e.simple.auto_now)}
210+
for e in expected
211+
],
212+
)
213+
214+
def test_ordering_grouping_by_sum(self):
215+
[EmbeddedModelFieldModel.objects.create(simple=EmbeddedModel(someint=x)) for x in range(6)]
216+
qs = (
217+
EmbeddedModelFieldModel.objects.values("simple__someint")
218+
.annotate(sum=Sum("simple__someint"))
219+
.order_by("sum")
220+
)
221+
self.assertQuerySetEqual(qs, [0, 2, 4, 6, 8, 10], operator.itemgetter("sum"))

0 commit comments

Comments
 (0)