diff --git a/app/main/views/templates.py b/app/main/views/templates.py index ded6fd581..70a854143 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -395,7 +395,8 @@ def manage_template_folder(service_id, template_folder_id): form=form, template_folder_path=current_service.get_template_folder_path(template_folder_id), current_service_id=current_service.id, - template_folder_id=template_folder_id + template_folder_id=template_folder_id, + template_type="all" ) @@ -447,7 +448,9 @@ def delete_template_folder(service_id, template_folder_id): form=form, template_folder_path=template_folder_path, current_service_id=current_service.id, - template_folder_id=template_folder_id + template_folder_id=template_folder_id, + template_type="all", + delete_folder=True ) diff --git a/app/templates/views/templates/manage-template-folder.html b/app/templates/views/templates/manage-template-folder.html index dd6e7db03..7066003ac 100644 --- a/app/templates/views/templates/manage-template-folder.html +++ b/app/templates/views/templates/manage-template-folder.html @@ -22,18 +22,21 @@ Templates {% endfor %} + {% if not delete_folder %} + {% call form_wrapper() %} + {{ textbox(form.name) }} + {{ page_footer( + 'Save', + delete_link=url_for( + '.delete_template_folder', + service_id=current_service_id, + template_folder_id=template_folder_id + ), + delete_link_text="Delete this folder") }} - {% call form_wrapper() %} - {{ textbox(form.name) }} - {{ page_footer( - 'Save', - delete_link=url_for( - '.delete_template_folder', - service_id=current_service_id, - template_folder_id=template_folder_id - ), - delete_link_text="Delete this folder") }} - - {% endcall %} + {% endcall %} + {% else %} + Back to manage folder page + {% endif %} {% endblock %} diff --git a/tests/app/main/views/test_template_folders.py b/tests/app/main/views/test_template_folders.py index 9aa01d1f3..8fe03eb91 100644 --- a/tests/app/main/views/test_template_folders.py +++ b/tests/app/main/views/test_template_folders.py @@ -378,6 +378,60 @@ def test_rename_folder(client_request, service_one, mock_get_template_folders, m ) +def test_delete_template_folder_should_request_confirmation( + client_request, service_one, mock_get_template_folders, mocker +): + service_one['permissions'] += ['edit_folders'] + folder_id = str(uuid.uuid4()) + mock_get_template_folders.side_effect = [[ + {'id': folder_id, 'name': 'sacrifice', 'parent_id': None}, + ], []] + mocker.patch( + 'app.models.service.Service.get_templates', + return_value=[], + ) + page = client_request.get( + 'main.delete_template_folder', service_id=service_one['id'], + template_folder_id=folder_id + ) + assert normalize_spaces(page.select('.banner-dangerous')[0].text) == ( + 'Are you sure you want to delete the ‘sacrifice’ folder? ' + 'Yes, delete' + ) + + assert len(page.select('label')) == 0 + assert len(page.select('button')) == 1 + assert "Back to manage folder page" in page.text + + +def test_delete_template_folder_should_detect_non_empty_folder_on_get( + client_request, service_one, mock_get_template_folders, mocker +): + service_one['permissions'] += ['edit_folders'] + folder_id = str(uuid.uuid4()) + template_id = str(uuid.uuid4()) + mock_get_template_folders.side_effect = [ + [{'id': folder_id, 'name': "can't touch me", 'parent_id': None}], + [] + ] + mocker.patch( + 'app.models.service.Service.get_templates', + return_value=[{'id': template_id, 'name': 'template'}], + ) + client_request.get( + 'main.delete_template_folder', service_id=service_one['id'], + template_folder_id=folder_id, + _expected_redirect=url_for( + "main.choose_template", + template_type="all", + service_id=service_one['id'], + template_folder_id=folder_id, + _external=True + ), + _expected_status=302 + ) + + 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())