test_model_field_deprecation.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from django.core import checks
  2. from django.db import models
  3. from django.test import SimpleTestCase
  4. from django.test.utils import isolate_apps
  5. @isolate_apps('check_framework')
  6. class TestDeprecatedField(SimpleTestCase):
  7. def test_default_details(self):
  8. class MyField(models.Field):
  9. system_check_deprecated_details = {}
  10. class Model(models.Model):
  11. name = MyField()
  12. model = Model()
  13. self.assertEqual(model.check(), [
  14. checks.Warning(
  15. msg='MyField has been deprecated.',
  16. obj=Model._meta.get_field('name'),
  17. id='fields.WXXX',
  18. )
  19. ])
  20. def test_user_specified_details(self):
  21. class MyField(models.Field):
  22. system_check_deprecated_details = {
  23. 'msg': 'This field is deprecated and will be removed soon.',
  24. 'hint': 'Use something else.',
  25. 'id': 'fields.W999',
  26. }
  27. class Model(models.Model):
  28. name = MyField()
  29. model = Model()
  30. self.assertEqual(model.check(), [
  31. checks.Warning(
  32. msg='This field is deprecated and will be removed soon.',
  33. hint='Use something else.',
  34. obj=Model._meta.get_field('name'),
  35. id='fields.W999',
  36. )
  37. ])
  38. @isolate_apps('check_framework')
  39. class TestRemovedField(SimpleTestCase):
  40. def test_default_details(self):
  41. class MyField(models.Field):
  42. system_check_removed_details = {}
  43. class Model(models.Model):
  44. name = MyField()
  45. model = Model()
  46. self.assertEqual(model.check(), [
  47. checks.Error(
  48. msg='MyField has been removed except for support in historical migrations.',
  49. obj=Model._meta.get_field('name'),
  50. id='fields.EXXX',
  51. )
  52. ])
  53. def test_user_specified_details(self):
  54. class MyField(models.Field):
  55. system_check_removed_details = {
  56. 'msg': 'Support for this field is gone.',
  57. 'hint': 'Use something else.',
  58. 'id': 'fields.E999',
  59. }
  60. class Model(models.Model):
  61. name = MyField()
  62. model = Model()
  63. self.assertEqual(model.check(), [
  64. checks.Error(
  65. msg='Support for this field is gone.',
  66. hint='Use something else.',
  67. obj=Model._meta.get_field('name'),
  68. id='fields.E999',
  69. )
  70. ])