diff options
author | Josh Smeaton <josh.smeaton@gmail.com> | 2015-01-10 02:16:16 +1100 |
---|---|---|
committer | Josh Smeaton <josh.smeaton@gmail.com> | 2015-01-13 09:39:55 +1100 |
commit | 21b858cb6735cdfdc695ff7b076e4cbc1981bc88 (patch) | |
tree | e7cd589b11e37e99788a85f3ac170b2ecfabed3b /tests/ordering | |
parent | f48e2258a96a08dcec843921206bcf7656e3ae45 (diff) | |
download | django-21b858cb6735cdfdc695ff7b076e4cbc1981bc88.tar.gz |
Fixed #24060 -- Added OrderBy Expressions
Diffstat (limited to 'tests/ordering')
-rw-r--r-- | tests/ordering/tests.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/ordering/tests.py b/tests/ordering/tests.py index 5d323e006b..abb30f43f1 100644 --- a/tests/ordering/tests.py +++ b/tests/ordering/tests.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from datetime import datetime from operator import attrgetter +from django.db.models import F from django.test import TestCase from .models import Article, Author @@ -203,3 +204,64 @@ class OrderingTests(TestCase): ], attrgetter("headline") ) + + def test_order_by_f_expression(self): + self.assertQuerysetEqual( + Article.objects.order_by(F('headline')), [ + "Article 1", + "Article 2", + "Article 3", + "Article 4", + ], + attrgetter("headline") + ) + self.assertQuerysetEqual( + Article.objects.order_by(F('headline').asc()), [ + "Article 1", + "Article 2", + "Article 3", + "Article 4", + ], + attrgetter("headline") + ) + self.assertQuerysetEqual( + Article.objects.order_by(F('headline').desc()), [ + "Article 4", + "Article 3", + "Article 2", + "Article 1", + ], + attrgetter("headline") + ) + + def test_order_by_f_expression_duplicates(self): + """ + A column may only be included once (the first occurrence) so we check + to ensure there are no duplicates by inspecting the SQL. + """ + qs = Article.objects.order_by(F('headline').asc(), F('headline').desc()) + sql = str(qs.query).upper() + fragment = sql[sql.find('ORDER BY'):] + self.assertEqual(fragment.count('HEADLINE'), 1) + self.assertQuerysetEqual( + qs, [ + "Article 1", + "Article 2", + "Article 3", + "Article 4", + ], + attrgetter("headline") + ) + qs = Article.objects.order_by(F('headline').desc(), F('headline').asc()) + sql = str(qs.query).upper() + fragment = sql[sql.find('ORDER BY'):] + self.assertEqual(fragment.count('HEADLINE'), 1) + self.assertQuerysetEqual( + qs, [ + "Article 4", + "Article 3", + "Article 2", + "Article 1", + ], + attrgetter("headline") + ) |