Skip to content

Commit

Permalink
Merge pull request #2445 from bagerard/fix_count_mongomock
Browse files Browse the repository at this point in the history
Use Queryset._query instead of Cursor.__spec for count()
  • Loading branch information
bagerard committed Dec 13, 2020
2 parents aa3ff39 + c28bb51 commit 2e284b9
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 45 deletions.
1 change: 1 addition & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Development
===========
- (Fill this out as you fix issues and develop your features).
- Fix LazyReferenceField dereferencing in embedded documents #2426
- Fix regarding the recent use of Cursor.__spec in .count() that was interfering with mongomock #2425

Changes in 0.21.0
=================
Expand Down
2 changes: 1 addition & 1 deletion mongoengine/queryset/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ def count(self, with_limit_and_skip=False):

count = count_documents(
collection=self._cursor.collection,
filter=self._cursor._Cursor__spec,
filter=self._query,
**kwargs,
)

Expand Down
50 changes: 16 additions & 34 deletions tests/document/test_instance.py
Original file line number Diff line number Diff line change
Expand Up @@ -2900,50 +2900,32 @@ def __str__(self):
# Checks
assert ",".join([str(b) for b in Book.objects.all()]) == "1,2,3,4,5,6,7,8,9"
# bob related books
assert (
",".join(
[
str(b)
for b in Book.objects.filter(
Q(extra__a=bob) | Q(author=bob) | Q(extra__b=bob)
)
]
)
== "1,2,3,4"
bob_books_qs = Book.objects.filter(
Q(extra__a=bob) | Q(author=bob) | Q(extra__b=bob)
)
assert [str(b) for b in bob_books_qs] == ["1", "2", "3", "4"]
assert bob_books_qs.count() == 4

# Susan & Karl related books
assert (
",".join(
[
str(b)
for b in Book.objects.filter(
Q(extra__a__all=[karl, susan])
| Q(author__all=[karl, susan])
| Q(extra__b__all=[karl.to_dbref(), susan.to_dbref()])
)
]
)
== "1"
susan_karl_books_qs = Book.objects.filter(
Q(extra__a__all=[karl, susan])
| Q(author__all=[karl, susan])
| Q(extra__b__all=[karl.to_dbref(), susan.to_dbref()])
)
assert [str(b) for b in susan_karl_books_qs] == ["1"]
assert susan_karl_books_qs.count() == 1

# $Where
assert (
",".join(
[
str(b)
for b in Book.objects.filter(
__raw__={
"$where": """
custom_qs = Book.objects.filter(
__raw__={
"$where": """
function(){
return this.name == '1' ||
this.name == '2';}"""
}
)
]
)
== "1,2"
}
)
assert [str(b) for b in custom_qs] == ["1", "2"]
assert custom_qs.count() == 2

def test_switch_db_instance(self):
register_connection("testdb-1", "mongoenginetest2")
Expand Down
19 changes: 9 additions & 10 deletions tests/queryset/test_transform.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,18 +104,17 @@ class BlogPost(Document):
post = BlogPost(**data)
post.save()

assert "postTitle" in BlogPost.objects(title=data["title"])._query
assert not ("title" in BlogPost.objects(title=data["title"])._query)
assert BlogPost.objects(title=data["title"]).count() == 1
qs = BlogPost.objects(title=data["title"])
assert qs._query == {"postTitle": data["title"]}
assert qs.count() == 1

assert "_id" in BlogPost.objects(pk=post.id)._query
assert BlogPost.objects(pk=post.id).count() == 1
qs = BlogPost.objects(pk=post.id)
assert qs._query == {"_id": post.id}
assert qs.count() == 1

assert (
"postComments.commentContent"
in BlogPost.objects(comments__content="test")._query
)
assert BlogPost.objects(comments__content="test").count() == 1
qs = BlogPost.objects(comments__content="test")
assert qs._query == {"postComments.commentContent": "test"}
assert qs.count() == 1

BlogPost.drop_collection()

Expand Down

0 comments on commit 2e284b9

Please sign in to comment.