def test_invalid_email_structure_regex(self): 'Rejects an email with an invalid structure.' for address in INVALID_EXAMPLES: with self.assertRaises( expected_exception=AddressFormatError, msg=f'Test failed for {address}'): regex_check(EmailAddress(address))
def test_smtp_success(self): 'Succeeds on successful SMTP conversation' self.assertTrue( smtp_check( email_address=EmailAddress('*****@*****.**'), mx_records=['smtp.example.com'], ) )
def test_idna_conversion_invalid(self): 'Rejects email address which is not IDNA-convertible.' for address in self.invalid_tests: # This must be rejected directly by the EmailAddress constructor... with self.assertRaises(AddressFormatError) as exc: EmailAddress(address) self.assertTupleEqual(exc.exception.args, ()) # ...and indirectly by validate_email(). self.assertFalse(validate_email(address))
def test_user_domain_invalid(self): 'Rejects unparseable email address.' for address in self.invalid_tests: # This must be rejected directly by the EmailAddress constructor... with self.assertRaises(AddressFormatError) as exc: EmailAddress(address) self.assertTupleEqual(exc.exception.args, ()) # ...and indirectly by validate_email(). self.assertFalse(validate_email(address))
def _test_one_smtp_failure(self, cmd, reply, exception): with patch.dict(in_dict=SMTPMock.reply, values={cmd: reply}): with self.assertRaises(exception) as context: smtp_check( email_address=EmailAddress('*****@*****.**'), mx_records=['smtp.example.com'], ) if isinstance(reply, tuple): error_messages = context.exception.error_messages error_info = error_messages['smtp.example.com'] self.assertEqual(error_info.command[:4].upper(), cmd or 'CONN') self.assertEqual(error_info.code, reply[0]) self.assertEqual(error_info.text, reply[1].decode())
def test_blacklist_positive(self): 'Disallows blacklist item: mailinator.com.' with self.assertRaises(DomainBlacklistedError): domainlist_check(EmailAddress('*****@*****.**')) with self.assertRaises(DomainBlacklistedError): validate_email_or_fail( email_address='*****@*****.**', check_regex=False, use_blacklist=True) with self.assertRaises(DomainBlacklistedError): validate_email_or_fail( email_address='*****@*****.**', check_regex=True, use_blacklist=True) with self.assertLogs(): self.assertFalse(expr=validate_email( email_address='*****@*****.**', check_regex=False, use_blacklist=True, debug=True)) with self.assertLogs(): self.assertFalse(expr=validate_email( email_address='*****@*****.**', check_regex=True, use_blacklist=True, debug=True))
def test_blacklist_negative(self): 'Allows a domain not in the blacklist.' self.assertTrue(expr=domainlist_check( EmailAddress('*****@*****.**')))
def test_skip_smtp_argument(self, check_mx_records_mock): 'Check correct work of `skip_smtp` argument.' self.assertTrue(mx_check( EmailAddress('*****@*****.**'), debug=False, skip_smtp=True)) self.assertEqual(check_mx_records_mock.call_count, 0)
def test_idna_conversion_valid(self): 'Converts email address into ASCII-compatible encoding.' for address, ace in self.valid_tests.items(): self.assertEqual(EmailAddress(address).ace, ace)
def test_user_domain_valid(self): 'Splits email address into user and domain parts.' for address, (user, domain) in self.valid_tests.items(): self.assertEqual(EmailAddress(address).user, user) self.assertEqual(EmailAddress(address).domain, domain)
def test_valid_email_structure_regex(self): 'Accepts an email with a valid structure.' for address in VALID_EXAMPLES: self.assertTrue( expr=regex_check(EmailAddress(address)), msg=f'Check is not true with {address}')