diff --git a/app/main/views/templates.py b/app/main/views/templates.py index 2f6716ba3..e120938d0 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -349,6 +349,8 @@ def action_blocked(service_id, notification_type, return_to, template_id): @main.route("/services//templates/add-folder", methods=['GET', 'POST']) @main.route("/services//templates/folders//add-folder", methods=['GET', 'POST']) +@login_required +@user_has_permissions('manage_templates') def add_template_folder(service_id, template_folder_id=None): if not current_service.has_permission('edit_folders'): abort(403) @@ -370,6 +372,8 @@ def add_template_folder(service_id, template_folder_id=None): @main.route("/services//templates/folders//manage", methods=['GET', 'POST']) +@login_required +@user_has_permissions('manage_templates') def manage_template_folder(service_id, template_folder_id): if not current_service.has_permission('edit_folders'): abort(403) @@ -395,11 +399,19 @@ def manage_template_folder(service_id, template_folder_id): ) -@main.route("/services//templates/folders//delete", methods=['POST']) +@main.route("/services//templates/folders//delete", methods=['GET', 'POST']) +@login_required +@user_has_permissions('manage_templates') def delete_template_folder(service_id, template_folder_id): if not current_service.has_permission('edit_folders'): abort(403) - pass + form = TemplateFolderForm() + + template_folder_api_client.delete_template_folder(current_service.id, template_folder_id) + + return redirect( + url_for('.choose_template', service_id=service_id) + ) @main.route("/services//templates/add-", methods=['GET', 'POST']) diff --git a/app/navigation.py b/app/navigation.py index 7bae1f3af..fdb13eef6 100644 --- a/app/navigation.py +++ b/app/navigation.py @@ -142,6 +142,7 @@ class HeaderNavigation(Navigation): 'create_api_key', 'data_retention', 'delete_service_template', + 'delete_template_folder', 'delivery_and_failure', 'delivery_status_callback', 'design_content', @@ -409,6 +410,7 @@ class MainNavigation(Navigation): 'cookies', 'create_email_branding', 'data_retention', + 'delete_template_folder', 'delivery_and_failure', 'design_content', 'documentation', @@ -590,6 +592,7 @@ class CaseworkNavigation(Navigation): 'create_email_branding', 'data_retention', 'delete_service_template', + 'delete_template_folder', 'delivery_and_failure', 'delivery_status_callback', 'design_content', @@ -827,6 +830,7 @@ class OrgNavigation(Navigation): 'create_email_branding', 'data_retention', 'delete_service_template', + 'delete_template_folder', 'delivery_and_failure', 'delivery_status_callback', 'design_content', diff --git a/app/notify_client/template_folder_api_client.py b/app/notify_client/template_folder_api_client.py index d6fad053b..8dae6ef61 100644 --- a/app/notify_client/template_folder_api_client.py +++ b/app/notify_client/template_folder_api_client.py @@ -52,7 +52,7 @@ class TemplateFolderAPIClient(NotifyAdminAPIClient): @cache.delete('service-{service_id}-template-folders') def delete_template_folder(self, service_id, template_folder_id): - self.post('/service/{}/template-folder/{}/delete'.format(service_id, template_folder_id)) + self.delete('/service/{}/template-folder/{}'.format(service_id, template_folder_id), {}) template_folder_api_client = TemplateFolderAPIClient() diff --git a/tests/app/main/views/test_template_folders.py b/tests/app/main/views/test_template_folders.py index 2574994b9..ecfe7dae6 100644 --- a/tests/app/main/views/test_template_folders.py +++ b/tests/app/main/views/test_template_folders.py @@ -376,3 +376,23 @@ def test_rename_folder(client_request, service_one, mock_get_template_folders, m folder_id, name="new beautiful name" ) + + +def test_delete_folder(client_request, service_one, mock_get_template_folders, mocker): + mock_delete = mocker.patch('app.template_folder_api_client.delete_template_folder') + folder_id = str(uuid.uuid4()) + mock_get_template_folders.return_value = [ + {'id': folder_id, 'name': 'folder_two', 'parent_id': None}, + ] + service_one['permissions'] += ['edit_folders'] + + client_request.post( + 'main.delete_template_folder', + service_id=service_one['id'], + template_folder_id=folder_id, + _expected_redirect=url_for("main.choose_template", + service_id=service_one['id'], + _external=True) + ) + + mock_delete.assert_called_once_with(service_one['id'], folder_id) diff --git a/tests/app/notify_client/test_template_folder_client.py b/tests/app/notify_client/test_template_folder_client.py index 27422ea86..4057797ca 100644 --- a/tests/app/notify_client/test_template_folder_client.py +++ b/tests/app/notify_client/test_template_folder_client.py @@ -128,13 +128,13 @@ def test_delete_template_folder_calls_correct_api_endpoint(mocker, api_user_acti some_service_id = uuid.uuid4() template_folder_id = uuid.uuid4() - expected_url = '/service/{}/template-folder/{}/delete'.format(some_service_id, template_folder_id) + expected_url = '/service/{}/template-folder/{}'.format(some_service_id, template_folder_id) client = TemplateFolderAPIClient() - mock_post = mocker.patch('app.notify_client.template_folder_api_client.TemplateFolderAPIClient.post') + mock_delete = mocker.patch('app.notify_client.template_folder_api_client.TemplateFolderAPIClient.delete') client.delete_template_folder(some_service_id, template_folder_id) - mock_post.assert_called_once_with(expected_url) + mock_delete.assert_called_once_with(expected_url, {}) mock_redis_delete.assert_called_once_with('service-{}-template-folders'.format(some_service_id))