From 9da9e85293b7d72e06fcc9b7a9a79656abdd31da Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Thu, 14 Jun 2018 16:21:57 +0100 Subject: [PATCH] Remove letters from caseworking view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Because one-off letters aren’t a thing yet there’s no way for caseworkers to send letters. So showing them letter templates will just confuse them. --- app/main/views/templates.py | 23 ++++++- tests/app/main/views/test_templates.py | 86 ++++++++++++++++++++------ tests/conftest.py | 12 +++- 3 files changed, 100 insertions(+), 21 deletions(-) diff --git a/app/main/views/templates.py b/app/main/views/templates.py index c2776ccd8..b2e36a94d 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -102,6 +102,22 @@ def start_tour(service_id, template_id): def choose_template(service_id, template_type='all'): templates = service_api_client.get_service_templates(service_id)['data'] + letters_available = ( + 'letter' in current_service['permissions'] and + current_user.has_permissions('view_activity') + ) + + available_template_types = list(filter(None, ( + 'email', + 'sms', + 'letter' if letters_available else None, + ))) + + templates = [ + template for template in templates + if template['template_type'] in available_template_types + ] + has_multiple_template_types = len({ template['template_type'] for template in templates }) > 1 @@ -112,13 +128,16 @@ def choose_template(service_id, template_type='all'): ('All', 'all'), ('Text message', 'sms'), ('Email', 'email'), - ('Letter', 'letter') if 'letter' in current_service['permissions'] else None, + ('Letter', 'letter') if letters_available else None, ]) ] templates_on_page = [ template for template in templates - if template_type in ['all', template['template_type']] + if ( + template_type in ['all', template['template_type']] and + template['template_type'] in available_template_types + ) ] if current_user.has_permissions('view_activity'): diff --git a/tests/app/main/views/test_templates.py b/tests/app/main/views/test_templates.py index 1054419f0..56056444d 100644 --- a/tests/app/main/views/test_templates.py +++ b/tests/app/main/views/test_templates.py @@ -19,6 +19,7 @@ from tests import ( from tests.conftest import ( SERVICE_ONE_ID, active_caseworking_user, + active_user_view_permissions, mock_get_service_email_template, mock_get_service_letter_template, mock_get_service_template, @@ -29,30 +30,79 @@ from tests.conftest import service_one as create_sample_service from tests.conftest import single_letter_contact_block -@pytest.mark.parametrize('extra_args, expected_nav_links, expected_templates', [ - ( - {}, - ['Text message', 'Email'], - ['sms_template_one', 'sms_template_two', 'email_template_one', 'email_template_two'] - ), - ( - {'template_type': 'sms'}, - ['All', 'Email'], - ['sms_template_one', 'sms_template_two'], - ), - ( - {'template_type': 'email'}, - ['All', 'Text message'], - ['email_template_one', 'email_template_two'], - ), -]) +@pytest.mark.parametrize( + 'user, expected_page_title, extra_args, expected_nav_links, expected_templates', + [ + ( + active_user_view_permissions, + 'Templates', + {}, + ['Text message', 'Email', 'Letter'], + [ + 'sms_template_one', + 'sms_template_two', + 'email_template_one', + 'email_template_two', + 'letter_template_one', + 'letter_template_two', + ] + ), + ( + active_user_view_permissions, + 'Templates', + {'template_type': 'sms'}, + ['All', 'Email', 'Letter'], + ['sms_template_one', 'sms_template_two'], + ), + ( + active_user_view_permissions, + 'Templates', + {'template_type': 'email'}, + ['All', 'Text message', 'Letter'], + ['email_template_one', 'email_template_two'], + ), + ( + active_user_view_permissions, + 'Templates', + {'template_type': 'letter'}, + ['All', 'Text message', 'Email'], + ['letter_template_one', 'letter_template_two'], + ), + ( + active_caseworking_user, + 'Choose a template', + {}, + ['Text message', 'Email'], + [ + 'sms_template_one', + 'sms_template_two', + 'email_template_one', + 'email_template_two', + ], + ), + ( + active_caseworking_user, + 'Choose a template', + {'template_type': 'email'}, + ['All', 'Text message'], + ['email_template_one', 'email_template_two'], + ), + ] +) def test_should_show_page_for_choosing_a_template( client_request, mock_get_service_templates, extra_args, expected_nav_links, expected_templates, + service_one, + mocker, + fake_uuid, + user, + expected_page_title, ): + mocker.patch('app.user_api_client.get_user', return_value=user(fake_uuid)) + service_one['permissions'].append('letter') page = client_request.get( 'main.choose_template', @@ -60,7 +110,7 @@ def test_should_show_page_for_choosing_a_template( **extra_args ) - assert normalize_spaces(page.select('h1')[0].text) == 'Templates' + assert normalize_spaces(page.select_one('h1').text) == expected_page_title links_in_page = page.select('.pill a') diff --git a/tests/conftest.py b/tests/conftest.py index d199499f7..3b9b41a4a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -953,6 +953,8 @@ def mock_get_service_templates(mocker): uuid2 = str(generate_uuid()) uuid3 = str(generate_uuid()) uuid4 = str(generate_uuid()) + uuid5 = str(generate_uuid()) + uuid6 = str(generate_uuid()) def _create(service_id): return {'data': [ @@ -969,7 +971,15 @@ def mock_get_service_templates(mocker): template_json( service_id, uuid4, "email_template_two", "email", "email template two content", subject='email template two subject', - ) + ), + template_json( + service_id, uuid5, "letter_template_one", "letter", "letter template one content", + subject='letter template one subject', + ), + template_json( + service_id, uuid6, "letter_template_two", "letter", "letter template two content", + subject='letter template two subject', + ), ]} return mocker.patch(