Skip to content

Commit d480a9d

Browse files
add unit test
1 parent 5e3f33b commit d480a9d

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

tests/queryset/test_queryset.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from mongoengine.queryset import (
2222
DoesNotExist,
2323
MultipleObjectsReturned,
24+
Q,
2425
QuerySet,
2526
QuerySetManager,
2627
queryset_manager,
@@ -4674,6 +4675,34 @@ class Person(Document):
46744675
("Gabriel Falcao", 23, "New York"),
46754676
]
46764677

4678+
def test_scalar_embedded_null_parents(self):
4679+
"""Test a multi-scalar query on embedded fields raises an exception when the parent field is null."""
4680+
4681+
class EmbeddedModelA(EmbeddedDocument):
4682+
designator = StringField()
4683+
4684+
class Container(Document):
4685+
source = EmbeddedDocumentField(EmbeddedModelA)
4686+
target = EmbeddedDocumentField(EmbeddedModelA, null=True)
4687+
4688+
Container(
4689+
source=EmbeddedModelA(designator="value1"),
4690+
target=EmbeddedModelB(designator="value2"),
4691+
).save()
4692+
4693+
Container(
4694+
source=EmbeddedModelA(designator="value1"),
4695+
target=None,
4696+
).save()
4697+
4698+
queryset = Container.objects.filter(
4699+
Q(source__designator="value1") | Q(target__designator="value2")
4700+
).values_list("source__designator", "target__designator")
4701+
# This should not raise an AttributeError on NoneType for the second Container's
4702+
# target__designator
4703+
values = list(queryset)
4704+
assert values == ["value1", "value2"]
4705+
46774706
def test_scalar_decimal(self):
46784707
from decimal import Decimal
46794708

0 commit comments

Comments
 (0)