more ordering unit tests
This commit is contained in:
		| @@ -952,6 +952,11 @@ class QuerySetTest(unittest.TestCase): | |||||||
|                              {'attachments.views.extracted': 'no'}]} |                              {'attachments.views.extracted': 'no'}]} | ||||||
|         self.assertEqual(expected, raw_query) |         self.assertEqual(expected, raw_query) | ||||||
|  |  | ||||||
|  |     def assertSequence(self, qs, expected): | ||||||
|  |         self.assertEqual(len(qs), len(expected)) | ||||||
|  |         for i in range(len(qs)): | ||||||
|  |             self.assertEqual(qs[i], expected[i]) | ||||||
|  |  | ||||||
|     def test_ordering(self): |     def test_ordering(self): | ||||||
|         """Ensure default ordering is applied and can be overridden. |         """Ensure default ordering is applied and can be overridden. | ||||||
|         """ |         """ | ||||||
| @@ -965,10 +970,10 @@ class QuerySetTest(unittest.TestCase): | |||||||
|  |  | ||||||
|         BlogPost.drop_collection() |         BlogPost.drop_collection() | ||||||
|  |  | ||||||
|         blog_post_1 = BlogPost(title="Blog Post #1", |  | ||||||
|                                published_date=datetime(2010, 1, 5, 0, 0 ,0)) |  | ||||||
|         blog_post_2 = BlogPost(title="Blog Post #2", |         blog_post_2 = BlogPost(title="Blog Post #2", | ||||||
|                                published_date=datetime(2010, 1, 6, 0, 0 ,0)) |                                published_date=datetime(2010, 1, 6, 0, 0 ,0)) | ||||||
|  |         blog_post_1 = BlogPost(title="Blog Post #1", | ||||||
|  |                                published_date=datetime(2010, 1, 5, 0, 0 ,0)) | ||||||
|         blog_post_3 = BlogPost(title="Blog Post #3", |         blog_post_3 = BlogPost(title="Blog Post #3", | ||||||
|                                published_date=datetime(2010, 1, 7, 0, 0 ,0)) |                                published_date=datetime(2010, 1, 7, 0, 0 ,0)) | ||||||
|  |  | ||||||
| @@ -978,14 +983,13 @@ class QuerySetTest(unittest.TestCase): | |||||||
|  |  | ||||||
|         # get the "first" BlogPost using default ordering |         # get the "first" BlogPost using default ordering | ||||||
|         # from BlogPost.meta.ordering |         # from BlogPost.meta.ordering | ||||||
|         latest_post = BlogPost.objects.first() |         expected = [blog_post_3, blog_post_2, blog_post_1] | ||||||
|         self.assertEqual(latest_post.title, "Blog Post #3") |         self.assertSequence(BlogPost.objects.all(), expected) | ||||||
|  |  | ||||||
|         # override default ordering, order BlogPosts by "published_date" |         # override default ordering, order BlogPosts by "published_date" | ||||||
|         first_post = BlogPost.objects.order_by("+published_date").first() |         qs = BlogPost.objects.order_by("+published_date") | ||||||
|         self.assertEqual(first_post.title, "Blog Post #1") |         expected = [blog_post_1, blog_post_2, blog_post_3] | ||||||
|  |         self.assertSequence(qs, expected) | ||||||
|         BlogPost.drop_collection() |  | ||||||
|  |  | ||||||
|     def test_only(self): |     def test_only(self): | ||||||
|         """Ensure that QuerySet.only only returns the requested fields. |         """Ensure that QuerySet.only only returns the requested fields. | ||||||
| @@ -1921,8 +1925,8 @@ class QuerySetTest(unittest.TestCase): | |||||||
|     def test_order_by(self): |     def test_order_by(self): | ||||||
|         """Ensure that QuerySets may be ordered. |         """Ensure that QuerySets may be ordered. | ||||||
|         """ |         """ | ||||||
|         self.Person(name="User A", age=20).save() |  | ||||||
|         self.Person(name="User B", age=40).save() |         self.Person(name="User B", age=40).save() | ||||||
|  |         self.Person(name="User A", age=20).save() | ||||||
|         self.Person(name="User C", age=30).save() |         self.Person(name="User C", age=30).save() | ||||||
|  |  | ||||||
|         names = [p.name for p in self.Person.objects.order_by('-age')] |         names = [p.name for p in self.Person.objects.order_by('-age')] | ||||||
| @@ -1937,11 +1941,67 @@ class QuerySetTest(unittest.TestCase): | |||||||
|         ages = [p.age for p in self.Person.objects.order_by('-name')] |         ages = [p.age for p in self.Person.objects.order_by('-name')] | ||||||
|         self.assertEqual(ages, [30, 40, 20]) |         self.assertEqual(ages, [30, 40, 20]) | ||||||
|  |  | ||||||
|  |     def test_order_by_optional(self): | ||||||
|  |         class BlogPost(Document): | ||||||
|  |             title = StringField() | ||||||
|  |             published_date = DateTimeField(required=False) | ||||||
|  |  | ||||||
|  |         BlogPost.drop_collection() | ||||||
|  |  | ||||||
|  |         blog_post_3 = BlogPost(title="Blog Post #3", | ||||||
|  |                                published_date=datetime(2010, 1, 6, 0, 0 ,0)) | ||||||
|  |         blog_post_2 = BlogPost(title="Blog Post #2", | ||||||
|  |                                published_date=datetime(2010, 1, 5, 0, 0 ,0)) | ||||||
|  |         blog_post_4 = BlogPost(title="Blog Post #4", | ||||||
|  |                                published_date=datetime(2010, 1, 7, 0, 0 ,0)) | ||||||
|  |         blog_post_1 = BlogPost(title="Blog Post #1", published_date=None) | ||||||
|  |  | ||||||
|  |         blog_post_3.save() | ||||||
|  |         blog_post_1.save() | ||||||
|  |         blog_post_4.save() | ||||||
|  |         blog_post_2.save() | ||||||
|  |  | ||||||
|  |         expected = [blog_post_1, blog_post_2, blog_post_3, blog_post_4] | ||||||
|  |         self.assertSequence(BlogPost.objects.order_by('published_date'), | ||||||
|  |                             expected) | ||||||
|  |         self.assertSequence(BlogPost.objects.order_by('+published_date'), | ||||||
|  |                             expected) | ||||||
|  |  | ||||||
|  |         expected.reverse() | ||||||
|  |         self.assertSequence(BlogPost.objects.order_by('-published_date'), | ||||||
|  |                             expected) | ||||||
|  |  | ||||||
|  |     def test_order_by_list(self): | ||||||
|  |         class BlogPost(Document): | ||||||
|  |             title = StringField() | ||||||
|  |             published_date = DateTimeField(required=False) | ||||||
|  |  | ||||||
|  |         BlogPost.drop_collection() | ||||||
|  |  | ||||||
|  |         blog_post_1 = BlogPost(title="A", | ||||||
|  |                                published_date=datetime(2010, 1, 6, 0, 0 ,0)) | ||||||
|  |         blog_post_2 = BlogPost(title="B", | ||||||
|  |                                published_date=datetime(2010, 1, 6, 0, 0 ,0)) | ||||||
|  |         blog_post_3 = BlogPost(title="C", | ||||||
|  |                                published_date=datetime(2010, 1, 7, 0, 0 ,0)) | ||||||
|  |  | ||||||
|  |         blog_post_2.save() | ||||||
|  |         blog_post_3.save() | ||||||
|  |         blog_post_1.save() | ||||||
|  |  | ||||||
|  |         qs = BlogPost.objects.order_by('published_date', 'title') | ||||||
|  |         expected = [blog_post_1, blog_post_2, blog_post_3] | ||||||
|  |         self.assertSequence(qs, expected) | ||||||
|  |  | ||||||
|  |         qs = BlogPost.objects.order_by('-published_date', '-title') | ||||||
|  |         expected.reverse() | ||||||
|  |         self.assertSequence(qs, expected) | ||||||
|  |  | ||||||
|     def test_order_by_chaining(self): |     def test_order_by_chaining(self): | ||||||
|         """Ensure that an order_by query chains properly and allows .only() |         """Ensure that an order_by query chains properly and allows .only() | ||||||
|         """ |         """ | ||||||
|         self.Person(name="User A", age=20).save() |  | ||||||
|         self.Person(name="User B", age=40).save() |         self.Person(name="User B", age=40).save() | ||||||
|  |         self.Person(name="User A", age=20).save() | ||||||
|         self.Person(name="User C", age=30).save() |         self.Person(name="User C", age=30).save() | ||||||
|  |  | ||||||
|         only_age = self.Person.objects.order_by('-age').only('age') |         only_age = self.Person.objects.order_by('-age').only('age') | ||||||
| @@ -1953,6 +2013,17 @@ class QuerySetTest(unittest.TestCase): | |||||||
|         self.assertEqual(names, [None, None, None]) |         self.assertEqual(names, [None, None, None]) | ||||||
|         self.assertEqual(ages, [40, 30, 20]) |         self.assertEqual(ages, [40, 30, 20]) | ||||||
|  |  | ||||||
|  |         qs = self.Person.objects.all().limit(10) | ||||||
|  |         qs = qs.order_by('-age') | ||||||
|  |         ages = [p.age for p in qs] | ||||||
|  |         self.assertEqual(ages, [40, 30, 20]) | ||||||
|  |  | ||||||
|  |         qs = self.Person.objects.all().skip(0) | ||||||
|  |         qs = qs.order_by('-age') | ||||||
|  |         ages = [p.age for p in qs] | ||||||
|  |         self.assertEqual(ages, [40, 30, 20]) | ||||||
|  |  | ||||||
|  |  | ||||||
|     def test_confirm_order_by_reference_wont_work(self): |     def test_confirm_order_by_reference_wont_work(self): | ||||||
|         """Ordering by reference is not possible.  Use map / reduce.. or |         """Ordering by reference is not possible.  Use map / reduce.. or | ||||||
|         denormalise""" |         denormalise""" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user