diff options
| author | abhiabhi94 <13880786+abhiabhi94@users.noreply.github.com> | 2021-07-15 19:09:40 +0530 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-07-26 11:23:51 +0200 |
| commit | 5a634a7b6f248e5dead65f420ec5d30acd9724bf (patch) | |
| tree | 1a1a748600521b1b0813c8a090d840127b2681d8 /tests/postgres_tests/test_aggregates.py | |
| parent | 325d7710ce9f6155bb55610ad6b4580d31263557 (diff) | |
Fixed #32906 -- Added docs and tests for using key and index lookups on JSONBAgg results.
Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
Diffstat (limited to 'tests/postgres_tests/test_aggregates.py')
| -rw-r--r-- | tests/postgres_tests/test_aggregates.py | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/tests/postgres_tests/test_aggregates.py b/tests/postgres_tests/test_aggregates.py index 7ae7b16c9f..a963aae3c4 100644 --- a/tests/postgres_tests/test_aggregates.py +++ b/tests/postgres_tests/test_aggregates.py @@ -4,10 +4,11 @@ from django.db.models import ( from django.db.models.fields.json import KeyTextTransform, KeyTransform from django.db.models.functions import Cast, Concat, Substr from django.test.utils import Approximate, ignore_warnings +from django.utils import timezone from django.utils.deprecation import RemovedInDjango50Warning from . import PostgreSQLTestCase -from .models import AggregateTestModel, StatTestModel +from .models import AggregateTestModel, HotelReservation, Room, StatTestModel try: from django.contrib.postgres.aggregates import ( @@ -392,6 +393,48 @@ class TestGeneralAggregate(PostgreSQLTestCase): ) self.assertEqual(values, {'jsonbagg': ['en', 'pl']}) + def test_jsonb_agg_key_index_transforms(self): + room101 = Room.objects.create(number=101) + room102 = Room.objects.create(number=102) + datetimes = [ + timezone.datetime(2018, 6, 20), + timezone.datetime(2018, 6, 24), + timezone.datetime(2018, 6, 28), + ] + HotelReservation.objects.create( + datespan=(datetimes[0].date(), datetimes[1].date()), + start=datetimes[0], + end=datetimes[1], + room=room102, + requirements={'double_bed': True, 'parking': True}, + ) + HotelReservation.objects.create( + datespan=(datetimes[1].date(), datetimes[2].date()), + start=datetimes[1], + end=datetimes[2], + room=room102, + requirements={'double_bed': False, 'sea_view': True, 'parking': False}, + ) + HotelReservation.objects.create( + datespan=(datetimes[0].date(), datetimes[2].date()), + start=datetimes[0], + end=datetimes[2], + room=room101, + requirements={'sea_view': False}, + ) + values = Room.objects.annotate( + requirements=JSONBAgg( + 'hotelreservation__requirements', + ordering='-hotelreservation__start', + ) + ).filter(requirements__0__sea_view=True).values('number', 'requirements') + self.assertSequenceEqual(values, [ + {'number': 102, 'requirements': [ + {'double_bed': False, 'sea_view': True, 'parking': False}, + {'double_bed': True, 'parking': True}, + ]}, + ]) + def test_string_agg_array_agg_ordering_in_subquery(self): stats = [] for i, agg in enumerate(AggregateTestModel.objects.order_by('char_field')): |
