Skip to content

Commit b6261c5

Browse files
committed
Add group by and order tests.
1 parent a4a8025 commit b6261c5

File tree

1 file changed

+48
-1
lines changed

1 file changed

+48
-1
lines changed

tests/model_fields_/test_embedded_model.py

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

35
from django.core.exceptions import FieldDoesNotExist, ValidationError
4-
6+
from django.db.models import ExpressionWrapper, F, IntegerField, Max, Model, Sum
57
from django.test import SimpleTestCase, TestCase
68

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

0 commit comments

Comments
 (0)