diff options
| author | Louise Grandjonc <louve.grandjonc@gmail.com> | 2019-10-01 16:25:40 -0700 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-10-11 11:52:32 +0200 |
| commit | 323467e286787684de18d2731776c71667a296be (patch) | |
| tree | 2b4914f786873686e1554bea95343a3757bf7b5b /tests/postgres_tests | |
| parent | 4f7ba25e67681efbb67cc4810e919aa7369cbe34 (diff) | |
[2.2.x] Fixed #30826 -- Fixed crash of many JSONField lookups when one hand side is key transform.
Regression in 6c3dfba89215fc56fc27ef61829a6fff88be4abb.
Backport of 7d1bf29977bb368d7c28e7c6eb146db3b3009ae7 from master
Diffstat (limited to 'tests/postgres_tests')
| -rw-r--r-- | tests/postgres_tests/test_json.py | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/tests/postgres_tests/test_json.py b/tests/postgres_tests/test_json.py index a74a5f8dde..8a4584eda6 100644 --- a/tests/postgres_tests/test_json.py +++ b/tests/postgres_tests/test_json.py @@ -126,7 +126,12 @@ class TestQuerying(PostgreSQLTestCase): 'k': True, 'l': False, }), - JSONModel(field={'foo': 'bar'}), + JSONModel(field={ + 'foo': 'bar', + 'baz': {'a': 'b', 'c': 'd'}, + 'bar': ['foo', 'bar'], + 'bax': {'foo': 'bar'}, + }), ]) def test_exact(self): @@ -361,6 +366,26 @@ class TestQuerying(PostgreSQLTestCase): queries[0]['sql'], ) + def test_lookups_with_key_transform(self): + tests = ( + ('field__d__contains', 'e'), + ('field__baz__contained_by', {'a': 'b', 'c': 'd', 'e': 'f'}), + ('field__baz__has_key', 'c'), + ('field__baz__has_keys', ['a', 'c']), + ('field__baz__has_any_keys', ['a', 'x']), + ('field__contains', KeyTransform('bax', 'field')), + ( + 'field__contained_by', + KeyTransform('x', RawSQL('%s::jsonb', ['{"x": {"a": "b", "c": 1, "d": "e"}}'])), + ), + ('field__has_key', KeyTextTransform('foo', 'field')), + ) + for lookup, value in tests: + with self.subTest(lookup=lookup): + self.assertTrue(JSONModel.objects.filter( + **{lookup: value}, + ).exists()) + @isolate_apps('postgres_tests') class TestChecks(PostgreSQLSimpleTestCase): |
