예제 #1
0
    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'))
예제 #2
0
    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()
예제 #3
0
    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'))
예제 #4
0
    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)
예제 #5
0
 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)
예제 #6
0
    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'))
예제 #7
0
    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))
예제 #8
0
    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)
예제 #9
0
    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)
예제 #10
0
    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)
예제 #11
0
 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()
예제 #12
0
 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)
예제 #13
0
    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)
예제 #14
0
    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))
예제 #15
0
    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))
예제 #16
0
    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))
예제 #17
0
    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'))
예제 #18
0
    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'))
예제 #19
0
    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())
예제 #20
0
 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)
예제 #21
0
    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"))
예제 #22
0
    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)
예제 #23
0
    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'))
예제 #24
0
    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())
예제 #25
0
    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))
예제 #26
0
    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)
예제 #27
0
 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)
예제 #28
0
    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)
예제 #29
0
    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)
예제 #30
0
    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"))