summaryrefslogtreecommitdiff
path: root/tests/postgres_tests
diff options
context:
space:
mode:
authorMatthew Wilkes <git@matthewwilkes.name>2017-06-18 16:53:40 +0100
committerTim Graham <timograham@gmail.com>2018-02-10 19:08:55 -0500
commit2162f0983de0dfe2178531638ce7ea56f54dd4e7 (patch)
treebb1e859159200fa7ebeeaa02ec3908e1cf5d2655 /tests/postgres_tests
parentbf26f66029bca94b007a2452679ac004598364a6 (diff)
Fixed #24747 -- Allowed transforms in QuerySet.order_by() and distinct(*fields).
Diffstat (limited to 'tests/postgres_tests')
-rw-r--r--tests/postgres_tests/test_array.py16
-rw-r--r--tests/postgres_tests/test_hstore.py12
-rw-r--r--tests/postgres_tests/test_json.py25
3 files changed, 53 insertions, 0 deletions
diff --git a/tests/postgres_tests/test_array.py b/tests/postgres_tests/test_array.py
index 4776bda934..03ffa4d637 100644
--- a/tests/postgres_tests/test_array.py
+++ b/tests/postgres_tests/test_array.py
@@ -309,6 +309,22 @@ class TestQuerying(PostgreSQLTestCase):
self.objs[2:3]
)
+ def test_order_by_slice(self):
+ more_objs = (
+ NullableIntegerArrayModel.objects.create(field=[1, 637]),
+ NullableIntegerArrayModel.objects.create(field=[2, 1]),
+ NullableIntegerArrayModel.objects.create(field=[3, -98123]),
+ NullableIntegerArrayModel.objects.create(field=[4, 2]),
+ )
+ self.assertSequenceEqual(
+ NullableIntegerArrayModel.objects.order_by('field__1'),
+ [
+ more_objs[2], more_objs[1], more_objs[3], self.objs[2],
+ self.objs[3], more_objs[0], self.objs[4], self.objs[1],
+ self.objs[0],
+ ]
+ )
+
@unittest.expectedFailure
def test_slice_nested(self):
instance = NestedIntegerArrayModel.objects.create(field=[[1, 2], [3, 4]])
diff --git a/tests/postgres_tests/test_hstore.py b/tests/postgres_tests/test_hstore.py
index 069e570f51..b58e5e5e20 100644
--- a/tests/postgres_tests/test_hstore.py
+++ b/tests/postgres_tests/test_hstore.py
@@ -148,6 +148,18 @@ class TestQuerying(HStoreTestCase):
self.objs[:2]
)
+ def test_order_by_field(self):
+ more_objs = (
+ HStoreModel.objects.create(field={'g': '637'}),
+ HStoreModel.objects.create(field={'g': '002'}),
+ HStoreModel.objects.create(field={'g': '042'}),
+ HStoreModel.objects.create(field={'g': '981'}),
+ )
+ self.assertSequenceEqual(
+ HStoreModel.objects.filter(field__has_key='g').order_by('field__g'),
+ [more_objs[1], more_objs[2], more_objs[0], more_objs[3]]
+ )
+
def test_keys_contains(self):
self.assertSequenceEqual(
HStoreModel.objects.filter(field__keys__contains=['a']),
diff --git a/tests/postgres_tests/test_json.py b/tests/postgres_tests/test_json.py
index a572e670ac..b22cbfc571 100644
--- a/tests/postgres_tests/test_json.py
+++ b/tests/postgres_tests/test_json.py
@@ -141,6 +141,31 @@ class TestQuerying(PostgreSQLTestCase):
[self.objs[0]]
)
+ def test_ordering_by_transform(self):
+ objs = [
+ JSONModel.objects.create(field={'ord': 93, 'name': 'bar'}),
+ JSONModel.objects.create(field={'ord': 22.1, 'name': 'foo'}),
+ JSONModel.objects.create(field={'ord': -1, 'name': 'baz'}),
+ JSONModel.objects.create(field={'ord': 21.931902, 'name': 'spam'}),
+ JSONModel.objects.create(field={'ord': -100291029, 'name': 'eggs'}),
+ ]
+ query = JSONModel.objects.filter(field__name__isnull=False).order_by('field__ord')
+ self.assertSequenceEqual(query, [objs[4], objs[2], objs[3], objs[1], objs[0]])
+
+ def test_deep_values(self):
+ query = JSONModel.objects.values_list('field__k__l')
+ self.assertSequenceEqual(
+ query,
+ [
+ (None,), (None,), (None,), (None,), (None,), (None,),
+ (None,), (None,), ('m',), (None,), (None,), (None,),
+ ]
+ )
+
+ def test_deep_distinct(self):
+ query = JSONModel.objects.distinct('field__k__l').values_list('field__k__l')
+ self.assertSequenceEqual(query, [('m',), (None,)])
+
def test_isnull_key(self):
# key__isnull works the same as has_key='key'.
self.assertSequenceEqual(