test_json_deprecation.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. try:
  2. from django.contrib.postgres import forms
  3. from django.contrib.postgres.fields import JSONField
  4. from django.contrib.postgres.fields.jsonb import (
  5. KeyTextTransform, KeyTransform,
  6. )
  7. except ImportError:
  8. pass
  9. from django.core.checks import Warning as DjangoWarning
  10. from django.utils.deprecation import RemovedInDjango40Warning
  11. from . import PostgreSQLSimpleTestCase
  12. from .models import PostgreSQLModel
  13. class DeprecationTests(PostgreSQLSimpleTestCase):
  14. def test_model_field_deprecation_message(self):
  15. class PostgreSQLJSONModel(PostgreSQLModel):
  16. field = JSONField()
  17. self.assertEqual(PostgreSQLJSONModel().check(), [
  18. DjangoWarning(
  19. 'django.contrib.postgres.fields.JSONField is deprecated. '
  20. 'Support for it (except in historical migrations) will be '
  21. 'removed in Django 4.0.',
  22. hint='Use django.db.models.JSONField instead.',
  23. obj=PostgreSQLJSONModel._meta.get_field('field'),
  24. id='fields.W904',
  25. ),
  26. ])
  27. def test_form_field_deprecation_message(self):
  28. msg = (
  29. 'django.contrib.postgres.forms.JSONField is deprecated in favor '
  30. 'of django.forms.JSONField.'
  31. )
  32. with self.assertWarnsMessage(RemovedInDjango40Warning, msg):
  33. forms.JSONField()
  34. def test_key_transform_deprecation_message(self):
  35. msg = (
  36. 'django.contrib.postgres.fields.jsonb.KeyTransform is deprecated '
  37. 'in favor of django.db.models.fields.json.KeyTransform.'
  38. )
  39. with self.assertWarnsMessage(RemovedInDjango40Warning, msg):
  40. KeyTransform('foo', 'bar')
  41. def test_key_text_transform_deprecation_message(self):
  42. msg = (
  43. 'django.contrib.postgres.fields.jsonb.KeyTextTransform is '
  44. 'deprecated in favor of '
  45. 'django.db.models.fields.json.KeyTextTransform.'
  46. )
  47. with self.assertWarnsMessage(RemovedInDjango40Warning, msg):
  48. KeyTextTransform('foo', 'bar')