summaryrefslogtreecommitdiff
path: root/tests/check_framework
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2015-01-01 10:31:36 -0500
committerTim Graham <timograham@gmail.com>2015-01-05 11:35:36 -0500
commitc87ee41954737869e6026d6fb12394ec4f79d50a (patch)
treeb2bdc81b03455fd190f02fa3b48dc79b115af5b2 /tests/check_framework
parent6e1c9c6568c405bfa481dda4249abe2960173547 (diff)
Fixed #23861 -- Added an API to deprecate model fields.
Thanks Markus Holterman and Berker Peksag for review.
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',
+ )
+ ])