Merge pull request #2448 from alphagov/alphabetical-sort-letter-brandings

Make letter brandings easier to find with sorting and filtering
This commit is contained in:
Chris Hill-Scott
2018-11-07 13:50:05 +00:00
committed by GitHub
5 changed files with 51 additions and 19 deletions
+8 -1
View File
@@ -785,7 +785,14 @@ class LetterBranding(StripWhitespaceForm):
def __init__(self, choices=[], *args, **kwargs): def __init__(self, choices=[], *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.dvla_org_id.choices = choices self.dvla_org_id.choices = list(sorted(
choices,
key=lambda choice: (
choice[0] != kwargs.get('dvla_org_id'),
choice[0] != '001',
choice[1],
),
))
dvla_org_id = RadioField( dvla_org_id = RadioField(
'Which logo should this services letter have?', 'Which logo should this services letter have?',
+5 -3
View File
@@ -832,7 +832,10 @@ def service_preview_email_branding(service_id):
@user_is_platform_admin @user_is_platform_admin
def set_letter_branding(service_id): def set_letter_branding(service_id):
form = LetterBranding(choices=email_branding_client.get_letter_email_branding().items()) form = LetterBranding(
choices=email_branding_client.get_letter_email_branding().items(),
dvla_org_id=current_service.dvla_organisation,
)
if form.validate_on_submit(): if form.validate_on_submit():
current_service.update( current_service.update(
@@ -840,11 +843,10 @@ def set_letter_branding(service_id):
) )
return redirect(url_for('.service_settings', service_id=service_id)) return redirect(url_for('.service_settings', service_id=service_id))
form.dvla_org_id.data = current_service.dvla_organisation
return render_template( return render_template(
'views/service-settings/set-letter-branding.html', 'views/service-settings/set-letter-branding.html',
form=form, form=form,
search_form=SearchTemplatesForm(),
) )
@@ -1,5 +1,6 @@
{% extends "withnav_template.html" %} {% extends "withnav_template.html" %}
{% from "components/radios.html" import radios %} {% from "components/radios.html" import radios %}
{% from "components/live-search.html" import live_search %}
{% from "components/page-footer.html" import page_footer %} {% from "components/page-footer.html" import page_footer %}
{% from "components/form.html" import form_wrapper %} {% from "components/form.html" import form_wrapper %}
@@ -10,17 +11,14 @@
{% block maincolumn_content %} {% block maincolumn_content %}
<h1 class="heading-large">Set letter branding</h1> <h1 class="heading-large">Set letter branding</h1>
<div class="grid-row"> {% call form_wrapper() %}
<div class="column-three-quarters"> {{ live_search(target_selector='.multiple-choice', show=True, form=search_form, label='Search by name') }}
{% call form_wrapper() %} {{ radios(form.dvla_org_id, hide_legend=True) }}
{{ radios(form.dvla_org_id) }} {{ page_footer(
{{ page_footer( 'Save',
'Save', back_link=url_for('.service_settings', service_id=current_service.id),
back_link=url_for('.service_settings', service_id=current_service.id), back_link_text='Back to settings'
back_link_text='Back to settings' ) }}
) }} {% endcall %}
{% endcall %}
</div>
</div>
{% endblock %} {% endblock %}
+27 -3
View File
@@ -2088,9 +2088,22 @@ def test_set_letter_branding_platform_admin_only(
assert response.status_code == 403 assert response.status_code == 403
@pytest.mark.parametrize('current_dvla_org_id, expected_selected', [ @pytest.mark.parametrize('current_dvla_org_id, expected_selected, expected_items', [
(None, '001'), (None, '001', (
('500', '500'), ('001', 'HM Government'),
('999', 'Animal and Plant Health Agency'),
('500', 'Land Registry'),
)),
('500', '500', (
('500', 'Land Registry'),
('001', 'HM Government'),
('999', 'Animal and Plant Health Agency'),
)),
('999', '999', (
('999', 'Animal and Plant Health Agency'),
('001', 'HM Government'),
('500', 'Land Registry'),
)),
]) ])
def test_set_letter_branding_prepopulates( def test_set_letter_branding_prepopulates(
logged_in_platform_admin_client, logged_in_platform_admin_client,
@@ -2098,12 +2111,23 @@ def test_set_letter_branding_prepopulates(
mock_get_letter_email_branding, mock_get_letter_email_branding,
current_dvla_org_id, current_dvla_org_id,
expected_selected, expected_selected,
expected_items,
): ):
if current_dvla_org_id: if current_dvla_org_id:
service_one['dvla_organisation'] = current_dvla_org_id service_one['dvla_organisation'] = current_dvla_org_id
response = logged_in_platform_admin_client.get(url_for('main.set_letter_branding', service_id=service_one['id'])) response = logged_in_platform_admin_client.get(url_for('main.set_letter_branding', service_id=service_one['id']))
assert response.status_code == 200 assert response.status_code == 200
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
for element in {'label[for^=dvla_org_id]', 'input[type=radio]'}:
assert len(page.select(element)) == len(expected_items)
for index, expected_item in enumerate(expected_items):
expected_value, expected_label = expected_item
assert normalize_spaces(page.select('label[for^=dvla_org_id]')[index].text) == expected_label
assert page.select('input[type=radio]')[index]['value'] == expected_value
assert len(page.select('input[checked]')) == 1
assert page.select('input[checked]')[0]['value'] == expected_selected assert page.select('input[checked]')[0]['value'] == expected_selected
+1
View File
@@ -2492,6 +2492,7 @@ def mock_get_letter_email_branding(mocker):
return { return {
'001': 'HM Government', '001': 'HM Government',
'500': 'Land Registry', '500': 'Land Registry',
'999': 'Animal and Plant Health Agency',
} }
return mocker.patch( return mocker.patch(