diff --git a/app/main/views/templates.py b/app/main/views/templates.py index aa9ea60c9..6091488ad 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -318,7 +318,7 @@ def copy_template(service_id, template_id): return add_service_template(service_id, template['template_type']) template['template_content'] = template['content'] - template['name'] = 'Copy of ‘{}’'.format(template['name']) + template['name'] = _get_template_copy_name(template, current_service.all_templates) form = form_objects[template['template_type']](**template) return render_template( @@ -330,6 +330,20 @@ def copy_template(service_id, template_id): ) +def _get_template_copy_name(template, existing_templates): + + template_names = [existing['name'] for existing in existing_templates] + + for index in reversed(range(1, 10)): + if '{} (copy {})'.format(template['name'], index) in template_names: + return '{} (copy {})'.format(template['name'], index + 1) + + if '{} (copy)'.format(template['name']) in template_names: + return '{} (copy 2)'.format(template['name']) + + return '{} (copy)'.format(template['name']) + + @main.route("/services//templates/action-blocked///") @login_required @user_has_permissions('manage_templates') diff --git a/tests/app/main/views/test_templates.py b/tests/app/main/views/test_templates.py index e2e0cdc0c..bfa8c511a 100644 --- a/tests/app/main/views/test_templates.py +++ b/tests/app/main/views/test_templates.py @@ -823,11 +823,44 @@ def test_choose_a_template_to_copy( ) +@pytest.mark.parametrize('existing_template_names, expected_name', ( + ( + ['Two week reminder'], + 'Two week reminder (copy)' + ), + ( + ['Two week reminder (copy)'], + 'Two week reminder (copy 2)' + ), + ( + ['Two week reminder', 'Two week reminder (copy)'], + 'Two week reminder (copy 2)' + ), + ( + ['Two week reminder (copy 8)', 'Two week reminder (copy 9)'], + 'Two week reminder (copy 10)' + ), + ( + ['Two week reminder (copy)', 'Two week reminder (copy 9)'], + 'Two week reminder (copy 10)' + ), + ( + ['Two week reminder (copy)', 'Two week reminder (copy 10)'], + 'Two week reminder (copy 2)' + ), +)) def test_load_edit_template_with_copy_of_template( client_request, + mock_get_service_templates, mock_get_service_email_template, mock_get_non_empty_organisations_and_services_for_user, + existing_template_names, + expected_name, ): + mock_get_service_templates.side_effect = lambda service_id: {'data': [ + {'name': existing_template_name, 'template_type': 'sms'} + for existing_template_name in existing_template_names + ]} page = client_request.get( 'main.copy_template', service_id=SERVICE_ONE_ID, @@ -838,7 +871,7 @@ def test_load_edit_template_with_copy_of_template( assert page.select_one('form')['method'] == 'post' assert page.select_one('input')['value'] == ( - 'Copy of ‘Two week reminder’' + expected_name ) assert page.select_one('textarea').text == ( 'Your ((thing)) is due soon'