updated changelog for recent commits + improve tests
This commit is contained in:
		| @@ -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). | ||||||
|   | |||||||
| @@ -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'}}} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user