test_emailfield.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from django.core.exceptions import ValidationError
  2. from django.forms import EmailField
  3. from django.test import SimpleTestCase
  4. from . import FormFieldAssertionsMixin
  5. class EmailFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
  6. def test_emailfield_1(self):
  7. f = EmailField()
  8. self.assertEqual(f.max_length, 320)
  9. self.assertWidgetRendersTo(
  10. f, '<input type="email" name="f" id="id_f" maxlength="320" required>'
  11. )
  12. with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
  13. f.clean("")
  14. with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
  15. f.clean(None)
  16. self.assertEqual("person@example.com", f.clean("person@example.com"))
  17. with self.assertRaisesMessage(
  18. ValidationError, "'Enter a valid email address.'"
  19. ):
  20. f.clean("foo")
  21. self.assertEqual(
  22. "local@domain.with.idn.xyz\xe4\xf6\xfc\xdfabc.part.com",
  23. f.clean("local@domain.with.idn.xyzäöüßabc.part.com"),
  24. )
  25. def test_email_regexp_for_performance(self):
  26. f = EmailField()
  27. # Check for runaway regex security problem. This will take a long time
  28. # if the security fix isn't in place.
  29. addr = "viewx3dtextx26qx3d@yahoo.comx26latlngx3d15854521645943074058"
  30. self.assertEqual(addr, f.clean(addr))
  31. def test_emailfield_not_required(self):
  32. f = EmailField(required=False)
  33. self.assertEqual("", f.clean(""))
  34. self.assertEqual("", f.clean(None))
  35. self.assertEqual("person@example.com", f.clean("person@example.com"))
  36. self.assertEqual(
  37. "example@example.com", f.clean(" example@example.com \t \t ")
  38. )
  39. with self.assertRaisesMessage(
  40. ValidationError, "'Enter a valid email address.'"
  41. ):
  42. f.clean("foo")
  43. def test_emailfield_min_max_length(self):
  44. f = EmailField(min_length=10, max_length=15)
  45. self.assertWidgetRendersTo(
  46. f,
  47. '<input id="id_f" type="email" name="f" maxlength="15" minlength="10" '
  48. "required>",
  49. )
  50. with self.assertRaisesMessage(
  51. ValidationError,
  52. "'Ensure this value has at least 10 characters (it has 9).'",
  53. ):
  54. f.clean("a@foo.com")
  55. self.assertEqual("alf@foo.com", f.clean("alf@foo.com"))
  56. with self.assertRaisesMessage(
  57. ValidationError,
  58. "'Ensure this value has at most 15 characters (it has 20).'",
  59. ):
  60. f.clean("alf123456788@foo.com")
  61. def test_emailfield_strip_on_none_value(self):
  62. f = EmailField(required=False, empty_value=None)
  63. self.assertIsNone(f.clean(""))
  64. self.assertIsNone(f.clean(None))
  65. def test_emailfield_unable_to_set_strip_kwarg(self):
  66. msg = "__init__() got multiple values for keyword argument 'strip'"
  67. with self.assertRaisesMessage(TypeError, msg):
  68. EmailField(strip=False)