def test_send_email(self): """ Tests send_email send_email returns True when it successfully sends an email to a default address and errors out when unsuccessful. """ # Build test environment builder = EnvironBuilder(method='POST', data={'name': 'Valid Guy', 'email': '*****@*****.**', 'last_name': '', 'token': conf.TOKEN, 'redirect': 'http://www.example.com'}) env = builder.get_environ() req = Request(env) # Construct message for assertion msg = handler.create_msg(req) msg_send = MIMEText(str(msg)) msg_subj = handler.set_mail_subject(msg) msg_send['Subject'] = msg_subj msg_send['To'] = conf.EMAIL['default'] # Mock sendmail function so it doesn't send an actual email smtplib.SMTP.sendmail = Mock('smtplib.SMTP.sendmail') # Call send_email and assert sendmail was called correctly handler.create_app() handler.send_email(msg, msg_subj) smtplib.SMTP.sendmail.assert_called_with(conf.FROM, conf.EMAIL['default'], msg_send.as_string())
def test_redirect_url_error_4(self, mock_validate_email): """ Tests the user is redirected to appropriate location """ # Build test environment builder = EnvironBuilder(method='POST', data={'name': 'Valid Guy', 'email': '*****@*****.**', 'redirect': 'http://www.example.com', 'last_name': '', 'token': conf.TOKEN}) env = builder.get_environ() req = Request(env) # Mock validate email so returns true in Travis mock_validate_email.return_value = True app = handler.create_app() werkzeug.utils.redirect = Mock('werkzeug.utils.redirect') # Mock sendmail function so it doesn't send an actual email smtplib.SMTP.sendmail = Mock('smtplib.SMTP.sendmail') for i in range(conf.CEILING + 1): app.on_form_page(req) # Avoid duplicate form error builder.form['name'] = str(i) + builder.form['name'] werkzeug.utils.redirect.assert_called_with( 'http://www.example.com?error=4&message=Too+Many+Requests', code=302)
def test_redirect_url_error_3(self, mock_validate_email): """ Tests the user is redirected to appropriate location """ # Build test environment builder = EnvironBuilder(method='POST', data={'name': 'Valid Guy', 'email': '*****@*****.**', 'redirect': 'http://www.example.com', 'last_name': '!', 'token': 'wrong token'}) env = builder.get_environ() req = Request(env) # Mock validate email so returns true in Travis mock_validate_email.return_value = True # Create app and mock redirect app = handler.create_app() werkzeug.utils.redirect = Mock('werkzeug.utils.redirect') # Mock sendmail function so it doesn't send an actual email smtplib.SMTP.sendmail = Mock('smtplib.SMTP.sendmail') app.on_form_page(req) werkzeug.utils.redirect.assert_called_with( 'http://www.example.com?error=3&message=Improper+Form+Submission', code=302)
def test_redirect_url_error_1(self, mock_validate_email): """ Tests the user is redirected to appropriate location """ # Build test environment builder = EnvironBuilder(method='POST', data={'name': 'Valid Guy', 'email': '*****@*****.**', 'redirect': 'http://www.example.com', 'last_name': '', 'token': conf.TOKEN}) env = builder.get_environ() req = Request(env) # Mock validate email so returns false in Travis # Not technically necessary because this will return false in Travis # regardless since it can't find the SMTP server, but kept here for # consistency mock_validate_email.return_value = False # Create app and mock redirect app = handler.create_app() werkzeug.utils.redirect = Mock('werkzeug.utils.redirect') # Mock sendmail function so it doesn't send an actual email smtplib.SMTP.sendmail = Mock('smtplib.SMTP.sendmail') app.on_form_page(req) werkzeug.utils.redirect.assert_called_with( 'http://www.example.com?error=1&message=Invalid+Email', code=302)
def test_same_submission(self, mock_validate_email): """ Tests that the same form is not sent twice. """ builder = EnvironBuilder(method='POST', data={'name': 'Valid Guy', 'email': '*****@*****.**', 'last_name': '', 'token': conf.TOKEN, 'redirect': 'http://www.example.com'}) env = builder.get_environ() # Mock sendmail function so it doesn't send an actual email smtplib.SMTP.sendmail = Mock('smtplib.SMTP.sendmail') mock_validate_email.return_value = True # Create apps app = handler.create_app() # Will cause a duplicate with the last call because # first app.name = 'Valid Guy' = last app.name req = Request(env) app.on_form_page(req) self.assertEquals(app.error, None) # Update name so not a duplicate builder.form['name'] = 'Another Guy' env = builder.get_environ() req = Request(env) app.on_form_page(req) self.assertEquals(app.error, None) # Update name so not a duplicate builder.form['name'] = 'A Third Guy' env = builder.get_environ() req = Request(env) app.on_form_page(req) self.assertEquals(app.error, None) # Duplicate with first app because # first app.name = 'Valid Guy' = this app.name builder.form['name'] = 'Valid Guy' env = builder.get_environ() req = Request(env) app.on_form_page(req) self.assertEquals(app.error, 'Duplicate Request')
def test_validations_valid_data(self, mock_validate_email): """ Tests the form validation with valid data. on_form_page checks for valid fields in submitted form and returns an error message if an invalid field is found. """ builder = EnvironBuilder(method='POST', data={'name': 'Valid Guy', 'email': '*****@*****.**', 'last_name': '', 'token': conf.TOKEN, 'redirect': 'http://www.example.com'}) env = builder.get_environ() req = Request(env) # Mock external validate_email so returns true in Travis mock_validate_email.return_value = True app = handler.create_app() # Mock sendmail function so it doesn't send an actual email smtplib.SMTP.sendmail = Mock('smtplib.SMTP.sendmail') app.on_form_page(req) self.assertEquals(app.error, None)
def test_rate_limiter_invalid_rate(self, mock_validate_email): """ Tests rate limiter with an invalid rate """ builder = EnvironBuilder(method='POST', data={'name': 'Valid Guy', 'email': '*****@*****.**', 'last_name': '', 'token': conf.TOKEN, 'redirect': 'http://www.example.com'}) # Mock validate email so returns true in Travis mock_validate_email.return_value = True env = builder.get_environ() req = Request(env) app = handler.create_app() # Mock sendmail function so it doesn't send an actual email smtplib.SMTP.sendmail = Mock('smtplib.SMTP.sendmail') for i in range(conf.CEILING + 1): app.on_form_page(req) # Avoid duplicate form error builder.form['name'] = str(i) + builder.form['email'] self.assertEqual(app.error, 'Too Many Requests')
from request_handler import create_app application = create_app()