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