test_error_messages.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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(
  18. f, "fõo", ["“fõo” value must be either True or False."]
  19. )
  20. def test_nullable_boolean_field_raises_error_message(self):
  21. f = models.BooleanField(null=True)
  22. self._test_validation_messages(
  23. f, "fõo", ["“fõo” value must be either True, False, or None."]
  24. )
  25. def test_float_field_raises_error_message(self):
  26. f = models.FloatField()
  27. self._test_validation_messages(f, "fõo", ["“fõo” value must be a float."])
  28. def test_decimal_field_raises_error_message(self):
  29. f = models.DecimalField()
  30. self._test_validation_messages(
  31. f, "fõo", ["“fõo” value must be a decimal number."]
  32. )
  33. def test_null_boolean_field_raises_error_message(self):
  34. f = models.BooleanField(null=True)
  35. self._test_validation_messages(
  36. f, "fõo", ["“fõo” value must be either True, False, or None."]
  37. )
  38. def test_date_field_raises_error_message(self):
  39. f = models.DateField()
  40. self._test_validation_messages(
  41. f,
  42. "fõo",
  43. [
  44. "“fõo” value has an invalid date format. It must be in YYYY-MM-DD "
  45. "format."
  46. ],
  47. )
  48. self._test_validation_messages(
  49. f,
  50. "aaaa-10-10",
  51. [
  52. "“aaaa-10-10” value has an invalid date format. It must be in "
  53. "YYYY-MM-DD format."
  54. ],
  55. )
  56. self._test_validation_messages(
  57. f,
  58. "2011-13-10",
  59. [
  60. "“2011-13-10” value has the correct format (YYYY-MM-DD) but it is an "
  61. "invalid date."
  62. ],
  63. )
  64. self._test_validation_messages(
  65. f,
  66. "2011-10-32",
  67. [
  68. "“2011-10-32” value has the correct format (YYYY-MM-DD) but it is an "
  69. "invalid date."
  70. ],
  71. )
  72. def test_datetime_field_raises_error_message(self):
  73. f = models.DateTimeField()
  74. # Wrong format
  75. self._test_validation_messages(
  76. f,
  77. "fõo",
  78. [
  79. "“fõo” value has an invalid format. It must be in "
  80. "YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."
  81. ],
  82. )
  83. # Correct format but invalid date
  84. self._test_validation_messages(
  85. f,
  86. "2011-10-32",
  87. [
  88. "“2011-10-32” value has the correct format (YYYY-MM-DD) but it is an "
  89. "invalid date."
  90. ],
  91. )
  92. # Correct format but invalid date/time
  93. self._test_validation_messages(
  94. f,
  95. "2011-10-32 10:10",
  96. [
  97. "“2011-10-32 10:10” value has the correct format "
  98. "(YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) but it is an invalid date/time."
  99. ],
  100. )
  101. def test_time_field_raises_error_message(self):
  102. f = models.TimeField()
  103. # Wrong format
  104. self._test_validation_messages(
  105. f,
  106. "fõo",
  107. [
  108. "“fõo” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] "
  109. "format."
  110. ],
  111. )
  112. # Correct format but invalid time
  113. self._test_validation_messages(
  114. f,
  115. "25:50",
  116. [
  117. "“25:50” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is "
  118. "an invalid time."
  119. ],
  120. )