test_emailfield.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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.assertWidgetRendersTo(f, '<input type="email" name="f" id="id_f" required>')
  9. with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
  10. f.clean('')
  11. with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
  12. f.clean(None)
  13. self.assertEqual('person@example.com', f.clean('person@example.com'))
  14. with self.assertRaisesMessage(ValidationError, "'Enter a valid email address.'"):
  15. f.clean('foo')
  16. self.assertEqual(
  17. 'local@domain.with.idn.xyz\xe4\xf6\xfc\xdfabc.part.com',
  18. f.clean('local@domain.with.idn.xyzäöüßabc.part.com')
  19. )
  20. def test_email_regexp_for_performance(self):
  21. f = EmailField()
  22. # Check for runaway regex security problem. This will take a long time
  23. # if the security fix isn't in place.
  24. addr = 'viewx3dtextx26qx3d@yahoo.comx26latlngx3d15854521645943074058'
  25. self.assertEqual(addr, f.clean(addr))
  26. def test_emailfield_not_required(self):
  27. f = EmailField(required=False)
  28. self.assertEqual('', f.clean(''))
  29. self.assertEqual('', f.clean(None))
  30. self.assertEqual('person@example.com', f.clean('person@example.com'))
  31. self.assertEqual('example@example.com', f.clean(' example@example.com \t \t '))
  32. with self.assertRaisesMessage(ValidationError, "'Enter a valid email address.'"):
  33. f.clean('foo')
  34. def test_emailfield_min_max_length(self):
  35. f = EmailField(min_length=10, max_length=15)
  36. self.assertWidgetRendersTo(
  37. f,
  38. '<input id="id_f" type="email" name="f" maxlength="15" minlength="10" required>',
  39. )
  40. with self.assertRaisesMessage(ValidationError, "'Ensure this value has at least 10 characters (it has 9).'"):
  41. f.clean('a@foo.com')
  42. self.assertEqual('alf@foo.com', f.clean('alf@foo.com'))
  43. with self.assertRaisesMessage(ValidationError, "'Ensure this value has at most 15 characters (it has 20).'"):
  44. f.clean('alf123456788@foo.com')
  45. def test_emailfield_strip_on_none_value(self):
  46. f = EmailField(required=False, empty_value=None)
  47. self.assertIsNone(f.clean(None))
  48. def test_emailfield_unable_to_set_strip_kwarg(self):
  49. msg = "__init__() got multiple values for keyword argument 'strip'"
  50. with self.assertRaisesMessage(TypeError, msg):
  51. EmailField(strip=False)