test_error_messages.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. from django.core.exceptions import ValidationError
  2. from django.db import models
  3. from django.utils.unittest import TestCase
  4. class ValidationMessagesTest(TestCase):
  5. def test_autofield_field_raises_error_message(self):
  6. f = models.AutoField(primary_key=True)
  7. self.assertRaises(ValidationError, f.clean, 'foo', None)
  8. try:
  9. f.clean('foo', None)
  10. except ValidationError, e:
  11. self.assertEqual(e.messages, [u"'foo' value must be an integer."])
  12. # primary_key must be True. Refs #12467.
  13. self.assertRaises(AssertionError, models.AutoField, 'primary_key', False)
  14. try:
  15. models.AutoField(primary_key=False)
  16. except AssertionError, e:
  17. self.assertEqual(str(e), "AutoFields must have primary_key=True.")
  18. def test_integer_field_raises_error_message(self):
  19. f = models.IntegerField()
  20. self.assertRaises(ValidationError, f.clean, 'foo', None)
  21. try:
  22. f.clean('foo', None)
  23. except ValidationError, e:
  24. self.assertEqual(e.messages, [u"'foo' value must be an integer."])
  25. def test_boolean_field_raises_error_message(self):
  26. f = models.BooleanField()
  27. self.assertRaises(ValidationError, f.clean, 'foo', None)
  28. try:
  29. f.clean('foo', None)
  30. except ValidationError, e:
  31. self.assertEqual(e.messages,
  32. [u"'foo' value must be either True or False."])
  33. def test_float_field_raises_error_message(self):
  34. f = models.FloatField()
  35. self.assertRaises(ValidationError, f.clean, 'foo', None)
  36. try:
  37. f.clean('foo', None)
  38. except ValidationError, e:
  39. self.assertEqual(e.messages, [u"'foo' value must be a float."])
  40. def test_decimal_field_raises_error_message(self):
  41. f = models.DecimalField()
  42. self.assertRaises(ValidationError, f.clean, 'foo', None)
  43. try:
  44. f.clean('foo', None)
  45. except ValidationError, e:
  46. self.assertEqual(e.messages,
  47. [u"'foo' value must be a decimal number."])
  48. def test_null_boolean_field_raises_error_message(self):
  49. f = models.NullBooleanField()
  50. self.assertRaises(ValidationError, f.clean, 'foo', None)
  51. try:
  52. f.clean('foo', None)
  53. except ValidationError, e:
  54. self.assertEqual(e.messages,
  55. [u"'foo' value must be either None, True or False."])
  56. def test_date_field_raises_error_message(self):
  57. f = models.DateField()
  58. self.assertRaises(ValidationError, f.clean, 'foo', None)
  59. try:
  60. f.clean('foo', None)
  61. except ValidationError, e:
  62. self.assertEqual(e.messages, [
  63. u"'foo' value has an invalid date format. "
  64. u"It must be in YYYY-MM-DD format."])
  65. self.assertRaises(ValidationError, f.clean, 'aaaa-10-10', None)
  66. try:
  67. f.clean('aaaa-10-10', None)
  68. except ValidationError, e:
  69. self.assertEqual(e.messages, [
  70. u"'aaaa-10-10' value has an invalid date format. "
  71. u"It must be in YYYY-MM-DD format."])
  72. self.assertRaises(ValidationError, f.clean, '2011-13-10', None)
  73. try:
  74. f.clean('2011-13-10', None)
  75. except ValidationError, e:
  76. self.assertEqual(e.messages, [
  77. u"'2011-13-10' value has the correct format (YYYY-MM-DD) "
  78. u"but it is an invalid date."])
  79. self.assertRaises(ValidationError, f.clean, '2011-10-32', None)
  80. try:
  81. f.clean('2011-10-32', None)
  82. except ValidationError, e:
  83. self.assertEqual(e.messages, [
  84. u"'2011-10-32' value has the correct format (YYYY-MM-DD) "
  85. u"but it is an invalid date."])
  86. def test_datetime_field_raises_error_message(self):
  87. f = models.DateTimeField()
  88. # Wrong format
  89. self.assertRaises(ValidationError, f.clean, 'foo', None)
  90. try:
  91. f.clean('foo', None)
  92. except ValidationError, e:
  93. self.assertEqual(e.messages, [
  94. u"'foo' value has an invalid format. It must be "
  95. u"in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."])
  96. # Correct format but invalid date
  97. self.assertRaises(ValidationError, f.clean, '2011-10-32', None)
  98. try:
  99. f.clean('2011-10-32', None)
  100. except ValidationError, e:
  101. self.assertEqual(e.messages, [
  102. u"'2011-10-32' value has the correct format "
  103. u"(YYYY-MM-DD) but it is an invalid date."])
  104. # Correct format but invalid date/time
  105. self.assertRaises(ValidationError, f.clean, '2011-10-32 10:10', None)
  106. try:
  107. f.clean('2011-10-32 10:10', None)
  108. except ValidationError, e:
  109. self.assertEqual(e.messages, [
  110. u"'2011-10-32 10:10' value has the correct format "
  111. u"(YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) "
  112. u"but it is an invalid date/time."])
  113. def test_time_field_raises_error_message(self):
  114. f = models.TimeField()
  115. # Wrong format
  116. self.assertRaises(ValidationError, f.clean, 'foo', None)
  117. try:
  118. f.clean('foo', None)
  119. except ValidationError, e:
  120. self.assertEqual(e.messages, [
  121. u"'foo' value has an invalid format. It must be in "
  122. u"HH:MM[:ss[.uuuuuu]] format."])
  123. # Correct format but invalid time
  124. self.assertRaises(ValidationError, f.clean, '25:50', None)
  125. try:
  126. f.clean('25:50', None)
  127. except ValidationError, e:
  128. self.assertEqual(e.messages, [
  129. u"'25:50' value has the correct format "
  130. u"(HH:MM[:ss[.uuuuuu]]) but it is an invalid time."])