Pythonnic способ проверить сброс пароля с колбой

Я пытаюсь протестировать функцию сброса пароля для моего веб-приложения, я использую тестирование с помощью фляги и опасно для создания токенов.

процесс имеет 2 функции просмотра, как описано здесь. Вот первая функция просмотра для отправки электронного письма со ссылкой сброса и токеном.

@auth.route('/reset', methods=['GET', 'POST'])
def reset_password_request():

    """
    for reseting user password
    """
    if request.method == 'POST':
        client_data = request.get_json()
        if client_data:
            client = Employee.query.filter_by(email=client_data['email']).first()
            if client:
                token = client.generate_password_change_token()
                res = build_mail(
                    sender="noreply@cae.scopex.be",
                    to=[client.email],
                    subject='Change PassWord',
                    template='mail/change_password',
                    employee=client,
                    token=token)

                code = send_mail_sendgrid(res)
                flash('An email with instructions to change your password has been sent to you.')
                if code == 202:
                    response = jsonify(
                        message="login successful. ",
                        redirect=url_for('auth.login'),
                        auth_token=token
                        )
                    response.status_code = 200
                    return response

После отправки токена сброса пароля пользователь получает его по почте и ссылка для сброса пароля здесь - маршрут для подтверждения запроса

@auth.route('/reset/<token>', methods=['GET', 'POST'])
def reset_password(token):

    """
    reset the password for a user with a valid token

    """
    if request.method == 'POST':
        client_data = request.get_json()
        if client_data:
            try:
                email = Employee.confirm_password_and_change(token)
                print '---------{}---------'.format(email)
                client = Employee.query.filter_by(email=email).first()
                if client:
                    client.password = client_data['password']
                    db.session.add(client)
                    db.session.commit()
                    flash('your password has been updated')
                    response = jsonify(
                        message="your password has been updated",
                        redirect=url_for('auth.login')
                        )
                    response.status_code = 200
                    return response
                else:
                    flash("email not find please register ", category="error")
                    response = jsonify(
                        message="email not find please register",
                        redirect=url_for('auth.login')
                        )
                    response.status_code = 405
                    return response
            except ValueError:
                flash("invalid token try again ", category="error")
                response = jsonify(
                    message="email not find please register",
                    redirect=url_for('auth.login')
                    )
                response.status_code = 405
                return response
        else:
            response = jsonify(
                message='An error occured',
                redirect=url_for('auth.login')
                )
            response.status_code = 400
            return response
    return render_template("auth/change_password.html", token=token)

Каков наилучший способ написания юнит-тестов для этой функции?

Вот что я пытаюсь, но не знаю, правильно ли это и питонно.

def test_can_change_passsword(self):
        """
        test if a user can change the password first by sending
        changing password request and then can reset the password
        with a given token
        """
        user_data = {
            'email': self.user.email,
            'password': '9874',
            }
        with self.client:
            response_one = self.client.post(
                url_for('auth.reset_password_request'),
                data=json.dumps(user_data),
                content_type='application/json')

            data = json.loads(response_one.get_data())
            token = data['auth_token']
            response_two = self.client.post(
                url_for('auth.reset_password', token=token),
                data=json.dumps(user_data),
                content_type='application/json')
            self.assert_status(response_two, 200)
            self.assert_status(response_one, 200)

0 ответов

Другие вопросы по тегам