diff options
Diffstat (limited to 'tests/postgres_tests')
| -rw-r--r-- | tests/postgres_tests/test_json.py | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/tests/postgres_tests/test_json.py b/tests/postgres_tests/test_json.py index eab7f8a272..ee0bb6d5ea 100644 --- a/tests/postgres_tests/test_json.py +++ b/tests/postgres_tests/test_json.py @@ -1,10 +1,11 @@ import datetime +import operator import uuid from decimal import Decimal from django.core import checks, exceptions, serializers from django.core.serializers.json import DjangoJSONEncoder -from django.db.models import Q +from django.db.models import Count, Q from django.forms import CharField, Form, widgets from django.test.utils import isolate_apps from django.utils.html import escape @@ -15,6 +16,7 @@ from .models import JSONModel, PostgreSQLModel try: from django.contrib.postgres import forms from django.contrib.postgres.fields import JSONField + from django.contrib.postgres.fields.jsonb import KeyTextTransform, KeyTransform except ImportError: pass @@ -162,6 +164,27 @@ class TestQuerying(PostgreSQLTestCase): 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_ordering_grouping_by_key_transform(self): + base_qs = JSONModel.objects.filter(field__d__0__isnull=False) + for qs in ( + base_qs.order_by('field__d__0'), + base_qs.annotate(key=KeyTransform('0', KeyTransform('d', 'field'))).order_by('key'), + ): + self.assertSequenceEqual(qs, [self.objs[8]]) + qs = JSONModel.objects.filter(field__isnull=False) + self.assertQuerysetEqual( + qs.values('field__d__0').annotate(count=Count('field__d__0')).order_by('count'), + [1, 10], + operator.itemgetter('count'), + ) + self.assertQuerysetEqual( + qs.filter(field__isnull=False).annotate( + key=KeyTextTransform('f', KeyTransform('1', KeyTransform('d', 'field'))), + ).values('key').annotate(count=Count('key')).order_by('count'), + [(None, 0), ('g', 1)], + operator.itemgetter('key', 'count'), + ) + def test_deep_values(self): query = JSONModel.objects.values_list('field__k__l') self.assertSequenceEqual( |
