from django.core import checks from django.db import models from django.test import SimpleTestCase from django.test.utils import isolate_apps @isolate_apps("check_framework") 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.", 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", ) ], ) @isolate_apps("check_framework") 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." ), 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", ) ], )