import pytest from flask import Response, url_for from notifications_python_client.errors import HTTPError import app from tests import user_json from tests.conftest import SERVICE_ONE_ID def test_should_render_forgot_password(client_request): client_request.logout() page = client_request.get('.forgot_password') assert 'We’ll send you an email to create a new password.' in page.text @pytest.mark.parametrize('email_address', [ 'test@user.gov.uk', 'someuser@notgovernment.com' ]) def test_should_redirect_to_password_reset_sent_for_valid_email( client_request, fake_uuid, email_address, mocker, ): client_request.logout() sample_user = user_json(email_address=email_address) mocker.patch('app.user_api_client.send_reset_password_url', return_value=None) page = client_request.post( '.forgot_password', _data={'email_address': sample_user['email_address']}, _expected_status=200, ) assert 'Click the link in the email to reset your password.' in page.text app.user_api_client.send_reset_password_url.assert_called_once_with(sample_user['email_address'], next_string=None) def test_forgot_password_sends_next_link_with_reset_password_email_request( client_request, fake_uuid, mocker, ): client_request.logout() sample_user = user_json(email_address='test@user.gov.uk') mocker.patch('app.user_api_client.send_reset_password_url', return_value=None) client_request.post_url( url_for('.forgot_password') + f"?next=/services/{SERVICE_ONE_ID}/templates", _data={'email_address': sample_user['email_address']}, _expected_status=200, ) app.user_api_client.send_reset_password_url.assert_called_once_with( sample_user['email_address'], next_string=f'/services/{SERVICE_ONE_ID}/templates' ) def test_should_redirect_to_password_reset_sent_for_missing_email( client_request, api_user_active, mocker, ): client_request.logout() mocker.patch('app.user_api_client.send_reset_password_url', side_effect=HTTPError(Response(status=404), 'Not found')) page = client_request.post( '.forgot_password', _data={'email_address': api_user_active['email_address']}, _expected_status=200, ) assert 'Click the link in the email to reset your password.' in page.text app.user_api_client.send_reset_password_url.assert_called_once_with( api_user_active['email_address'], next_string=None )