diff options
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") + ) |
