summaryrefslogtreecommitdiff
path: root/tests/check_framework
diff options
context:
space:
mode:
Diffstat (limited to 'tests/check_framework')
-rw-r--r--tests/check_framework/test_model_field_deprecation.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/check_framework/test_model_field_deprecation.py b/tests/check_framework/test_model_field_deprecation.py
new file mode 100644
index 0000000000..1bb8344749
--- /dev/null
+++ b/tests/check_framework/test_model_field_deprecation.py
@@ -0,0 +1,83 @@
+from django.db import models
+from django.core import checks
+from django.test import SimpleTestCase
+
+
+class TestDeprecatedField(SimpleTestCase):
+ def test_default_details(self):
+ class MyField(models.Field):
+ system_check_deprecated_details = {}
+
+ class Model(models.Model):
+ name = MyField()
+
+ model = Model()
+ self.assertEqual(model.check(), [
+ checks.Warning(
+ msg='MyField has been deprecated.',
+ hint=None,
+ obj=Model._meta.get_field('name'),
+ id='fields.WXXX',
+ )
+ ])
+
+ def test_user_specified_details(self):
+ class MyField(models.Field):
+ system_check_deprecated_details = {
+ 'msg': 'This field is deprecated and will be removed soon.',
+ 'hint': 'Use something else.',
+ 'id': 'fields.W999',
+ }
+
+ class Model(models.Model):
+ name = MyField()
+
+ model = Model()
+ self.assertEqual(model.check(), [
+ checks.Warning(
+ msg='This field is deprecated and will be removed soon.',
+ hint='Use something else.',
+ obj=Model._meta.get_field('name'),
+ id='fields.W999',
+ )
+ ])
+
+
+class TestRemovedField(SimpleTestCase):
+ def test_default_details(self):
+ class MyField(models.Field):
+ system_check_removed_details = {}
+
+ class Model(models.Model):
+ name = MyField()
+
+ model = Model()
+ self.assertEqual(model.check(), [
+ checks.Error(
+ msg='MyField has been removed except for support in historical migrations.',
+ hint=None,
+ obj=Model._meta.get_field('name'),
+ id='fields.EXXX',
+ )
+ ])
+
+ def test_user_specified_details(self):
+ class MyField(models.Field):
+ system_check_removed_details = {
+ 'msg': 'Support for this field is gone.',
+ 'hint': 'Use something else.',
+ 'id': 'fields.E999',
+ }
+
+ class Model(models.Model):
+ name = MyField()
+
+ model = Model()
+ self.assertEqual(model.check(), [
+ checks.Error(
+ msg='Support for this field is gone.',
+ hint='Use something else.',
+ obj=Model._meta.get_field('name'),
+ id='fields.E999',
+ )
+ ])