|
28 | 28 | from mongoengine.queryset.base import BaseQuerySet
|
29 | 29 | from tests.utils import (
|
30 | 30 | db_ops_tracker,
|
| 31 | + get_as_pymongo, |
31 | 32 | requires_mongodb_gte_42,
|
32 | 33 | requires_mongodb_gte_44,
|
33 | 34 | requires_mongodb_lt_42,
|
@@ -4456,7 +4457,7 @@ class Comment(Document):
|
4456 | 4457 | ]
|
4457 | 4458 | assert ([("_cls", 1), ("message", 1)], False, False) in info
|
4458 | 4459 |
|
4459 |
| - def test_where(self): |
| 4460 | + def test_where_query(self): |
4460 | 4461 | """Ensure that where clauses work."""
|
4461 | 4462 |
|
4462 | 4463 | class IntPair(Document):
|
@@ -4499,6 +4500,60 @@ class IntPair(Document):
|
4499 | 4500 | with pytest.raises(TypeError):
|
4500 | 4501 | list(IntPair.objects.where(fielda__gte=3))
|
4501 | 4502 |
|
| 4503 | + def test_where_query_field_name_subs(self): |
| 4504 | + class DomainObj(Document): |
| 4505 | + field_1 = StringField(db_field="field_2") |
| 4506 | + |
| 4507 | + DomainObj.drop_collection() |
| 4508 | + |
| 4509 | + DomainObj(field_1="test").save() |
| 4510 | + |
| 4511 | + obj = DomainObj.objects.where("this[~field_1] == 'NOTMATCHING'") |
| 4512 | + assert not list(obj) |
| 4513 | + |
| 4514 | + obj = DomainObj.objects.where("this[~field_1] == 'test'") |
| 4515 | + assert list(obj) |
| 4516 | + |
| 4517 | + def test_where_modify(self): |
| 4518 | + class DomainObj(Document): |
| 4519 | + field = StringField() |
| 4520 | + |
| 4521 | + DomainObj.drop_collection() |
| 4522 | + |
| 4523 | + DomainObj(field="test").save() |
| 4524 | + |
| 4525 | + obj = DomainObj.objects.where("this[~field] == 'NOTMATCHING'") |
| 4526 | + assert not list(obj) |
| 4527 | + |
| 4528 | + obj = DomainObj.objects.where("this[~field] == 'test'") |
| 4529 | + assert list(obj) |
| 4530 | + |
| 4531 | + qs = DomainObj.objects.where("this[~field] == 'NOTMATCHING'").modify( |
| 4532 | + field="new" |
| 4533 | + ) |
| 4534 | + assert not qs |
| 4535 | + |
| 4536 | + qs = DomainObj.objects.where("this[~field] == 'test'").modify(field="new") |
| 4537 | + assert qs |
| 4538 | + |
| 4539 | + def test_where_modify_field_name_subs(self): |
| 4540 | + class DomainObj(Document): |
| 4541 | + field_1 = StringField(db_field="field_2") |
| 4542 | + |
| 4543 | + DomainObj.drop_collection() |
| 4544 | + |
| 4545 | + DomainObj(field_1="test").save() |
| 4546 | + |
| 4547 | + obj = DomainObj.objects.where("this[~field_1] == 'NOTMATCHING'").modify( |
| 4548 | + field_1="new" |
| 4549 | + ) |
| 4550 | + assert not obj |
| 4551 | + |
| 4552 | + obj = DomainObj.objects.where("this[~field_1] == 'test'").modify(field_1="new") |
| 4553 | + assert obj |
| 4554 | + |
| 4555 | + assert get_as_pymongo(obj) == {"_id": obj.id, "field_2": "new"} |
| 4556 | + |
4502 | 4557 | def test_scalar(self):
|
4503 | 4558 | class Organization(Document):
|
4504 | 4559 | name = StringField()
|
|
0 commit comments