test_error_messages.py 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. from unittest import TestCase
  2. from django.core.exceptions import ValidationError
  3. from django.db import models
  4. class ValidationMessagesTest(TestCase):
  5. def _test_validation_messages(self, field, value, expected):
  6. with self.assertRaises(ValidationError) as cm:
  7. field.clean(value, None)
  8. self.assertEqual(cm.exception.messages, expected)
  9. def test_autofield_field_raises_error_message(self):
  10. f = models.AutoField(primary_key=True)
  11. self._test_validation_messages(f, 'fõo', ["'fõo' value must be an integer."])
  12. def test_integer_field_raises_error_message(self):
  13. f = models.IntegerField()
  14. self._test_validation_messages(f, 'fõo', ["'fõo' value must be an integer."])
  15. def test_boolean_field_raises_error_message(self):
  16. f = models.BooleanField()
  17. self._test_validation_messages(f, 'fõo', ["'fõo' value must be either True or False."])
  18. def test_nullable_boolean_field_raises_error_message(self):
  19. f = models.BooleanField(null=True)
  20. self._test_validation_messages(f, 'fõo', ["'fõo' value must be either True, False, or None."])
  21. def test_float_field_raises_error_message(self):
  22. f = models.FloatField()
  23. self._test_validation_messages(f, 'fõo', ["'fõo' value must be a float."])
  24. def test_decimal_field_raises_error_message(self):
  25. f = models.DecimalField()
  26. self._test_validation_messages(f, 'fõo', ["'fõo' value must be a decimal number."])
  27. def test_null_boolean_field_raises_error_message(self):
  28. f = models.NullBooleanField()
  29. self._test_validation_messages(f, 'fõo', ["'fõo' value must be either None, True or False."])
  30. def test_date_field_raises_error_message(self):
  31. f = models.DateField()
  32. self._test_validation_messages(
  33. f, 'fõo',
  34. ["'fõo' value has an invalid date format. It must be in YYYY-MM-DD format."]
  35. )
  36. self._test_validation_messages(
  37. f, 'aaaa-10-10',
  38. ["'aaaa-10-10' value has an invalid date format. It must be in YYYY-MM-DD format."]
  39. )
  40. self._test_validation_messages(
  41. f, '2011-13-10',
  42. ["'2011-13-10' value has the correct format (YYYY-MM-DD) but it is an invalid date."]
  43. )
  44. self._test_validation_messages(
  45. f, '2011-10-32',
  46. ["'2011-10-32' value has the correct format (YYYY-MM-DD) but it is an invalid date."]
  47. )
  48. def test_datetime_field_raises_error_message(self):
  49. f = models.DateTimeField()
  50. # Wrong format
  51. self._test_validation_messages(
  52. f, 'fõo',
  53. ["'fõo' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]
  54. )
  55. # Correct format but invalid date
  56. self._test_validation_messages(
  57. f, '2011-10-32',
  58. ["'2011-10-32' value has the correct format (YYYY-MM-DD) but it is an invalid date."]
  59. )
  60. # Correct format but invalid date/time
  61. self._test_validation_messages(
  62. f, '2011-10-32 10:10',
  63. ["'2011-10-32 10:10' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) "
  64. "but it is an invalid date/time."]
  65. )
  66. def test_time_field_raises_error_message(self):
  67. f = models.TimeField()
  68. # Wrong format
  69. self._test_validation_messages(
  70. f, 'fõo',
  71. ["'fõo' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] format."]
  72. )
  73. # Correct format but invalid time
  74. self._test_validation_messages(
  75. f, '25:50',
  76. ["'25:50' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an invalid time."]
  77. )