test_backend_specific.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # -*- encoding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from types import MethodType
  4. from django.core.checks import Error
  5. from django.db import connection, models
  6. from .base import IsolatedModelsTestCase
  7. class BackendSpecificChecksTests(IsolatedModelsTestCase):
  8. def test_check_field(self):
  9. """ Test if backend specific checks are performed. """
  10. error = Error('an error', hint=None)
  11. def mock(self, field, **kwargs):
  12. return [error]
  13. class Model(models.Model):
  14. field = models.IntegerField()
  15. field = Model._meta.get_field('field')
  16. # Mock connection.validation.check_field method.
  17. v = connection.validation
  18. old_check_field = v.check_field
  19. v.check_field = MethodType(mock, v)
  20. try:
  21. errors = field.check()
  22. finally:
  23. # Unmock connection.validation.check_field method.
  24. v.check_field = old_check_field
  25. self.assertEqual(errors, [error])
  26. def test_validate_field(self):
  27. """ Errors raised by deprecated `validate_field` method should be
  28. collected. """
  29. def mock(self, errors, opts, field):
  30. errors.add(opts, "An error!")
  31. class Model(models.Model):
  32. field = models.IntegerField()
  33. field = Model._meta.get_field('field')
  34. expected = [
  35. Error(
  36. "An error!",
  37. hint=None,
  38. obj=field,
  39. )
  40. ]
  41. # Mock connection.validation.validate_field method.
  42. v = connection.validation
  43. old_validate_field = v.validate_field
  44. v.validate_field = MethodType(mock, v)
  45. try:
  46. errors = field.check()
  47. finally:
  48. # Unmock connection.validation.validate_field method.
  49. v.validate_field = old_validate_field
  50. self.assertEqual(errors, expected)