diff --git a/app/main/views/templates.py b/app/main/views/templates.py index 986b949d5..ec3c39a56 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -127,7 +127,7 @@ def choose_template(service_id, template_type='all', template_folder_id=None): abort(403) try: return process_folder_management_form(templates_and_folders_form, template_folder_id) - except Exception as e: + except HTTPError as e: flash(e.message) if 'templates_and_folders' in templates_and_folders_form.errors: diff --git a/tests/app/main/views/test_template_folders.py b/tests/app/main/views/test_template_folders.py index 7681f67f1..993987771 100644 --- a/tests/app/main/views/test_template_folders.py +++ b/tests/app/main/views/test_template_folders.py @@ -2,6 +2,7 @@ import uuid import pytest from flask import url_for +from notifications_python_client.errors import HTTPError from tests.conftest import ( SERVICE_ONE_ID, @@ -1116,3 +1117,48 @@ def test_radio_button_with_no_value_shows_custom_error_message( assert mock_create_template_folder.called is False assert page.select_one('span.error-message').text.strip() == 'Select the type of template you want to add' + + +@pytest.mark.parametrize('data, error_msg', [ + # nothing selected when moving + ( + {'operation': 'move-to-new-folder', 'templates_and_folders': [], 'move_to_new_folder_name': 'foo'}, + 'Select at least one template or folder' + ), + ( + {'operation': 'move-to-existing-folder', 'templates_and_folders': [], 'move_to': PARENT_FOLDER_ID}, + 'Select at least one template or folder' + ), + # api error (eg moving folder to itself) + ( + {'operation': 'move-to-existing-folder', 'templates_and_folders': [FOLDER_TWO_ID], 'move_to': FOLDER_TWO_ID}, + 'Some api error msg' + ) + +]) +def test_show_custom_error_message( + client_request, + service_one, + mock_get_service_templates, + mock_get_template_folders, + mock_move_to_template_folder, + mock_create_template_folder, + data, + error_msg, +): + service_one['permissions'] += ['edit_folders'] + mock_get_template_folders.return_value = [ + {'id': PARENT_FOLDER_ID, 'name': 'folder_one', 'parent_id': None}, + {'id': FOLDER_TWO_ID, 'name': 'folder_two', 'parent_id': None}, + ] + mock_move_to_template_folder.side_effect = HTTPError(message='Some api error msg') + + page = client_request.post( + 'main.choose_template', + service_id=SERVICE_ONE_ID, + _data=data, + _expected_status=200, + _expected_redirect=None, + ) + + assert page.select_one('div.banner-dangerous').text.strip() == error_msg