diff options
| author | Florian Hahn <flo@fhahn.com> | 2013-02-06 00:11:28 +0100 |
|---|---|---|
| committer | Anssi Kääriäinen <akaariai@gmail.com> | 2013-06-18 23:56:51 +0300 |
| commit | 2f35c6f10fcbae541691207fb0c0560a13b754fc (patch) | |
| tree | 5bae77807c3e715fcb08067f69b2aced7835b833 /tests | |
| parent | 9da9b3eb0454fa3dea228b16c6e35b01db5eee69 (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.py | 57 |
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): |
