Exemplo n.º 1
0
    def test_user_add_insert_one_week_password(self):
        """Test para registro de un usuario con contraseña debil"""
        user_data = {
            'email': '*****@*****.**',
            'password': '******',
        }
        new_user_data = {
            'username': '******',
            'email': '*****@*****.**',
            'password': '******',
            'confirm': 'qwerty'
        }
        create_user(user_data['email'], user_data['password'], True)
        login_url = url_for('main.login')
        user_add_url = (url_for('main.user_add'))
        expected_error_msg = 'La contraseña es muy corta, la longitud mínima ' \
                             'es de 8 caracteres'
        with current_app.app_context():
            with self.client as c:
                # login de usuario
                c.post(login_url, data=user_data, follow_redirects=True)

                # registro de usuario
                response = c.post(user_add_url,
                                  data=new_user_data,
                                  follow_redirects=True)
                self.assertStatus(response, 200)
                self.assertEqual('text/html; charset=utf-8',
                                 response.content_type)
                self.assert_template_used("forms/register.html")
                self.assertIn(expected_error_msg,
                              response.data.decode('utf-8'))
Exemplo n.º 2
0
    def test_user_add_insert_email_duplicated(self):
        """Test para registro de un usuario"""
        user_data = {
            'email': '*****@*****.**',
            'password': '******',
        }
        new_user_data = {
            'username': '******',
            'email': '*****@*****.**',
            'password': '******',
            'confirm': 'F00barbaz$'
        }
        create_user(user_data['email'], user_data['password'], True)
        login_url = url_for('main.login')
        user_add_url = (url_for('main.user_add'))
        expected_error_msg = 'El correo electrónico ya esta registrado'
        with current_app.app_context():
            with self.client as c:
                # login de usuario
                c.post(login_url, data=user_data, follow_redirects=True)

                # registro de usuario
                response = c.post(user_add_url,
                                  data=new_user_data,
                                  follow_redirects=True)
                self.assertStatus(response, 200)
                self.assertEqual('text/html; charset=utf-8',
                                 response.content_type)
                self.assert_template_used("forms/register.html")
                self.assertIn(expected_error_msg,
                              response.data.decode('utf-8'))
Exemplo n.º 3
0
 def test_user_add(self):
     """Test para la vista user_add"""
     user_data = {
         'email': '*****@*****.**',
         'password': '******',
     }
     create_user(user_data['email'], user_data['password'], True)
     login_url = url_for('main.login')
     user_add_url = (url_for('main.user_add'))
     with current_app.app_context():
         with self.client as c:
             # login de usuario
             login_response = c.post(login_url,
                                     data=user_data,
                                     follow_redirects=True)
             self.assertStatus(login_response, 200)
             # vista user_add
             response = c.get(user_add_url)
             self.assertStatus(response, 200)
             self.assertEqual('text/html; charset=utf-8',
                              response.content_type)
             self.assertEqual([i.url for i in current_breadcrumbs],
                              ['/', '/usuarios', user_add_url])
             self.assert_template_used("forms/register.html")
             context_form = self.get_context_variable('form')
             self.assertIsInstance(context_form, forms.RegistrationForm)
Exemplo n.º 4
0
    def test_user_add_insert_one(self):
        """Test para registro de un usuario"""
        user_data = {
            'email': '*****@*****.**',
            'password': '******',
        }
        new_user_data = {
            'username': '******',
            'email': '*****@*****.**',
            'password': '******',
            'confirm': 'F00barbaz$'
        }
        create_user(user_data['email'], user_data['password'], True)
        login_url = url_for('main.login')
        user_add_url = (url_for('main.user_add'))
        expected_msg = 'Se envío un correo de confirmación a: %s' % new_user_data[
            'email']
        with current_app.app_context():
            with self.client as c:
                # login de usuario
                c.post(login_url, data=user_data, follow_redirects=True)

                # registro de usuario
                response = c.post(user_add_url,
                                  data=new_user_data,
                                  follow_redirects=True)
                self.assertStatus(response, 200)
                self.assertEqual('text/html; charset=utf-8',
                                 response.content_type)
                self.assert_template_used("forms/register.html")
                self.assertIn(expected_msg, response.data.decode('utf-8'))
                user = User.get_by_email(new_user_data['email'])
                self.assertIsInstance(user, User)
Exemplo n.º 5
0
    def test_reset_with_valid_token_update_ok(self):
        """Test de recuperación de contraseña"""
        user_data = {
            'email': '*****@*****.**',
            'password': '******',
        }
        create_user(user_data['email'], user_data['password'], True)
        reset_url = url_for('main.reset')

        with current_app.app_context():
            with self.client as c:
                with mail.record_messages() as outbox:
                    c.post(reset_url, data=user_data, follow_redirects=True)
                    # Obtenemos url del correo
                    email_msg = outbox[0]
                    links_found = url_pattern.findall(email_msg.html)
                    self.assertGreaterEqual(1, len(links_found))
                    reset_url_with_token = [
                        url for url in links_found if reset_url in url
                    ]
                    self.assertEqual(1, len(reset_url_with_token))
                    reset_url_with_token = reset_url_with_token[0]
                    # Llamamos a la vista reset_with_token con la contraseña
                    new_password = '******'
                    response = c.post(reset_url_with_token,
                                      data={
                                          'password': new_password,
                                          'confirm': new_password
                                      },
                                      follow_redirects=True)
                    self.assertStatus(response, 200)
                    self.assertTemplateUsed('auth/login.html')
                    user = User.get_by_email(user_data['email'])
                    self.assertTrue(user.check_password_hash(new_password))
Exemplo n.º 6
0
 def test_user_detail(self):
     """Test para la vista user_detail"""
     user_data = {
         'email': '*****@*****.**',
         'password': '******',
     }
     create_user(user_data['email'], user_data['password'], True)
     login_url = url_for('main.login')
     with current_app.app_context():
         with self.client as c:
             # login de usuario
             login_response = c.post(login_url,
                                     data=user_data,
                                     follow_redirects=True)
             self.assertStatus(login_response, 200)
             # vista user_detail
             user = User.get_by_email(user_data['email'])
             user_detail_url = url_for('main.user_detail', user_id=user.id)
             response = c.get(user_detail_url)
             self.assertStatus(response, 200)
             self.assertEqual('text/html; charset=utf-8',
                              response.content_type)
             self.assertEqual([i.url for i in current_breadcrumbs],
                              ['/', '/usuarios', user_detail_url])
             self.assert_template_used("main/user.html")
Exemplo n.º 7
0
    def test_reset_with_valid_token(self):
        """Test de las vista reset_with_token"""
        user_data = {
            'email': '*****@*****.**',
            'password': '******',
        }
        create_user(user_data['email'], user_data['password'], True)
        reset_url = url_for('main.reset')

        with current_app.app_context():
            with self.client as c:
                with mail.record_messages() as outbox:
                    c.post(reset_url, data=user_data, follow_redirects=True)
                    # Obtenemos url del correo
                    email_msg = outbox[0]
                    links_found = url_pattern.findall(email_msg.html)
                    self.assertGreaterEqual(1, len(links_found))
                    reset_url_with_token = [
                        url for url in links_found if reset_url in url
                    ]
                    self.assertEqual(1, len(reset_url_with_token))
                    reset_url_with_token = reset_url_with_token[0]
                    # Llamamos a la vista reset_with_token
                    response = c.get(reset_url_with_token)
                    self.assertStatus(response, 200)
                    self.assertTemplateUsed('auth/reset_with_token.html')
                    context_form = self.get_context_variable('form')
                    self.assertIsInstance(context_form, forms.PasswordForm)
Exemplo n.º 8
0
 def test_reset_registered_user_send_email_error(self):
     """Test de error en envío de coreo de recuperación de contraseña"""
     user_data = {
         'email': '*****@*****.**',
         'password': '******',
     }
     create_user(user_data['email'], user_data['password'], True)
     reset_url = url_for('main.reset')
     expected_error_msg = 'Ocurrió un problema al enviar el correo con ' \
                          'las instrucciones de recuperación de ' \
                          'contraseña a la dirección: %s' % user_data['email']
     with current_app.app_context():
         with self.client as c:
             with patch('biblat_manager.webapp.utils'
                        '.get_timed_serializer') as mock:
                 mock.return_value = URLSafeTimedSerializer(None)
                 response = c.post(reset_url,
                                   data=user_data,
                                   follow_redirects=True)
                 self.assertStatus(response, 200)
                 self.assertEqual('text/html; charset=utf-8',
                                  response.content_type)
                 self.assert_template_used("auth/login.html")
                 self.assertIn(expected_error_msg,
                               response.data.decode('utf-8'))
Exemplo n.º 9
0
 def test_reset_registered_user(self):
     """Test de recuperación con email no registrado"""
     user_data = {
         'email': '*****@*****.**',
         'password': '******',
     }
     create_user(user_data['email'], user_data['password'], True)
     reset_url = url_for('main.reset')
     expected_msg = 'Se enviaron instrucciones para recuperar su ' \
                    'contraseña al correo: %s' % user_data['email']
     expected_email = {
         'subject': 'Instrucciones para recuperar su contraseña',
         'recipients': [user_data['email']],
         'reset_link': url_for('main.reset')
     }
     with current_app.app_context():
         with self.client as c:
             with mail.record_messages() as outbox:
                 response = c.post(reset_url,
                                   data=user_data,
                                   follow_redirects=True)
                 self.assertStatus(response, 200)
                 self.assertEqual('text/html; charset=utf-8',
                                  response.content_type)
                 self.assert_template_used("auth/login.html")
                 self.assertIn(expected_msg, response.data.decode('utf-8'))
                 # Verificar envío de correo
                 email_msg = outbox[0]
                 self.assertEqual(1, len(outbox))
                 self.assertEqual(expected_email['subject'],
                                  email_msg.subject)
                 self.assertEqual(expected_email['recipients'],
                                  email_msg.recipients)
                 self.assertIn(expected_email['reset_link'], email_msg.html)
Exemplo n.º 10
0
    def test_user_add_insert_one_with_confirmation_email(self):
        """Test para registro de un usuario con confirmación de correo"""
        user_data = {
            'email': '*****@*****.**',
            'password': '******',
        }
        new_user_data = {
            'username': '******',
            'email': '*****@*****.**',
            'password': '******',
            'confirm': 'F00barbaz$'
        }
        create_user(user_data['email'], user_data['password'], True)
        login_url = url_for('main.login')
        logout_url = url_for('main.logout')
        user_add_url = (url_for('main.user_add'))
        expected_email = {
            'subject': 'Confirmación de correo electrónico',
            'recipients': [new_user_data['email']],
        }
        with current_app.app_context():
            with self.client as c:
                with mail.record_messages() as outbox:
                    # login de usuario
                    c.post(login_url, data=user_data, follow_redirects=True)

                    # registro de usuario
                    c.post(user_add_url,
                           data=new_user_data,
                           follow_redirects=True)
                    # logout de usuario
                    c.get(logout_url)
                    # confirmación de correo electrónico
                    email_msg = outbox[0]
                    self.assertEqual(1, len(outbox))
                    self.assertEqual(expected_email['subject'],
                                     email_msg.subject)
                    self.assertEqual(expected_email['recipients'],
                                     email_msg.recipients)
                    links_found = url_pattern.findall(email_msg.html)
                    self.assertGreaterEqual(1, len(links_found))
                    confirm_url_with_token = [
                        url for url in links_found if '/user/confirm/' in url
                    ]
                    self.assertEqual(1, len(confirm_url_with_token))
                    confirm_url_with_token = confirm_url_with_token[0]
                    # activamos correo electrónico
                    response = c.get(confirm_url_with_token,
                                     follow_redirects=True)
                    self.assertStatus(response, 200)
                    self.assertEqual('text/html; charset=utf-8',
                                     response.content_type)
                    self.assert_template_used("auth/login.html")
                    user = User.get_by_email(new_user_data['email'])
                    self.assertTrue(user.email_confirmed)
Exemplo n.º 11
0
 def test_reset_unverified_email(self):
     """Test de recuperación con email no registrado"""
     user_data = {
         'email': '*****@*****.**',
         'password': '******',
     }
     create_user(user_data['email'], user_data['password'], False)
     reset_url = url_for('main.reset')
     with current_app.app_context():
         with self.client as c:
             response = c.post(reset_url,
                               data=user_data,
                               follow_redirects=True)
             self.assertStatus(response, 200)
             self.assertEqual('text/html; charset=utf-8',
                              response.content_type)
             self.assert_template_used("auth/unconfirmed_email.html")
Exemplo n.º 12
0
    def test_user_edit_update_raise_value_error(self):
        """Test para actualizar un usuario"""
        user_data = {
            'email': '*****@*****.**',
            'password': '******',
        }
        create_user(user_data['email'], user_data['password'], True)
        user = User.get_by_email(user_data['email'])
        login_url = url_for('main.login')

        with current_app.app_context():
            with self.client as c:
                with patch('biblat_manager.webapp.models.User'
                           '.send_confirmation_email') as mock:
                    mock.side_effect = ValueError(
                        'recipient_email es inválido!')
                    # login de usuario
                    c.post(login_url, data=user_data, follow_redirects=True)

                    # edición de usuario
                    user_data_update = {}
                    user_data_update.update(user_data)
                    user_data_update.update({
                        'email': '*****@*****.**',
                        'username': '******',
                        'password': '******',
                        'confirm': 'Quxquuxc0rge$'
                    })
                    user_edit_url = url_for('main.user_edit', user_id=user.id)
                    response = c.post(user_edit_url,
                                      data=user_data_update,
                                      follow_redirects=True)
                    self.assertRaises(ValueError)
                    self.assertStatus(response, 200)
                    self.assertEqual('text/html; charset=utf-8',
                                     response.content_type)
                    self.assert_template_used("forms/register.html")
                    expected_error_msg = 'Ocurrió un error en el envío del ' \
                                         'correo de confirmación  a: %s' % \
                                         user_data_update['email']
                    self.assertIn(expected_error_msg,
                                  response.data.decode('utf-8'))
                    updated_user = User.get_by_id(user.id)
                    self.assertEqual(user_data_update['email'],
                                     updated_user.email)
Exemplo n.º 13
0
    def test_login_registered_user(self):
        """Test de login de usuario registrado"""
        user_data = {
            'email': '*****@*****.**',
            'password': '******',
        }
        create_user(user_data['email'], user_data['password'], True)
        login_url = url_for('main.login')

        with current_app.app_context():
            with self.client as c:
                # login de usuario
                response = c.post(login_url,
                                  data=user_data,
                                  follow_redirects=True)
                self.assertStatus(response, 200)
                self.assertEqual('text/html; charset=utf-8',
                                 response.content_type)
                self.assert_template_used("main/index.html")
 def test_home_page(self):
     """Test de la página principal"""
     admin_user = {
         'email': '*****@*****.**',
         'password': '******',
     }
     create_user(admin_user['email'], admin_user['password'], True)
     login_url = url_for('main.login')
     with current_app.app_context():
         with self.client as c:
             # login de usuario admin
             login_response = c.post(login_url,
                                     data=admin_user,
                                     follow_redirects=True)
             self.assertStatus(login_response, 200)
             response = c.get(url_for('main.index'))
             self.assertStatus(response, 200)
             self.assertEqual('text/html; charset=utf-8',
                              response.content_type)
             self.assertEqual([i.url for i in current_breadcrumbs], ['/'])
             self.assert_template_used("main/index.html")
Exemplo n.º 15
0
    def test_user_add_insert_one_raise_value_error(self):
        """Test para registro de un usuario"""
        user_data = {
            'email': '*****@*****.**',
            'password': '******',
        }
        new_user_data = {
            'username': '******',
            'email': '*****@*****.**',
            'password': '******',
            'confirm': 'F00barbaz$'
        }
        create_user(user_data['email'], user_data['password'], True)
        login_url = url_for('main.login')
        user_add_url = (url_for('main.user_add'))
        expected_error_msg = 'Ocurrió un error en el envío del correo de ' \
                             'confirmación  a: %s' % new_user_data['email']
        with current_app.app_context():
            with self.client as c:
                with patch('biblat_manager.webapp.models.User'
                           '.send_confirmation_email') as mock:
                    mock.side_effect = ValueError(
                        'recipient_email es inválido!')
                    # login de usuario
                    c.post(login_url, data=user_data, follow_redirects=True)

                    # registro de usuario
                    response = c.post(user_add_url,
                                      data=new_user_data,
                                      follow_redirects=True)
                    self.assertRaises(ValueError)
                    self.assertStatus(response, 200)
                    self.assertEqual('text/html; charset=utf-8',
                                     response.content_type)
                    self.assert_template_used("forms/register.html")
                    self.assertIn(expected_error_msg,
                                  response.data.decode('utf-8'))
                    user = User.get_by_email(new_user_data['email'])
                    self.assertIsInstance(user, User)
Exemplo n.º 16
0
    def test_user_edit_duplicated_email(self):
        """Test para registro de un usuario"""
        user_data = {
            'email': '*****@*****.**',
            'password': '******',
        }

        create_user(user_data['email'], user_data['password'], True)
        create_user('*****@*****.**', 'F00barbaz$', True)
        user = User.get_by_email(user_data['email'])
        login_url = url_for('main.login')

        expected_error_msg = 'El correo electrónico ya esta registrado'
        with current_app.app_context():
            with self.client as c:
                # login de usuario
                c.post(login_url, data=user_data, follow_redirects=True)

                # edición de usuario
                user_data_update = {}
                user_data_update.update(user_data)
                user_data_update.update({
                    'email': '*****@*****.**',
                    'username': '******',
                    'password': '******',
                    'confirm': 'Quxquuxc0rge$'
                })
                user_edit_url = url_for('main.user_edit', user_id=user.id)
                response = c.post(user_edit_url,
                                  data=user_data_update,
                                  follow_redirects=True)
                self.assertStatus(response, 200)
                self.assertEqual('text/html; charset=utf-8',
                                 response.content_type)
                self.assert_template_used("forms/register.html")
                self.assertIn(expected_error_msg,
                              response.data.decode('utf-8'))
                updated_user = User.get_by_id(user.id)
                self.assertEqual(user_data['email'], updated_user.email)
Exemplo n.º 17
0
    def test_login_unverified_email(self):
        """Test de login de usuario con correo no verificado"""
        user_data = {
            'email': '*****@*****.**',
            'password': '******',
        }
        create_user(user_data['email'], user_data['password'], False)
        login_url = url_for('main.login')

        with current_app.app_context():
            with self.client as c:
                # login de usuario
                response = c.post(login_url,
                                  data=user_data,
                                  follow_redirects=True)
                expected_errors_msg = 'Correo electrónico no verificado'
                self.assertStatus(response, 200)
                self.assertEqual('text/html; charset=utf-8',
                                 response.content_type)
                self.assertIn(expected_errors_msg,
                              response.data.decode('utf-8'))
                self.assert_template_used("auth/login.html")
Exemplo n.º 18
0
def create_superuser():
    """
    Crea un nuevo usuario a partir de los datos insertados en la terminal
    Para crear un nuevo usuario se necesita:
    - email (debe ser válido y único);
    - contraseña
    - si el usuario no es confirmado debe verificar su cuenta por correo
    """
    user_email = None
    user_password = None

    while user_email is None:
        user_email = input('Correo electrónico: ').strip()
        if user_email == '':
            user_email = None
            print('El correo electrónico no puede ser nulo')
        else:
            if not utils.check_valid_email(user_email):
                user_email = None
                print('Debe introducir un correo electrónico válido!')
            elif models.User.get_by_email(user_email):
                user_email = None
                print('El correo electrónico ya esta registrado!')

    while user_password is None:
        user_password = getpass.getpass('Contraseña: ').strip()
        if user_password == '':
            user_password = None
            print('La contraseña no puede ser nula')

    email_confirmed = input('\nCorreo electrónico confirmado? [y/n]: ').strip()
    if email_confirmed.upper() in ('Y', 'YES'):
        email_confirmed = True
    else:
        print('Debe enviar el correo de confirmación desde la interfaz web')
        email_confirmed = False

    user = controllers.create_user(user_email, user_password, email_confirmed)
    if user.id:
        print('Nuevo usuario creado con éxito!')