updated changelog for recent commits + improve tests

This commit is contained in:
Bastien Gérard 2019-04-07 23:05:55 +02:00
parent 4caa58b9ec
commit 9bb3dfd639
2 changed files with 39 additions and 41 deletions

View File

@ -4,6 +4,7 @@ Changelog
Development Development
=========== ===========
- POTENTIAL BREAKING CHANGE: Aggregate gives wrong results when used with a queryset having limit and skip #2029
- mongoengine now requires pymongo>=3.5 #2017 - mongoengine now requires pymongo>=3.5 #2017
- Generate Unique Indices for SortedListField and EmbeddedDocumentListFields #2020 - Generate Unique Indices for SortedListField and EmbeddedDocumentListFields #2020
- (Fill this out as you fix issues and develop your features). - (Fill this out as you fix issues and develop your features).

View File

@ -5312,13 +5312,9 @@ class QuerySetTest(unittest.TestCase):
Person.drop_collection() Person.drop_collection()
p1 = Person(name="Isabella Luanna", age=16) p1 = Person(name="Isabella Luanna", age=16)
p1.save()
p2 = Person(name="Wilson Junior", age=21) p2 = Person(name="Wilson Junior", age=21)
p2.save()
p3 = Person(name="Sandra Mara", age=37) p3 = Person(name="Sandra Mara", age=37)
p3.save() Person.objects.insert([p1, p2, p3])
data = Person.objects(age__lte=22).aggregate( data = Person.objects(age__lte=22).aggregate(
{'$project': {'name': {'$toUpper': '$name'}}} {'$project': {'name': {'$toUpper': '$name'}}}
@ -5358,13 +5354,9 @@ class QuerySetTest(unittest.TestCase):
Person.drop_collection() Person.drop_collection()
p1 = Person(name="Isabella Luanna", age=16) p1 = Person(name="Isabella Luanna", age=16)
p1.save()
p2 = Person(name="Wilson Junior", age=21) p2 = Person(name="Wilson Junior", age=21)
p2.save()
p3 = Person(name="Sandra Mara", age=37) p3 = Person(name="Sandra Mara", age=37)
p3.save() Person.objects.insert([p1, p2, p3])
data = Person.objects.skip(1).aggregate( data = Person.objects.skip(1).aggregate(
{'$project': {'name': {'$toUpper': '$name'}}} {'$project': {'name': {'$toUpper': '$name'}}}
@ -5384,13 +5376,9 @@ class QuerySetTest(unittest.TestCase):
Person.drop_collection() Person.drop_collection()
p1 = Person(name="Isabella Luanna", age=16) p1 = Person(name="Isabella Luanna", age=16)
p1.save()
p2 = Person(name="Wilson Junior", age=21) p2 = Person(name="Wilson Junior", age=21)
p2.save()
p3 = Person(name="Sandra Mara", age=37) p3 = Person(name="Sandra Mara", age=37)
p3.save() Person.objects.insert([p1, p2, p3])
data = Person.objects.limit(1).aggregate( data = Person.objects.limit(1).aggregate(
{'$project': {'name': {'$toUpper': '$name'}}} {'$project': {'name': {'$toUpper': '$name'}}}
@ -5409,13 +5397,9 @@ class QuerySetTest(unittest.TestCase):
Person.drop_collection() Person.drop_collection()
p1 = Person(name="Isabella Luanna", age=16) p1 = Person(name="Isabella Luanna", age=16)
p1.save()
p2 = Person(name="Wilson Junior", age=21) p2 = Person(name="Wilson Junior", age=21)
p2.save()
p3 = Person(name="Sandra Mara", age=37) p3 = Person(name="Sandra Mara", age=37)
p3.save() Person.objects.insert([p1, p2, p3])
data = Person.objects.order_by('name').aggregate( data = Person.objects.order_by('name').aggregate(
{'$project': {'name': {'$toUpper': '$name'}}} {'$project': {'name': {'$toUpper': '$name'}}}
@ -5436,22 +5420,27 @@ class QuerySetTest(unittest.TestCase):
Person.drop_collection() Person.drop_collection()
p1 = Person(name="Isabella Luanna", age=16) p1 = Person(name="Isabella Luanna", age=16)
p1.save()
p2 = Person(name="Wilson Junior", age=21) p2 = Person(name="Wilson Junior", age=21)
p2.save()
p3 = Person(name="Sandra Mara", age=37) p3 = Person(name="Sandra Mara", age=37)
p3.save() Person.objects.insert([p1, p2, p3])
data = Person.objects.skip(1).limit(1).aggregate( data = list(
Person.objects.skip(1).limit(1).aggregate(
{'$project': {'name': {'$toUpper': '$name'}}} {'$project': {'name': {'$toUpper': '$name'}}}
) )
)
self.assertEqual(list(data), [ self.assertEqual(list(data), [
{'_id': p2.pk, 'name': "WILSON JUNIOR"}, {'_id': p2.pk, 'name': "WILSON JUNIOR"},
]) ])
# Make sure limit/skip chaining order has no impact
data2 = Person.objects.limit(1).skip(1).aggregate(
{'$project': {'name': {'$toUpper': '$name'}}}
)
self.assertEqual(data, list(data2))
@requires_mongodb_gte_26 @requires_mongodb_gte_26
def test_queryset_aggregation_with_sort_with_limit(self): def test_queryset_aggregation_with_sort_with_limit(self):
class Person(Document): class Person(Document):
@ -5461,13 +5450,9 @@ class QuerySetTest(unittest.TestCase):
Person.drop_collection() Person.drop_collection()
p1 = Person(name="Isabella Luanna", age=16) p1 = Person(name="Isabella Luanna", age=16)
p1.save()
p2 = Person(name="Wilson Junior", age=21) p2 = Person(name="Wilson Junior", age=21)
p2.save()
p3 = Person(name="Sandra Mara", age=37) p3 = Person(name="Sandra Mara", age=37)
p3.save() Person.objects.insert([p1, p2, p3])
data = Person.objects.order_by('name').limit(2).aggregate( data = Person.objects.order_by('name').limit(2).aggregate(
{'$project': {'name': {'$toUpper': '$name'}}} {'$project': {'name': {'$toUpper': '$name'}}}
@ -5478,6 +5463,26 @@ class QuerySetTest(unittest.TestCase):
{'_id': p3.pk, 'name': "SANDRA MARA"} {'_id': p3.pk, 'name': "SANDRA MARA"}
]) ])
# Verify adding limit/skip steps works as expected
data = Person.objects.order_by('name').limit(2).aggregate(
{'$project': {'name': {'$toUpper': '$name'}}},
{'$limit': 1},
)
self.assertEqual(list(data), [
{'_id': p1.pk, 'name': "ISABELLA LUANNA"},
])
data = Person.objects.order_by('name').limit(2).aggregate(
{'$project': {'name': {'$toUpper': '$name'}}},
{'$skip': 1},
{'$limit': 1},
)
self.assertEqual(list(data), [
{'_id': p3.pk, 'name': "SANDRA MARA"},
])
@requires_mongodb_gte_26 @requires_mongodb_gte_26
def test_queryset_aggregation_with_sort_with_skip(self): def test_queryset_aggregation_with_sort_with_skip(self):
class Person(Document): class Person(Document):
@ -5487,13 +5492,9 @@ class QuerySetTest(unittest.TestCase):
Person.drop_collection() Person.drop_collection()
p1 = Person(name="Isabella Luanna", age=16) p1 = Person(name="Isabella Luanna", age=16)
p1.save()
p2 = Person(name="Wilson Junior", age=21) p2 = Person(name="Wilson Junior", age=21)
p2.save()
p3 = Person(name="Sandra Mara", age=37) p3 = Person(name="Sandra Mara", age=37)
p3.save() Person.objects.insert([p1, p2, p3])
data = Person.objects.order_by('name').skip(2).aggregate( data = Person.objects.order_by('name').skip(2).aggregate(
{'$project': {'name': {'$toUpper': '$name'}}} {'$project': {'name': {'$toUpper': '$name'}}}
@ -5512,13 +5513,9 @@ class QuerySetTest(unittest.TestCase):
Person.drop_collection() Person.drop_collection()
p1 = Person(name="Isabella Luanna", age=16) p1 = Person(name="Isabella Luanna", age=16)
p1.save()
p2 = Person(name="Wilson Junior", age=21) p2 = Person(name="Wilson Junior", age=21)
p2.save()
p3 = Person(name="Sandra Mara", age=37) p3 = Person(name="Sandra Mara", age=37)
p3.save() Person.objects.insert([p1, p2, p3])
data = Person.objects.order_by('name').skip(1).limit(1).aggregate( data = Person.objects.order_by('name').skip(1).limit(1).aggregate(
{'$project': {'name': {'$toUpper': '$name'}}} {'$project': {'name': {'$toUpper': '$name'}}}