diff --git a/app/main/views/manage_users.py b/app/main/views/manage_users.py index 399bc1ac2..dbe48ef32 100644 --- a/app/main/views/manage_users.py +++ b/app/main/views/manage_users.py @@ -48,8 +48,9 @@ def manage_users(service_id): @main.route("/services//users/invite", methods=['GET', 'POST']) +@main.route("/services//users/invite/", methods=['GET', 'POST']) @user_has_permissions('manage_service') -def invite_user(service_id): +def invite_user(service_id, user_id=None): if current_service.has_permission('broadcast'): form_class = BroadcastInviteUserForm @@ -62,6 +63,12 @@ def invite_user(service_id): folder_permissions=[f['id'] for f in current_service.all_template_folders] ) + if user_id: + user_to_invite = User.from_id(user_id) + form.email_address.data = user_to_invite.email_address + else: + user_to_invite = None + service_has_email_auth = current_service.has_permission('email_auth') if not service_has_email_auth: form.login_authentication.data = 'sms_auth' @@ -85,6 +92,7 @@ def invite_user(service_id): form=form, service_has_email_auth=service_has_email_auth, mobile_number=True, + user_to_invite=user_to_invite, ) diff --git a/app/templates/views/invite-user.html b/app/templates/views/invite-user.html index 36e037ee5..320e63fd9 100644 --- a/app/templates/views/invite-user.html +++ b/app/templates/views/invite-user.html @@ -10,18 +10,24 @@ {% block maincolumn_content %} {{ page_header( - 'Invite a team member', + 'Invite {}'.format(user_to_invite.name if user_to_invite else 'a team member') , back_link=url_for('main.manage_users', service_id=current_service.id) ) }} {% call form_wrapper() %} - {{ form.email_address( - param_extensions={ - "classes": "govuk-!-width-full" - }, - error_message_with_html=True - ) }} + {% if user_to_invite %} +

+ {{ user_to_invite.email_address }} +

+ {% else %} + {{ form.email_address( + param_extensions={ + "classes": "govuk-!-width-full" + }, + error_message_with_html=True + ) }} + {% endif %} {% include 'views/manage-users/permissions.html' %} diff --git a/tests/app/main/views/test_manage_users.py b/tests/app/main/views/test_manage_users.py index 70df70e08..46dc46806 100644 --- a/tests/app/main/views/test_manage_users.py +++ b/tests/app/main/views/test_manage_users.py @@ -806,6 +806,29 @@ def test_should_show_page_for_inviting_user( assert not page.find('div', class_='checkboxes-nested') +def test_should_show_page_for_inviting_user_with_email_prefilled( + client_request, + mock_get_template_folders, + fake_uuid, +): + page = client_request.get( + 'main.invite_user', + service_id=SERVICE_ONE_ID, + user_id=fake_uuid, + # We have the user’s name in the H1 but don’t want it duplicated + # in the page title + _test_page_title=False, + ) + + assert normalize_spaces(page.select_one('h1').text) == ( + 'Invite Test User' + ) + assert normalize_spaces(page.select_one('main .govuk-body').text) == ( + 'test@user.gov.uk' + ) + assert not page.select("input#email_address") or page.select("input[type=email]") + + def test_should_show_folder_permission_form_if_service_has_folder_permissions_enabled( client_request, mocker, @@ -877,6 +900,44 @@ def test_invite_user( []) +def test_invite_user_when_email_address_is_prefilled( + client_request, + active_user_with_permissions, + active_caseworking_user, + fake_uuid, + mocker, + sample_invite, + mock_get_template_folders, +): + mocker.patch('app.models.user.user_api_client.get_user', side_effect=[ + # First call is to get the current user + active_user_with_permissions, + # Second call gets the user to invite + active_caseworking_user, + ]) + mocker.patch('app.invite_api_client.create_invite', return_value=sample_invite) + client_request.post( + 'main.invite_user', + service_id=SERVICE_ONE_ID, + user_id=fake_uuid, + _data={ + # No posted email address + 'permissions_field': [ + 'send_messages', + ], + }, + ) + + app.invite_api_client.create_invite.assert_called_once_with( + active_user_with_permissions['id'], + SERVICE_ONE_ID, + active_caseworking_user['email_address'], + {'send_messages'}, + 'sms_auth', + [], + ) + + @pytest.mark.parametrize('auth_type', [ ('sms_auth'), ('email_auth')