summaryrefslogtreecommitdiff
path: root/tests/ordering
diff options
context:
space:
mode:
authorJosh Smeaton <josh.smeaton@gmail.com>2015-01-10 02:16:16 +1100
committerJosh Smeaton <josh.smeaton@gmail.com>2015-01-13 09:39:55 +1100
commit21b858cb6735cdfdc695ff7b076e4cbc1981bc88 (patch)
treee7cd589b11e37e99788a85f3ac170b2ecfabed3b /tests/ordering
parentf48e2258a96a08dcec843921206bcf7656e3ae45 (diff)
downloaddjango-21b858cb6735cdfdc695ff7b076e4cbc1981bc88.tar.gz
Fixed #24060 -- Added OrderBy Expressions
Diffstat (limited to 'tests/ordering')
-rw-r--r--tests/ordering/tests.py62
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")
+ )