From 84a3c80eb4c8ce26d18418ae5f8a2ba5af6398de Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Mon, 26 Nov 2018 15:53:14 +0000 Subject: [PATCH] Launch first class postage feature This commit makes it available to everyone. Available just means they can select 1st class for all their letters, if they want it. --- app/main/views/service_settings.py | 6 ++- app/templates/views/service-settings.html | 26 ++++++------ tests/app/main/views/test_service_settings.py | 42 +++++++++++-------- 3 files changed, 41 insertions(+), 33 deletions(-) diff --git a/app/main/views/service_settings.py b/app/main/views/service_settings.py index 6924b74e0..6166d61cc 100644 --- a/app/main/views/service_settings.py +++ b/app/main/views/service_settings.py @@ -552,8 +552,12 @@ def service_set_letters(service_id): @main.route("/services//service-settings/set-postage", methods=['GET', 'POST']) @login_required -@user_is_platform_admin +@user_has_permissions('manage_service') def service_set_postage(service_id): + + if not current_service.has_permission('letter'): + abort(404) + form = ServicePostageForm(postage=current_service.postage) if form.validate_on_submit(): diff --git a/app/templates/views/service-settings.html b/app/templates/views/service-settings.html index e57fbf2fa..977956be1 100644 --- a/app/templates/views/service-settings.html +++ b/app/templates/views/service-settings.html @@ -234,20 +234,18 @@ )}} {% endcall %} - {% if current_user.platform_admin %} - {% call settings_row(if_has_permission='letter') %} - {{ text_field('Postage') }} - {% set postage = {'first': 'First class only', 'second': 'Second class only'} %} - {{ text_field(postage[current_service.postage]) }} - {{ edit_field( - 'Change', - url_for('.service_set_postage', - service_id=current_service.id), - permissions=['manage_service'] - ) - }} - {% endcall %} - {% endif %} + {% call settings_row(if_has_permission='letter') %} + {{ text_field('Postage') }} + {% set postage = {'first': 'First class only', 'second': 'Second class only'} %} + {{ text_field(postage[current_service.postage]) }} + {{ edit_field( + 'Change', + url_for('.service_set_postage', + service_id=current_service.id), + permissions=['manage_service'] + ) + }} + {% endcall %} {% endcall %} diff --git a/tests/app/main/views/test_service_settings.py b/tests/app/main/views/test_service_settings.py index 6db402d1d..391051cdb 100644 --- a/tests/app/main/views/test_service_settings.py +++ b/tests/app/main/views/test_service_settings.py @@ -216,7 +216,7 @@ def test_should_show_overview_for_service_with_more_things_set( def test_if_cant_send_letters_then_cant_see_postage( - logged_in_platform_admin_client, + client_request, service_one, single_reply_to_email_address, single_letter_contact_block, @@ -224,8 +224,7 @@ def test_if_cant_send_letters_then_cant_see_postage( single_sms_sender, mock_get_service_settings_page_common, ): - response = logged_in_platform_admin_client.get(url_for('main.service_settings', service_id=SERVICE_ONE_ID)) - page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') + page = client_request.get('main.service_settings', service_id=SERVICE_ONE_ID) letter_table = page.find_all('table')[3] rows = letter_table.find_all('tr') @@ -2148,35 +2147,42 @@ def test_set_letter_branding_saves( mock_update_service.assert_called_once_with(service_one['id'], dvla_organisation='500') -def test_set_postage_platform_admin_only( - logged_in_client, - service_one, +def test_set_postage_only_for_letter_services( + client_request, ): - response = logged_in_client.get(url_for('main.service_set_postage', service_id=SERVICE_ONE_ID)) - assert response.status_code == 403 + client_request.get( + 'main.service_set_postage', + service_id=SERVICE_ONE_ID, + _expected_status=404, + ) def test_set_postage_prepopulates( - logged_in_platform_admin_client, + client_request, service_one, ): - response = logged_in_platform_admin_client.get(url_for('main.service_set_postage', service_id=SERVICE_ONE_ID)) - assert response.status_code == 200 - page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') + service_one['permissions'] += ['letter'] + page = client_request.get('main.service_set_postage', service_id=SERVICE_ONE_ID) assert page.select('input[checked]')[0]['value'] == 'second' def test_set_postage_saves( - logged_in_platform_admin_client, + client_request, service_one, mock_update_service, ): - response = logged_in_platform_admin_client.post( - url_for('main.service_set_postage', service_id=SERVICE_ONE_ID), - data={'postage': 'first'} + service_one['permissions'] += ['letter'] + client_request.post( + 'main.service_set_postage', + service_id=SERVICE_ONE_ID, + _data={'postage': 'first'}, + _expected_status=302, + expected_redirect=url_for( + 'main.service_settings', + service_id=SERVICE_ONE_ID, + _external=True, + ) ) - assert response.status_code == 302 - assert response.location == url_for('main.service_settings', service_id=SERVICE_ONE_ID, _external=True) mock_update_service.assert_called_once_with(SERVICE_ONE_ID, postage='first')