diff --git a/app/main/views/send.py b/app/main/views/send.py index 418446f52..61e0c0083 100644 --- a/app/main/views/send.py +++ b/app/main/views/send.py @@ -561,24 +561,47 @@ def _check_messages(service_id, template_id, upload_id, preview_row, **kwargs): ) if request.args.get("from_test"): - # TODO: may not be required after letters code removed - back_link = url_for( - "main.send_one_off", service_id=service_id, template_id=template.id - ) - back_link_from_preview = url_for( - "main.send_one_off", service_id=service_id, template_id=template.id - ) + back_link = { + "href": { + "url": url_for( + "main.send_one_off", service_id=service_id, template_id=template.id + ), + "text": "Back to message personalization" + }, + "html": "Back to message personalization" + } + back_link_from_preview = { + "href": { + "url": url_for( + "main.send_one_off", service_id=service_id, template_id=template.id + ), + "text": "Back to message personalization" + }, + "html": "Back to message personalization" + } choose_time_form = None else: - back_link = url_for( - "main.send_messages", service_id=service_id, template_id=template.id - ) - back_link_from_preview = url_for( - "main.check_messages", - service_id=service_id, - template_id=template.id, - upload_id=upload_id, - ) + back_link = { + "href": { + "url": url_for( + "main.send_messages", service_id=service_id, template_id=template.id + ), + "text": "Back to upload a file" + }, + "html": "Back to upload a file" + } + back_link_from_preview = { + "href": { + "url": url_for( + "main.check_messages", + service_id=service_id, + template_id=template.id, + upload_id=upload_id, + ), + "text": "Back to check messages" + }, + "html": "Back to check messages" + } choose_time_form = ChooseTimeForm() if preview_row < 2: @@ -756,31 +779,60 @@ def get_back_link( preview=False, ): if preview: - return url_for( - "main.check_notification", - service_id=service_id, - template_id=template.id, - ) + return { + "href": { + "url": url_for( + "main.check_notification", + service_id=service_id, + template_id=template.id, + ), + "text": "Back to select delivery time" + }, + "html": "Back to select delivery time" + } if step_index == 0: if should_skip_template_page(template._template): - return url_for( - ".choose_template", - service_id=service_id, - ) + return { + "href": { + "url": url_for( + ".choose_template", + service_id=service_id, + ), + "text": "Back to all templates" + }, + "html": "Back to all templates" + } else: - return url_for( - ".view_template", + return { + "href": { + "url": url_for( + ".view_template", + service_id=service_id, + template_id=template.id, + ), + "text": "Back to confirm your template" + }, + "html": "Back to confirm your template" + } + + # fallback for other steps + back_to_text = ( + "Back to select recipients" if step_index == 1 else "Back to message personalization" + ) + + return { + "href": { + "url": url_for( + "main.send_one_off_step", service_id=service_id, template_id=template.id, - ) - - return url_for( - "main.send_one_off_step", - service_id=service_id, - template_id=template.id, - step_index=step_index - 1, - ) + step_index=step_index - 1, + ), + "text": back_to_text + }, + "html": back_to_text + } def get_skip_link(step_index, template): @@ -880,7 +932,7 @@ def _check_notification(service_id, template_id, exception=None, **kwargs): if (not session.get("recipient")) or not all_placeholders_in_session( template.placeholders ): - raise PermanentRedirect(back_link) + raise PermanentRedirect(back_link["href"]["url"]) template.values = get_recipient_and_placeholders_from_session( template.template_type diff --git a/app/main/views/tour.py b/app/main/views/tour.py index 0e4b5f344..e253167c8 100644 --- a/app/main/views/tour.py +++ b/app/main/views/tour.py @@ -139,14 +139,30 @@ def tour_step(service_id, template_id, step_index): def _get_tour_step_back_link(service_id, template_id, step_index): if step_index == 1: - return url_for(".begin_tour", service_id=service_id, template_id=template_id) - - return url_for( - ".tour_step", - service_id=service_id, - template_id=template_id, - step_index=step_index - 1, - ) + return { + "href": { + "url": url_for( + 'main.begin_tour', + service_id=service_id, + template_id=template_id + ), + "text": "Back to tour start" + }, + "html": "Back to tour start" + } + else: + return { + "href": { + "url": url_for( + "main.tour_step", + service_id=service_id, + template_id=template_id, + step_index=step_index - 1, + ), + "text": "Back to previous step", + }, + "html": "Back to previous step", + } @main.route( @@ -183,12 +199,18 @@ def check_tour_notification(service_id, template_id): ) ) - back_link = url_for( - ".tour_step", - service_id=current_service.id, - template_id=template_id, - step_index=len(placeholders), - ) + back_link = { + "href": { + "url": url_for( + "main.tour_step", + service_id=current_service.id, + template_id=template_id, + step_index=len(placeholders), + ), + "text": "Back to previous step" + }, + "html": "Back to previous step" + } template.values = get_recipient_and_placeholders_from_session( template.template_type diff --git a/app/templates/components/components/back-link/macro.njk b/app/templates/components/components/back-link/macro.njk index d232c1b2b..e52d92fff 100644 --- a/app/templates/components/components/back-link/macro.njk +++ b/app/templates/components/components/back-link/macro.njk @@ -1,3 +1,3 @@ {% macro usaBackLink(params) %} - {%- include "./template.njk" -%} + {%- include "./template.njk" with context %} {% endmacro %} diff --git a/app/templates/components/components/back-link/template.njk b/app/templates/components/components/back-link/template.njk index 340b3ca22..84344ab35 100644 --- a/app/templates/components/components/back-link/template.njk +++ b/app/templates/components/components/back-link/template.njk @@ -1,4 +1,6 @@ diff --git a/app/templates/views/check/ok.html b/app/templates/views/check/ok.html index 58e31a06a..6da7546e2 100644 --- a/app/templates/views/check/ok.html +++ b/app/templates/views/check/ok.html @@ -12,7 +12,7 @@ {% block backLink %} - {{ usaBackLink({ "href": back_link }) }} + {{ usaBackLink(back_link) }} {% endblock %} {% block maincolumn_content %} diff --git a/app/templates/views/check/preview.html b/app/templates/views/check/preview.html index 091ba345f..8a1e6189d 100644 --- a/app/templates/views/check/preview.html +++ b/app/templates/views/check/preview.html @@ -13,7 +13,7 @@ {% block backLink %} - {{ usaBackLink({ "href": back_link_from_preview }) }} + {{ usaBackLink(back_link_from_preview) }} {% endblock %} {% block maincolumn_content %} diff --git a/app/templates/views/edit-sms-template.html b/app/templates/views/edit-sms-template.html index 87dba61e4..8dc8448a1 100644 --- a/app/templates/views/edit-sms-template.html +++ b/app/templates/views/edit-sms-template.html @@ -11,7 +11,8 @@ {% block backLink %} {{ usaBackLink({ - "href": url_for('main.choose_template', service_id=current_service.id, template_folder_id=template_folder_id) if template_folder_id else url_for('main.choose_template', service_id=current_service.id) + "href": url_for('main.choose_template', service_id=current_service.id, template_folder_id=template_folder_id) if template_folder_id else url_for('main.choose_template', service_id=current_service.id), + "html": "Back to all templates" }) }} {% endblock %} diff --git a/app/templates/views/notifications/check.html b/app/templates/views/notifications/check.html index 8646d1b7f..6566c395c 100644 --- a/app/templates/views/notifications/check.html +++ b/app/templates/views/notifications/check.html @@ -9,7 +9,7 @@ {% endblock %} {% block backLink %} - {{ usaBackLink({ "href": back_link }) }} + {{ usaBackLink(back_link) }} {% endblock %} {% block maincolumn_content %} diff --git a/app/templates/views/notifications/preview.html b/app/templates/views/notifications/preview.html index 536288d9a..c870ba539 100644 --- a/app/templates/views/notifications/preview.html +++ b/app/templates/views/notifications/preview.html @@ -16,9 +16,9 @@ {% block backLink %} {% if help %} - {{ usaBackLink({ "href": back_link }) }} + {{ usaBackLink(back_link) }} {% else %} - {{ usaBackLink({ "href": back_link_from_preview }) }} + {{ usaBackLink(back_link_from_preview) }} {% endif %} {% endblock %} diff --git a/app/templates/views/send-test.html b/app/templates/views/send-test.html index d17a5484d..cba10ac7c 100644 --- a/app/templates/views/send-test.html +++ b/app/templates/views/send-test.html @@ -10,7 +10,7 @@ {% endblock %} {% block backLink %} - {{ usaBackLink({ "href": back_link }) }} + {{ usaBackLink(back_link) }} {% endblock %} diff --git a/app/templates/views/send.html b/app/templates/views/send.html index f7fcbd0cb..765c06d4d 100644 --- a/app/templates/views/send.html +++ b/app/templates/views/send.html @@ -13,7 +13,8 @@ {% block backLink %} {{ usaBackLink({ - "href": url_for('main.send_one_off_step', service_id=current_service.id, template_id=template.id, step_index=0) + "href": url_for('main.send_one_off_step', service_id=current_service.id, template_id=template.id, step_index=0), + "html": "Back to select recipients" }) }} {% endblock %} diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py index ac81050ad..a18909070 100644 --- a/tests/app/main/views/test_send.py +++ b/tests/app/main/views/test_send.py @@ -1449,7 +1449,10 @@ def test_send_one_off_offers_link_to_upload( back_link = page.select_one(".usa-back-link") link = page.select_one("form a") - assert back_link.text.strip() == "Back" + assert back_link.text.strip() in { + "Back to all templates", + "Back to confirm your template" + } assert link.text.strip() == "Upload a list of phone numbers" assert link["href"] == url_for( @@ -1519,8 +1522,6 @@ def test_link_to_upload_not_offered_when_entering_personalisation( step_index=1, ) - # print(page.prettify()) # Print the full HTML response - # We’re entering personalization assert page.select_one("input[type=text]")["name"] == "placeholder_value" assert page.select_one("label").text.strip() == "name" @@ -2284,9 +2285,11 @@ def test_check_messages_back_link( **extra_args, ) - assert (page.find_all("a", {"class": "usa-back-link"})[0]["href"]) == expected_url( - service_id=SERVICE_ONE_ID, template_id=fake_uuid - ) + actual_href = page.find_all("a", {"class": "usa-back-link"})[0]["href"] + expected_href = expected_url(service_id=SERVICE_ONE_ID, template_id=fake_uuid) + + assert actual_href != "#", "Back link href fell back to '#' — missing correct back_link in view" + assert actual_href == expected_href @pytest.mark.parametrize( @@ -2714,8 +2717,15 @@ def test_preview_notification_shows_preview( template_id=fake_uuid, _expected_status=200, ) + assert page.h1.text.strip() == "Preview for sending" - assert (page.find_all("a", {"class": "usa-back-link"})[0]["href"]) == url_for( + back_link = page.find_all("a", {"class": "usa-back-link"})[0] + assert back_link is not None + + # The real rendered attribute + href = back_link["href"] + + assert href == url_for( "main.check_notification", service_id=service_one["id"], template_id=fake_uuid,