summaryrefslogtreecommitdiff
path: root/tests/model_fields
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2022-11-02 22:03:05 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-12-01 19:14:00 +0100
commit0ff46591ac3010841c73fd26e0fef93995fedd99 (patch)
tree7373b7f028df958db09d353e603124bc52b37bed /tests/model_fields
parentd3e746ace5eeea07216da97d9c3801f2fdc43223 (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.py31
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(