summaryrefslogtreecommitdiff
path: root/tests/invalid_models_tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests/invalid_models_tests')
-rw-r--r--tests/invalid_models_tests/test_models.py36
-rw-r--r--tests/invalid_models_tests/test_ordinary_fields.py48
2 files changed, 82 insertions, 2 deletions
diff --git a/tests/invalid_models_tests/test_models.py b/tests/invalid_models_tests/test_models.py
index 5a1bb4cc7a..6c062b2990 100644
--- a/tests/invalid_models_tests/test_models.py
+++ b/tests/invalid_models_tests/test_models.py
@@ -5,7 +5,7 @@ from django.core.checks.model_checks import _check_lazy_references
from django.db import connection, connections, models
from django.db.models.functions import Lower
from django.db.models.signals import post_init
-from django.test import SimpleTestCase, TestCase
+from django.test import SimpleTestCase, TestCase, skipUnlessDBFeature
from django.test.utils import isolate_apps, override_settings, register_lookup
@@ -1350,6 +1350,40 @@ class OtherModelTests(SimpleTestCase):
@isolate_apps('invalid_models_tests')
+class JSONFieldTests(TestCase):
+ @skipUnlessDBFeature('supports_json_field')
+ def test_ordering_pointing_to_json_field_value(self):
+ class Model(models.Model):
+ field = models.JSONField()
+
+ class Meta:
+ ordering = ['field__value']
+
+ self.assertEqual(Model.check(databases=self.databases), [])
+
+ def test_check_jsonfield(self):
+ class Model(models.Model):
+ field = models.JSONField()
+
+ error = Error(
+ '%s does not support JSONFields.' % connection.display_name,
+ obj=Model,
+ id='fields.E180',
+ )
+ expected = [] if connection.features.supports_json_field else [error]
+ self.assertEqual(Model.check(databases=self.databases), expected)
+
+ def test_check_jsonfield_required_db_features(self):
+ class Model(models.Model):
+ field = models.JSONField()
+
+ class Meta:
+ required_db_features = {'supports_json_field'}
+
+ self.assertEqual(Model.check(databases=self.databases), [])
+
+
+@isolate_apps('invalid_models_tests')
class ConstraintsTests(TestCase):
def test_check_constraints(self):
class Model(models.Model):
diff --git a/tests/invalid_models_tests/test_ordinary_fields.py b/tests/invalid_models_tests/test_ordinary_fields.py
index d263dc5cc9..a81f9eed90 100644
--- a/tests/invalid_models_tests/test_ordinary_fields.py
+++ b/tests/invalid_models_tests/test_ordinary_fields.py
@@ -3,7 +3,9 @@ import uuid
from django.core.checks import Error, Warning as DjangoWarning
from django.db import connection, models
-from django.test import SimpleTestCase, TestCase, skipIfDBFeature
+from django.test import (
+ SimpleTestCase, TestCase, skipIfDBFeature, skipUnlessDBFeature,
+)
from django.test.utils import isolate_apps, override_settings
from django.utils.functional import lazy
from django.utils.timezone import now
@@ -793,3 +795,47 @@ class UUIDFieldTests(TestCase):
)
self.assertEqual(Model._meta.get_field('field').check(), [])
+
+
+@isolate_apps('invalid_models_tests')
+@skipUnlessDBFeature('supports_json_field')
+class JSONFieldTests(TestCase):
+ def test_invalid_default(self):
+ class Model(models.Model):
+ field = models.JSONField(default={})
+
+ self.assertEqual(Model._meta.get_field('field').check(), [
+ DjangoWarning(
+ msg=(
+ "JSONField default should be a callable instead of an "
+ "instance so that it's not shared between all field "
+ "instances."
+ ),
+ hint=(
+ 'Use a callable instead, e.g., use `dict` instead of `{}`.'
+ ),
+ obj=Model._meta.get_field('field'),
+ id='fields.E010',
+ )
+ ])
+
+ def test_valid_default(self):
+ class Model(models.Model):
+ field = models.JSONField(default=dict)
+
+ self.assertEqual(Model._meta.get_field('field').check(), [])
+
+ def test_valid_default_none(self):
+ class Model(models.Model):
+ field = models.JSONField(default=None)
+
+ self.assertEqual(Model._meta.get_field('field').check(), [])
+
+ def test_valid_callable_default(self):
+ def callable_default():
+ return {'it': 'works'}
+
+ class Model(models.Model):
+ field = models.JSONField(default=callable_default)
+
+ self.assertEqual(Model._meta.get_field('field').check(), [])