diff --git a/app/assets/stylesheets/govuk-frontend/overrides.scss b/app/assets/stylesheets/govuk-frontend/overrides.scss
index a8975fb4c..5e2ae2ac1 100644
--- a/app/assets/stylesheets/govuk-frontend/overrides.scss
+++ b/app/assets/stylesheets/govuk-frontend/overrides.scss
@@ -46,3 +46,9 @@
.govuk-button {
margin-bottom: 0px;
}
+
+// Allow legends that contain the h1 to go full width
+.govuk-fieldset__legend.govuk-grid-column-full {
+ // $class parameter is deprecated but needed for v2 of GOVUK Frontend. Remove for v3 & above
+ @include govuk-grid-column(full, $class: false);
+}
diff --git a/app/main/forms.py b/app/main/forms.py
index c5df51fd1..c86005f39 100644
--- a/app/main/forms.py
+++ b/app/main/forms.py
@@ -2011,7 +2011,7 @@ class SetSenderForm(StripWhitespaceForm):
self.sender.choices = kwargs['sender_choices']
self.sender.label.text = kwargs['sender_label']
- sender = RadioField()
+ sender = GovukRadiosField()
class SetTemplateSenderForm(StripWhitespaceForm):
diff --git a/app/main/views/send.py b/app/main/views/send.py
index 0ab0e203c..20d1deddc 100644
--- a/app/main/views/send.py
+++ b/app/main/views/send.py
@@ -234,6 +234,15 @@ def set_sender(service_id, template_id):
if sender_context.get('default_and_receives', None):
option_hints = {sender_context['default_and_receives']: '(Default and receives replies)'}
+ # extend all radios that need hint text
+ form.sender.param_extensions = {'items': []}
+ for item_id, _item_value in form.sender.choices:
+ if item_id in option_hints:
+ extensions = {'hint': {'text': option_hints[item_id]}}
+ else:
+ extensions = {} # if no extensions needed, send an empty dict to preserve order of items
+ form.sender.param_extensions['items'].append(extensions)
+
if form.validate_on_submit():
session['sender_id'] = form.sender.data
return redirect(url_for('.send_one_off',
diff --git a/app/templates/views/templates/set-sender.html b/app/templates/views/templates/set-sender.html
index c535bd2e7..8988ef6f3 100644
--- a/app/templates/views/templates/set-sender.html
+++ b/app/templates/views/templates/set-sender.html
@@ -3,28 +3,32 @@
{% from "components/page-header.html" import page_header %}
{% from "components/page-footer.html" import page_footer %}
{% from "components/form.html" import form_wrapper %}
+{% from "components/back-link/macro.njk" import govukBackLink %}
{% block service_page_title %}
- {{sender_context['title']}}
+ {{ sender_context.title }}
{% endblock %}
{% block maincolumn_content %}
- {{ page_header(
- sender_context.title,
- back_link=url_for('.view_template', service_id=current_service.id, template_id=template_id)
- ) }}
+ {{ govukBackLink({ "href": url_for('.view_template', service_id=current_service.id, template_id=template_id) }) }}
-
-
- {% call form_wrapper() %}
- {{ radios(
- form.sender,
- option_hints=option_hints,
- hide_legend=True
- ) }}
+
+ {% call form_wrapper() %}
+ {{ form.sender(param_extensions={
+ 'fieldset': {
+ 'legend': {
+ 'isPageHeading': True,
+ 'text': sender_context.title,
+ 'classes': 'govuk-fieldset__legend--l govuk-grid-column-full'
+ }
+ },
+ 'classes': 'govuk-grid-column-three-quarters'
+ }) }}
+
{{ page_footer('Continue') }}
- {% endcall %}
+
+ {% endcall %}
diff --git a/tests/app/main/views/test_send.py b/tests/app/main/views/test_send.py
index 6a7f2aa82..35ca10131 100644
--- a/tests/app/main/views/test_send.py
+++ b/tests/app/main/views/test_send.py
@@ -68,10 +68,7 @@ def test_show_correct_title_and_description_for_email_sender_type(
template_id=fake_uuid
)
- assert page.select_one('h1').text == 'Where should replies come back to?'
-
- for element in ('legend', 'legend .govuk-visually-hidden'):
- assert normalize_spaces(page.select_one(element).text) == 'Where should replies come back to?'
+ assert page.select_one('.govuk-fieldset__legend h1').text.strip() == 'Where should replies come back to?'
def test_show_correct_title_and_description_for_sms_sender_type(
@@ -86,10 +83,7 @@ def test_show_correct_title_and_description_for_sms_sender_type(
template_id=fake_uuid
)
- assert page.select_one('h1').text == 'Who should the message come from?'
-
- for element in ('legend', 'legend .govuk-visually-hidden'):
- assert normalize_spaces(page.select_one(element).text) == 'Who should the message come from?'
+ assert page.select_one('.govuk-fieldset__legend h1').text.strip() == 'Who should the message come from?'
def test_default_email_sender_is_checked_and_has_hint(
@@ -104,9 +98,9 @@ def test_default_email_sender_is_checked_and_has_hint(
template_id=fake_uuid
)
- assert page.select('.multiple-choice input')[0].has_attr('checked')
- assert normalize_spaces(page.select_one('.multiple-choice label .block-label-hint').text) == "(Default)"
- assert not page.select('.multiple-choice input')[1].has_attr('checked')
+ assert page.select('.govuk-radios input')[0].has_attr('checked')
+ assert normalize_spaces(page.select_one('.govuk-radios .govuk-hint').text) == "(Default)"
+ assert not page.select('.govuk-radios input')[1].has_attr('checked')
def test_default_sms_sender_is_checked_and_has_hint(
@@ -121,9 +115,9 @@ def test_default_sms_sender_is_checked_and_has_hint(
template_id=fake_uuid
)
- assert page.select('.multiple-choice input')[0].has_attr('checked')
- assert normalize_spaces(page.select_one('.multiple-choice label .block-label-hint').text) == "(Default)"
- assert not page.select('.multiple-choice input')[1].has_attr('checked')
+ assert page.select('.govuk-radios input')[0].has_attr('checked')
+ assert normalize_spaces(page.select_one('.govuk-radios .govuk-hint').text) == "(Default)"
+ assert not page.select('.govuk-radios input')[1].has_attr('checked')
def test_default_sms_sender_is_checked_and_has_hint_when_there_are_no_inbound_numbers(
@@ -138,9 +132,9 @@ def test_default_sms_sender_is_checked_and_has_hint_when_there_are_no_inbound_nu
template_id=fake_uuid
)
- assert page.select('.multiple-choice input')[0].has_attr('checked')
- assert normalize_spaces(page.select_one('.multiple-choice label .block-label-hint').text) == "(Default)"
- assert not page.select('.multiple-choice input')[1].has_attr('checked')
+ assert page.select('.govuk-radios input')[0].has_attr('checked')
+ assert normalize_spaces(page.select_one('.govuk-radios .govuk-hint').text) == "(Default)"
+ assert not page.select('.govuk-radios input')[1].has_attr('checked')
def test_default_inbound_sender_is_checked_and_has_hint_with_default_and_receives_text(
@@ -156,11 +150,11 @@ def test_default_inbound_sender_is_checked_and_has_hint_with_default_and_receive
template_id=fake_uuid
)
- assert page.select('.multiple-choice input')[0].has_attr('checked')
+ assert page.select('.govuk-radios input')[0].has_attr('checked')
assert normalize_spaces(
- page.select_one('.multiple-choice label .block-label-hint').text) == "(Default and receives replies)"
- assert not page.select('.multiple-choice input')[1].has_attr('checked')
- assert not page.select('.multiple-choice input')[2].has_attr('checked')
+ page.select_one('.govuk-radios .govuk-hint').text) == "(Default and receives replies)"
+ assert not page.select('.govuk-radios input')[1].has_attr('checked')
+ assert not page.select('.govuk-radios input')[2].has_attr('checked')
def test_sms_sender_has_receives_replies_hint(
@@ -176,11 +170,11 @@ def test_sms_sender_has_receives_replies_hint(
template_id=fake_uuid
)
- assert page.select('.multiple-choice input')[0].has_attr('checked')
+ assert page.select('.govuk-radios input')[0].has_attr('checked')
assert normalize_spaces(
- page.select_one('.multiple-choice label .block-label-hint').text) == "(Default and receives replies)"
- assert not page.select('.multiple-choice input')[1].has_attr('checked')
- assert not page.select('.multiple-choice input')[2].has_attr('checked')
+ page.select_one('.govuk-radios .govuk-hint').text) == "(Default and receives replies)"
+ assert not page.select('.govuk-radios input')[1].has_attr('checked')
+ assert not page.select('.govuk-radios input')[2].has_attr('checked')
@pytest.mark.parametrize('template_type, sender_data', [