diff options
| author | Simon Charette <charette.s@gmail.com> | 2022-11-02 22:03:05 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-12-01 19:14:00 +0100 |
| commit | 0ff46591ac3010841c73fd26e0fef93995fedd99 (patch) | |
| tree | 7373b7f028df958db09d353e603124bc52b37bed /tests/model_fields | |
| parent | d3e746ace5eeea07216da97d9c3801f2fdc43223 (diff) | |
Refs #33308 -- Deprecated support for passing encoded JSON string literals to JSONField & co.
JSON should be provided as literal Python objects an not in their
encoded string literal forms.
Diffstat (limited to 'tests/model_fields')
| -rw-r--r-- | tests/model_fields/test_jsonfield.py | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/tests/model_fields/test_jsonfield.py b/tests/model_fields/test_jsonfield.py index 277e8aaa3c..05816817ef 100644 --- a/tests/model_fields/test_jsonfield.py +++ b/tests/model_fields/test_jsonfield.py @@ -19,6 +19,7 @@ from django.db.models import ( ExpressionWrapper, F, IntegerField, + JSONField, OuterRef, Q, Subquery, @@ -36,6 +37,7 @@ from django.db.models.fields.json import ( from django.db.models.functions import Cast from django.test import SimpleTestCase, TestCase, skipIfDBFeature, skipUnlessDBFeature from django.test.utils import CaptureQueriesContext +from django.utils.deprecation import RemovedInDjango51Warning from .models import CustomJSONDecoder, JSONModel, NullableJSONModel, RelatedJSONModel @@ -191,15 +193,40 @@ class TestSaveLoad(TestCase): obj.refresh_from_db() self.assertIsNone(obj.value) + def test_ambiguous_str_value_deprecation(self): + msg = ( + "Providing an encoded JSON string via Value() is deprecated. Use Value([], " + "output_field=JSONField()) instead." + ) + with self.assertWarnsMessage(RemovedInDjango51Warning, msg): + obj = NullableJSONModel.objects.create(value=Value("[]")) + obj.refresh_from_db() + self.assertEqual(obj.value, []) + + @skipUnlessDBFeature("supports_primitives_in_json_field") + def test_value_str_primitives_deprecation(self): + msg = ( + "Providing an encoded JSON string via Value() is deprecated. Use " + "Value(None, output_field=JSONField()) instead." + ) + with self.assertWarnsMessage(RemovedInDjango51Warning, msg): + obj = NullableJSONModel.objects.create(value=Value("null")) + obj.refresh_from_db() + self.assertIsNone(obj.value) + obj = NullableJSONModel.objects.create(value=Value("invalid-json")) + obj.refresh_from_db() + self.assertEqual(obj.value, "invalid-json") + @skipUnlessDBFeature("supports_primitives_in_json_field") def test_json_null_different_from_sql_null(self): - json_null = NullableJSONModel.objects.create(value=Value("null")) + json_null = NullableJSONModel.objects.create(value=Value(None, JSONField())) + NullableJSONModel.objects.update(value=Value(None, JSONField())) json_null.refresh_from_db() sql_null = NullableJSONModel.objects.create(value=None) sql_null.refresh_from_db() # 'null' is not equal to NULL in the database. self.assertSequenceEqual( - NullableJSONModel.objects.filter(value=Value("null")), + NullableJSONModel.objects.filter(value=Value(None, JSONField())), [json_null], ) self.assertSequenceEqual( |
