mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #23861 -- Added an API to deprecate model fields.
Thanks Markus Holterman and Berker Peksag for review.
This commit is contained in:
83
tests/check_framework/test_model_field_deprecation.py
Normal file
83
tests/check_framework/test_model_field_deprecation.py
Normal file
@@ -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',
|
||||
)
|
||||
])
|
||||
Reference in New Issue
Block a user