summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorFlorian Hahn <flo@fhahn.com>2013-02-06 00:11:28 +0100
committerAnssi Kääriäinen <akaariai@gmail.com>2013-06-18 23:56:51 +0300
commit2f35c6f10fcbae541691207fb0c0560a13b754fc (patch)
tree5bae77807c3e715fcb08067f69b2aced7835b833 /tests
parent9da9b3eb0454fa3dea228b16c6e35b01db5eee69 (diff)
Fixed #14930 -- values_list() failure on qs ordered by extra column
Thanks lsaffre for the report and simon29, vicould, and Florian Hahn for the patch. Some changes done by committer.
Diffstat (limited to 'tests')
-rw-r--r--tests/queries/tests.py57
1 files changed, 53 insertions, 4 deletions
diff --git a/tests/queries/tests.py b/tests/queries/tests.py
index 612c268925..352e87a634 100644
--- a/tests/queries/tests.py
+++ b/tests/queries/tests.py
@@ -1976,13 +1976,62 @@ class EmptyQuerySetTests(TestCase):
class ValuesQuerysetTests(BaseQuerysetTest):
- def test_flat_values_lits(self):
+ def setUp(self):
Number.objects.create(num=72)
+ self.identity = lambda x: x
+
+ def test_flat_values_list(self):
qs = Number.objects.values_list("num")
qs = qs.values_list("num", flat=True)
- self.assertValueQuerysetEqual(
- qs, [72]
- )
+ self.assertValueQuerysetEqual(qs, [72])
+
+ def test_extra_values(self):
+ # testing for ticket 14930 issues
+ qs = Number.objects.extra(select=SortedDict([('value_plus_x', 'num+%s'),
+ ('value_minus_x', 'num-%s')]),
+ select_params=(1, 2))
+ qs = qs.order_by('value_minus_x')
+ qs = qs.values('num')
+ self.assertQuerysetEqual(qs, [{'num': 72}], self.identity)
+
+ def test_extra_values_order_twice(self):
+ # testing for ticket 14930 issues
+ qs = Number.objects.extra(select={'value_plus_one': 'num+1', 'value_minus_one': 'num-1'})
+ qs = qs.order_by('value_minus_one').order_by('value_plus_one')
+ qs = qs.values('num')
+ self.assertQuerysetEqual(qs, [{'num': 72}], self.identity)
+
+ def test_extra_values_order_multiple(self):
+ # Postgres doesn't allow constants in order by, so check for that.
+ qs = Number.objects.extra(select={
+ 'value_plus_one': 'num+1',
+ 'value_minus_one': 'num-1',
+ 'constant_value': '1'
+ })
+ qs = qs.order_by('value_plus_one', 'value_minus_one', 'constant_value')
+ qs = qs.values('num')
+ self.assertQuerysetEqual(qs, [{'num': 72}], self.identity)
+
+ def test_extra_values_order_in_extra(self):
+ # testing for ticket 14930 issues
+ qs = Number.objects.extra(
+ select={'value_plus_one': 'num+1', 'value_minus_one': 'num-1'},
+ order_by=['value_minus_one'])
+ qs = qs.values('num')
+
+ def test_extra_values_list(self):
+ # testing for ticket 14930 issues
+ qs = Number.objects.extra(select={'value_plus_one': 'num+1'})
+ qs = qs.order_by('value_plus_one')
+ qs = qs.values_list('num')
+ self.assertQuerysetEqual(qs, [(72,)], self.identity)
+
+ def test_flat_extra_values_list(self):
+ # testing for ticket 14930 issues
+ qs = Number.objects.extra(select={'value_plus_one': 'num+1'})
+ qs = qs.order_by('value_plus_one')
+ qs = qs.values_list('num', flat=True)
+ self.assertQuerysetEqual(qs, [72], self.identity)
class WeirdQuerysetSlicingTests(BaseQuerysetTest):