def test_validate_two_times_a_valid_username(self): with app.test_client() as client: # We create one user with no email validation username, password = create_one_user_no_mail_validation(client) # We validate his email for the first time self.assertEqual( 200, client.get(f'/mail/validation/{username}').status_code) # We validate his email for the second time self.assertEqual( 202, client.get(f'/mail/validation/{username}').status_code) # We log the user who just validated his email self.assertEqual( 200, client.post('/login', data=dict(username=username, password=password), follow_redirects=True).status_code) # We check if out user logged in correctly with client.session_transaction() as sess: self.assertEqual(username, sess.get('username'))
def test_example_with_mock_send_email_async(self, mock): with app.test_client() as client: """ Una nota para entender el uso de mock con patch con llamadas REST. Aca se importa training.app.app.task_queue.enqueue esta funcion, que va a ser sustituida. va a ser sustituida por la funcion 'mock' y debe pasarse como argumento al test. Dentro del test, nosotros podemos modificar su comportamiento, hacer que devuelva los valores que queremos (ejemplo: mock.return_value = 40), hacer que solo acepte determiandos paramoetros, etc. Para ver que cosas se pueden hacer, leer la documentacion de unittest.mock, o si no una funcion que nos puede ayudar es hacer dir(mock). dir(mock) nos dice todos los nombres que estan definidos en el modulo, ya sean variables, modulos, o funciones. En el ejemplo de acontinuacion, no vamos a modificar su comportamiento, solo vamos a checkear que efectivamente se este llamando a la funcion, cuando hacemos una request HTTP POST. En nuestro caso, haremos un POST a '/send/email', para enviar un mail asyncronicamente. Entonces, se deberá llamar a la funcion 'app.task_queue.enqueue', que se encuentra dentro de la view function '/send/email'. """ mock.return_value = 40 self.assertEqual(200, client.post('/send/email', data=dict(email_sender="*****@*****.**", email_recipient="*****@*****.**", message_body="ASYNC EMAIL, This is a message body!"), follow_redirects=True).status_code) mock.assert_called()
def test_create_one_user_no_mail_validation(self): with app.test_client() as client: username, password = create_one_user_no_mail_validation(client) self.assertNotEqual(None, User.query.filter_by(id=username).first()) with client.session_transaction() as sess: self.assertEqual(None, sess.get('username'))
def test_login_logout_inside(self): with app.test_client() as client: username, password = create_one_user(client) login_one_user(client, username, password) logout(client) # The decorator login_required catch the function and return 'no_login.html', 411 self.assertEqual(411, client.get('/inside').status_code)
def test_login_required_no_session(self): with app.test_client() as client: response1 = client.get('/inside', follow_redirects=True) response2 = client.get('/logout', follow_redirects=True) response3 = client.get('/ver', follow_redirects=True) self.assertEqual(response1.status_code, 411) self.assertEqual(response2.status_code, 411) self.assertEqual(response3.status_code, 411)
def test_login_one_user(self): with app.test_client() as client: username, password = create_one_user(client) login_one_user(client, username, password) # We check if user was logged in, we verify it, requesting the session with client.session_transaction() as sess: self.assertEqual(username, sess.get('username'))
def test_sign_up_and_mail_validation_several_cases(self): with app.test_client() as client: # We create two User self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) # We have to validate the mail well self.assertEqual( 200, client.get('/mail/validation/Fernando').status_code) # We validate again the mail self.assertEqual( 202, client.get('/mail/validation/Fernando').status_code) # We try to validate a mail from a wrong username self.assertEqual( 450, client.get('/mail/validation/Fernandosdf').status_code) # We validate the other users's email self.assertEqual( 200, client.get('/mail/validation/Fernando2').status_code) # We validate again same users's email self.assertEqual( 202, client.get('/mail/validation/Fernando2').status_code) # We sign in both user self.assertEqual( 200, client.post('/login', data=dict(username='******', password='******'), follow_redirects=True).status_code) self.assertEqual( 200, client.post('/login', data=dict(username='******', password='******'), follow_redirects=True).status_code) # We check if user's session was caught with client.session_transaction() as sess: self.assertEqual('Fernando2', sess.get('username', None))
def setUp(self): """Do some custom setup for all tests here""" self.app = app.test_client() with app.app_context(): db.create_all() db.session.commit() # Disable sending emails during unit testing self.assertEqual(app.debug, True)
def test_login_then_logout_two_times(self): with app.test_client() as client: username, password = create_one_user(client) login_one_user(client, username, password) # First logout should work as normal self.assertEqual(200, client.get('/logout').status_code) # Decorator login_required catch the function and return 'no_login.html', 411 self.assertEqual(411, client.get('/logout').status_code)
def test_send_email_sync(self): with app.test_client() as client: with mail.record_messages() as outbox: self.assertEqual(204, client.post('/send/email', data=dict(email_sender="*****@*****.**", email_recipient="*****@*****.**", message_body="This is a message body!", send_now=True)).status_code) self.assertEqual(1, len(outbox)) self.assertEqual("Recover your account", outbox[0].subject)
def test_send_sync_and_async_emails(self, mock): with app.test_client() as client: self.assertEqual(204, client.post('/send/email', data=dict(email_sender="*****@*****.**", email_recipient="*****@*****.**", message_body="SYNC MAIL This is a message body!", send_now=True)).status_code) self.assertEqual(200, client.post('/send/email', data=dict(email_sender="*****@*****.**", email_recipient="*****@*****.**", message_body="ASYNC EMAIL This is a message body!", )).status_code) mock.assert_called()
def test_sing_up_one_user_not_validate_form_short_username(self): with app.test_client() as client: # We create a User, but password and confirmation does not match self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', passwords='password', confirm='password', accept_tos=True), follow_redirects=True).status_code, 400)
def test_return_test_g(self): with app.test_client() as client: a = client.get('/g') self.assertEqual(401, a.status_code) create_one_user(client) b = client.post('/login', data=dict(username='******', password='******'), follow_redirects=True) self.assertEqual(200, b.status_code)
def test_sign_in_one_user_check_session(self): with app.test_client() as client: username, password = create_one_user(client) # We sign in with the recent user self.assertEqual( 200, client.post('/login', data=dict(username=username, password=password), follow_redirects=True).status_code) # We check if user's session was caught with client.session_transaction() as sess: self.assertEqual('Fernando', sess.get('username', None))
def test_sign_in_bad_username(self): with app.test_client() as client: username, password = create_one_user(client) # We sign in with the recent user self.assertEqual( 450, client.post('/login', data=dict(username='******', password='******'), follow_redirects=True).status_code) # We check if user's session was caught, result should be None cause it was not supposed to be in with client.session_transaction() as sess: self.assertEqual(None, sess.get('username', None))
def test_sign_in_short_username(self): with app.test_client() as client: username, password = create_one_user(client) # We sign in with the recent user self.assertEqual( 800, client.post('/login', data=dict(username='******', password=password), follow_redirects=True).status_code) # 800 means it was a successful GET, or an invalid POST FORM # We check if user's session was caught, result should be None cause it was not supposed to be in with client.session_transaction() as sess: self.assertEqual(None, sess.get('username', None))
def test_session_cookies(self): password = crypt_password('Fernando') with app.app_context(): db.session.add( User(id="Fernando", username="******", email="*****@*****.**", password=password, mail_validation=True)) db.session.commit() with app.test_client() as client: client.post('/login', data=dict(username="******", password="******"), follow_redirects=True) self.assertEqual('Fernando', session.get('username'))
def test_validate_one_user_then_login(self): with app.test_client() as client: # We create one user with no email validation username, password = create_one_user_no_mail_validation(client) # We validate his email self.assertEqual( 200, client.get(f'/mail/validation/{username}').status_code) # We log in the user login_one_user(client, username, password) # We check if our user logged in correctly with client.session_transaction() as sess: self.assertEqual(username, sess.get('username'))
def test_sing_up_one_user(self): with app.test_client() as client: # We create a User self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) # We check if user 'Fernando Gago' was saved in the database self.assertNotEqual( None, User.query.filter_by(id="Fernando Gago").first())
def test_sing_up_two_users_same_username(self): with app.test_client() as client: # We create two users, with same username self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 420)
def test_sing_in_two_times_same_user(self): with app.test_client() as client: username, password = create_one_user(client) # We log in two times the user self.assertEqual( 200, client.post('/login', data=dict(username=username, password=password), follow_redirects=True).status_code) self.assertEqual( 200, client.post('/login', data=dict(username=username, password=password), follow_redirects=True).status_code) # We check last session, should be the user, our app does not care about double log in yet with client.session_transaction() as sess: self.assertEqual("Fernando", sess.get("username"))
def test_login_3_users_logout_2(self): with app.test_client() as client: username1, password1 = create_one_user(client, username="******", email="*****@*****.**") username2, password2 = create_one_user(client, username="******", email="*****@*****.**") username3, password3 = create_one_user(client, username="******", email="*****@*****.**") login_one_user(client, username1, password1) login_one_user(client, username2, password2) login_one_user(client, username3, password3) # First logout should work as normal self.assertEqual(200, client.get('/logout').status_code) # Decorator login_required catch the function and return 'no_login.html', 411 self.assertEqual(411, client.get('/logout').status_code)
def test_session_after_sing_up(self): with app.test_client() as client: client.post('/register', data=dict(username="******", email="*****@*****.**", password='******', confirm='Fernando', accept_tos=True), follow_redirects=False) # We update mail_validation our_user = User.query.filter_by(id="FernandoSAS").first() our_user.mail_validation = True db.session.commit() client.post('/login', data=dict(username="******", password='******'), follow_redirects=False) with client.session_transaction() as sess: self.assertEqual('FernandoSAS', sess.get('username'))
def test_sing_up_some_users_check_in_database(self): with app.test_client() as client: # We create four users self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) # We checked if all users were created and saved in the database for i in range(1, 5): username = "******" + str(i) self.assertNotEqual(None, User.query.filter_by(id=username).first())
def test_sign_up_without_mail_validation(self): with app.test_client() as client: # We create a User self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) # We sign in without mail validation self.assertEqual( 451, client.post('/login', data=dict(username='******', password='******'), follow_redirects=True).status_code) # We check if user's session was caught, result should be None cause it was not supposed to be in with client.session_transaction() as sess: self.assertEqual(None, sess.get('username', None))
def test_login_required_with_sesion(self): with app.test_client() as client: client.post('/register', data=dict(username="******", email="*****@*****.**", password='******', confirm='Fernando', accept_tos=True), follow_redirects=False) our_user = User.query.filter_by(id="Fernando").first() our_user.mail_validation = True db.session.commit() client.post('/login', data=dict(username="******", password='******'), follow_redirects=False) response1 = client.get('/inside', follow_redirects=True) response2 = client.get('/logout', follow_redirects=True) response3 = client.get('/ver', follow_redirects=True) self.assertEqual(200, response1.status_code) self.assertEqual(200, response2.status_code) self.assertEqual(411, response3.status_code)
def test_logout_without_login(self): with app.test_client() as client: # Decorator login_required catch the function and return 'no_login.html', 411 self.assertEqual(411, client.get('/logout').status_code)
def test_login_then_logout(self): with app.test_client() as client: username, password = create_one_user(client) login_one_user(client, username, password) self.assertEqual(200, client.get('/logout').status_code)
def test_logout_without_login_then_inside(self): with app.test_client() as client: logout(client) # The decorator login_required catch the function and return 'no_login.html', 411 self.assertEqual(411, client.get('/inside').status_code)
def test_sign_in_several_users(self): with app.test_client() as client: # We create four users self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) self.assertEqual( client.post('/register', data=dict(username='******', email='*****@*****.**', password='******', confirm='Fernando', accept_tos=True), follow_redirects=True).status_code, 201) # We have to validate the all emails self.assertEqual( 200, client.get('/mail/validation/Fernando').status_code) self.assertEqual( 200, client.get('/mail/validation/Fernando2').status_code) self.assertEqual( 200, client.get('/mail/validation/Fernando3').status_code) self.assertEqual( 200, client.get('/mail/validation/Fernando4').status_code) # We log in all users self.assertEqual( 200, client.post('/login', data=dict(username='******', password='******'), follow_redirects=True).status_code) self.assertEqual( 200, client.post('/login', data=dict(username='******', password='******'), follow_redirects=True).status_code) self.assertEqual( 200, client.post('/login', data=dict(username='******', password='******'), follow_redirects=True).status_code) self.assertEqual( 200, client.post('/login', data=dict(username='******', password='******'), follow_redirects=True).status_code) # We check last session, should be last user who logged in with client.session_transaction() as sess: self.assertEqual("Fernando4", sess.get("username"))