diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index 95a72cfe8..d892c18b5 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -19,6 +19,7 @@ from app import ( email_branding_client, inbound_number_client, letter_branding_client, + notification_api_client, organisations_client, service_api_client, user_api_client, @@ -403,18 +404,29 @@ def service_add_email_reply_to(service_id): form = ServiceReplyToEmailForm() first_email_address = current_service.count_email_reply_to_addresses == 0 if form.validate_on_submit(): - service_api_client.add_reply_to_email_address( - current_service.id, - email_address=form.email_address.data, - is_default=first_email_address if first_email_address else form.is_default.data - ) - return redirect(url_for('.service_email_reply_to', service_id=service_id)) + notification_id = service_api_client.verify_reply_to_email_address(form.email_address.data)["data"]["id"] + return redirect(url_for('.verify_reply_to_address', service_id=service_id, notification_id=notification_id)) + # service_api_client.add_reply_to_email_address( + # current_service.id, + # email_address=form.email_address.data, + # is_default=first_email_address if first_email_address else form.is_default.data + # ) + # return redirect(url_for('.service_email_reply_to', service_id=service_id)) return render_template( 'views/service-settings/email-reply-to/add.html', form=form, first_email_address=first_email_address) +@main.route("/services//service-settings/email-reply-to//verify", methods=['GET', 'POST']) +@login_required +@user_has_permissions('manage_service') +def verify_reply_to_address(service_id, notification_id): + return render_template( + 'views/service-settings/email-reply-to/verify.html' + ) + + @main.route( "/services//service-settings/email-reply-to//edit", methods=['GET', 'POST'], diff --git a/app/notify_client/service_api_client.py b/app/notify_client/service_api_client.py index 336c1c4f9..561982e82 100644 --- a/app/notify_client/service_api_client.py +++ b/app/notify_client/service_api_client.py @@ -386,6 +386,12 @@ class ServiceAPIClient(NotifyAdminAPIClient): ) ) + def verify_reply_to_email_address(self, email_address): + return self.post( + "/service/email-reply-to/verify", + data={"email": email_address} + ) + @cache.delete('service-{service_id}') def add_reply_to_email_address(self, service_id, email_address, is_default=False): return self.post( diff --git a/tests/app/main/views/test_service_settings.py b/tests/app/main/views/test_service_settings.py index ff0b62dfa..6d7832204 100644 --- a/tests/app/main/views/test_service_settings.py +++ b/tests/app/main/views/test_service_settings.py @@ -2029,6 +2029,44 @@ def test_add_reply_to_email_address( ) +@pytest.mark.parametrize('fixture, data, api_default_args', [ + (no_reply_to_email_addresses, {}, True), + (multiple_reply_to_email_addresses, {}, False), + (multiple_reply_to_email_addresses, {"is_default": "y"}, True) +]) +def test_add_reply_to_email_address_sends_test_notification( + mocker, client_request, fixture, data, api_default_args +): + fixture(mocker) + data['email_address'] = "test@example.com" + mock_verify = mocker.patch('app.service_api_client.verify_reply_to_email_address', return_value={"id": "123"}) + client_request.post( + 'main.service_add_email_reply_to', + service_id=SERVICE_ONE_ID, + _data=data, + _expected_status=302, + _expected_redirect=url_for( + 'main.verify_reply_to_address', + service_id=SERVICE_ONE_ID, + notification_id="123", + _external=True, + ) + ) + mock_verify.assert_called_once_with("test@example.com") + + +def test_add_reply_to_email_address_waiting_page(): + pass + + +def test_add_reply_to_email_address_success(): + pass + + +def test_add_reply_to_email_address_failure(): + pass + + @pytest.mark.parametrize('fixture, data, api_default_args', [ (no_letter_contact_blocks, {}, True), (multiple_letter_contact_blocks, {}, False),