diff options
| author | Clifford Gama <cliffygamy@gmail.com> | 2025-10-24 23:38:52 +0200 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2025-10-29 15:00:52 -0400 |
| commit | 348ca845385beaddc7c862ff8ec369f041a5088d (patch) | |
| tree | d8772ba51267934216ecb0c2de0786b4702a3310 /tests/model_fields | |
| parent | be7f68422d4c6ae568a17f1fa91aac67d284df82 (diff) | |
Refs #35381 -- Deprecated using None in JSONExact rhs to mean JSON null.
Key and index lookups are exempt from the deprecation.
Co-authored-by: Jacob Walls <jacobtylerwalls@gmail.com>
Diffstat (limited to 'tests/model_fields')
| -rw-r--r-- | tests/model_fields/test_jsonfield.py | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/tests/model_fields/test_jsonfield.py b/tests/model_fields/test_jsonfield.py index fd2a880f99..937b557794 100644 --- a/tests/model_fields/test_jsonfield.py +++ b/tests/model_fields/test_jsonfield.py @@ -41,8 +41,15 @@ from django.db.models.fields.json import ( KeyTransformTextLookupMixin, ) from django.db.models.functions import Cast -from django.test import SimpleTestCase, TestCase, skipIfDBFeature, skipUnlessDBFeature +from django.test import ( + SimpleTestCase, + TestCase, + ignore_warnings, + skipIfDBFeature, + skipUnlessDBFeature, +) from django.test.utils import CaptureQueriesContext +from django.utils.deprecation import RemovedInDjango70Warning from .models import ( CustomJSONDecoder, @@ -229,6 +236,8 @@ class TestSaveLoad(TestCase): self.assertIsNone(obj.value) @skipUnlessDBFeature("supports_primitives_in_json_field") + # RemovedInDjango70Warning. + @ignore_warnings(category=RemovedInDjango70Warning) def test_json_null_different_from_sql_null(self): json_null = NullableJSONModel.objects.create(value=Value(None, JSONField())) NullableJSONModel.objects.update(value=Value(None, JSONField())) @@ -242,6 +251,9 @@ class TestSaveLoad(TestCase): ) self.assertSequenceEqual( NullableJSONModel.objects.filter(value=None), + # RemovedInDjango70Warning: When the deprecation ends, replace + # with: + # [sql_null], [json_null], ) self.assertSequenceEqual( @@ -1365,3 +1377,36 @@ class JSONNullTests(TestCase): obj.refresh_from_db() self.assertIsNone(obj.value["name"]) self.assertEqual(obj.value["array"], [1, None]) + + +# RemovedInDjango70Warning. +@skipUnlessDBFeature("supports_primitives_in_json_field") +class JSONExactNoneDeprecationTests(TestCase): + @classmethod + def setUpTestData(cls): + cls.msg = ( + "Using None as the right-hand side of an exact lookup on JSONField to mean " + "JSON scalar 'null' is deprecated. Use JSONNull() instead (or use the " + "__isnull lookup if you meant SQL NULL)." + ) + cls.obj = NullableJSONModel.objects.create(value=JSONNull()) + + def test_filter(self): + with self.assertWarnsMessage(RemovedInDjango70Warning, self.msg): + self.assertSequenceEqual( + NullableJSONModel.objects.filter(value=None), [self.obj] + ) + + def test_annotation_q_filter(self): + qs = NullableJSONModel.objects.annotate( + has_empty_data=Q(value__isnull=True) | Q(value=None) + ).filter(has_empty_data=True) + with self.assertWarnsMessage(RemovedInDjango70Warning, self.msg): + self.assertSequenceEqual(qs, [self.obj]) + + def test_case_when(self): + qs = NullableJSONModel.objects.annotate( + has_json_null=Case(When(value=None, then=Value(True)), default=Value(False)) + ).filter(has_json_null=True) + with self.assertWarnsMessage(RemovedInDjango70Warning, self.msg): + self.assertSequenceEqual(qs, [self.obj]) |
