Example #1
0
class TestValidEmail(unittest.TestCase):
    """Lightly test email address ("addr-spec") validation against RFC 2822.

    http://www.faqs.org/rfcs/rfc2822.html
    """
    def setUp(self):
        # Reset the validator state and errors before every test.
        self.validator = ValidEmail()
        c.errors = ErrorSet()

    def test_valid_emails(self):
        def test(email):
            result = self.validator.run(email)
            self.assertEqual(result, email)
            self.assertFalse(self.validator.has_errors)
            self.assertEqual(len(c.errors), 0)

        test('*****@*****.**')
        test('*****@*****.**')
        test('*****@*****.**')

    def _test_failure(self, email, error=errors.BAD_EMAIL):
        """Helper for testing bad emails."""
        result = self.validator.run(email)
        self.assertEqual(result, None)
        self.assertTrue(self.validator.has_errors)
        self.assertTrue(c.errors.get((error, None)))

    def test_blank_email(self):
        self._test_failure('', errors.NO_EMAIL)
        self.setUp()
        self._test_failure(' ', errors.NO_EMAIL)

    def test_no_whitespace(self):
        self._test_failure('test @example.com')
        self.setUp()
        self._test_failure('test@ example.com')
        self.setUp()
        self._test_failure('test@example. com')
        self.setUp()
        self._test_failure("test@\texample.com")

    def test_no_hostname(self):
        self._test_failure('example')
        self.setUp()
        self._test_failure('example@')

    def test_no_username(self):
        self._test_failure('example.com')
        self.setUp()
        self._test_failure('@example.com')

    def test_two_hostnames(self):
        self._test_failure('[email protected]@example.com')