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)