Merge pull request #2518 from alphagov/delete-folder-refinements

Make some refinements to the delete folder journey
This commit is contained in:
Chris Hill-Scott
2018-11-20 14:53:05 +00:00
committed by GitHub
3 changed files with 48 additions and 33 deletions

View File

@@ -419,16 +419,18 @@ def manage_template_folder(service_id, template_folder_id):
@login_required @login_required
@user_has_permissions('manage_templates') @user_has_permissions('manage_templates')
def delete_template_folder(service_id, template_folder_id): def delete_template_folder(service_id, template_folder_id):
if not current_service.has_permission('edit_folders'): if not current_service.has_permission('edit_folders'):
abort(403) abort(403)
form = TemplateFolderForm()
template_folder_path = current_service.get_template_folder_path(template_folder_id) template_folder = current_service.get_template_folder(template_folder_id)
template_folder_name = template_folder_path[-1]["name"]
form = TemplateFolderForm(name=template_folder['name'])
if len(current_service.get_template_folders_and_templates( if len(current_service.get_template_folders_and_templates(
template_type="all", template_folder_id=template_folder_id template_type="all", template_folder_id=template_folder_id
)) > 0: )) > 0:
flash("You must empty this folder before you can delete it".format(template_folder_name), 'info') flash("You must empty this folder before you can delete it".format(template_folder['name']), 'info')
return redirect( return redirect(
url_for( url_for(
'.choose_template', service_id=service_id, template_type="all", template_folder_id=template_folder_id '.choose_template', service_id=service_id, template_type="all", template_folder_id=template_folder_id
@@ -440,12 +442,12 @@ def delete_template_folder(service_id, template_folder_id):
template_folder_api_client.delete_template_folder(current_service.id, template_folder_id) template_folder_api_client.delete_template_folder(current_service.id, template_folder_id)
return redirect( return redirect(
url_for('.choose_template', service_id=service_id) url_for('.choose_template', service_id=service_id, template_folder_id=template_folder['parent_id'])
) )
except HTTPError as e: except HTTPError as e:
msg = "Folder is not empty" msg = "Folder is not empty"
if e.status_code == 400 and msg in e.message: if e.status_code == 400 and msg in e.message:
flash("You must empty this folder before you can delete it".format(template_folder_name), 'info') flash("You must empty this folder before you can delete it", 'info')
return redirect( return redirect(
url_for( url_for(
'.choose_template', '.choose_template',
@@ -457,15 +459,14 @@ def delete_template_folder(service_id, template_folder_id):
else: else:
abort(500, e) abort(500, e)
flash("Are you sure you want to delete the {} folder?".format(template_folder_name), 'delete') flash("Are you sure you want to delete the {} folder?".format(template_folder['name']), 'delete')
return render_template( return render_template(
'views/templates/manage-template-folder.html', 'views/templates/manage-template-folder.html',
form=form, form=form,
template_folder_path=template_folder_path, template_folder_path=current_service.get_template_folder_path(template_folder_id),
current_service_id=current_service.id, current_service_id=current_service.id,
template_folder_id=template_folder_id, template_folder_id=template_folder_id,
template_type="all", template_type="all",
delete_folder=True
) )

View File

@@ -21,20 +21,16 @@
</div> </div>
</div> </div>
{% if not delete_folder %} {% call form_wrapper(action=url_for('main.manage_template_folder', service_id=current_service.id, template_folder_id=template_folder_id)) %}
{% call form_wrapper() %} {{ textbox(form.name) }}
{{ textbox(form.name) }} {{ page_footer(
{{ page_footer( 'Save',
'Save', delete_link=url_for(
delete_link=url_for( '.delete_template_folder',
'.delete_template_folder', service_id=current_service_id,
service_id=current_service_id, template_folder_id=template_folder_id
template_folder_id=template_folder_id ),
), delete_link_text="Delete this folder") }}
delete_link_text="Delete this folder") }} {% endcall %}
{% endcall %}
{% else %}
<a href="{{url_for('.manage_template_folder', service_id=current_service.id, template_folder_id=template_folder_id)}}">Back to manage folder page</a>
{% endif %}
{% endblock %} {% endblock %}

View File

@@ -402,7 +402,7 @@ def test_get_manage_folder_page(
assert normalize_spaces(page.select_one('title').text) == ( assert normalize_spaces(page.select_one('title').text) == (
'folder_two Templates service one GOV.UK Notify' 'folder_two Templates service one GOV.UK Notify'
) )
assert page.select_one('input[name=name]') is not None assert page.select_one('input[name=name]')['value'] == 'folder_two'
delete_link = page.find('a', string="Delete this folder") delete_link = page.find('a', string="Delete this folder")
expected_delete_url = "/services/{}/templates/folders/{}/delete".format(service_one['id'], folder_id) expected_delete_url = "/services/{}/templates/folders/{}/delete".format(service_one['id'], folder_id)
@@ -478,9 +478,20 @@ def test_delete_template_folder_should_request_confirmation(
'Yes, delete' 'Yes, delete'
) )
assert len(page.select('label')) == 0 assert page.select_one('input[name=name]')['value'] == 'sacrifice'
assert len(page.select('button')) == 1
assert "Back to manage folder page" in page.text assert len(page.select('form')) == 2
assert len(page.select('button')) == 2
assert 'action' not in page.select('form')[0]
assert page.select('form button')[0].text == 'Yes, delete'
assert page.select('form')[1]['action'] == url_for(
'main.manage_template_folder',
service_id=service_one['id'],
template_folder_id=folder_id,
)
assert page.select('form button')[1].text == 'Save'
def test_delete_template_folder_should_detect_non_empty_folder_on_get( def test_delete_template_folder_should_detect_non_empty_folder_on_get(
@@ -511,11 +522,15 @@ def test_delete_template_folder_should_detect_non_empty_folder_on_get(
) )
def test_delete_folder(client_request, service_one, mock_get_template_folders, mocker): @pytest.mark.parametrize('parent_folder_id', (
None,
PARENT_FOLDER_ID,
))
def test_delete_folder(client_request, service_one, mock_get_template_folders, mocker, parent_folder_id):
mock_delete = mocker.patch('app.template_folder_api_client.delete_template_folder') mock_delete = mocker.patch('app.template_folder_api_client.delete_template_folder')
folder_id = str(uuid.uuid4()) folder_id = str(uuid.uuid4())
mock_get_template_folders.side_effect = [[ mock_get_template_folders.side_effect = [[
{'id': folder_id, 'name': 'sacrifice', 'parent_id': None}, {'id': folder_id, 'name': 'sacrifice', 'parent_id': parent_folder_id},
], []] ], []]
mocker.patch( mocker.patch(
'app.models.service.Service.get_templates', 'app.models.service.Service.get_templates',
@@ -527,9 +542,12 @@ def test_delete_folder(client_request, service_one, mock_get_template_folders, m
'main.delete_template_folder', 'main.delete_template_folder',
service_id=service_one['id'], service_id=service_one['id'],
template_folder_id=folder_id, template_folder_id=folder_id,
_expected_redirect=url_for("main.choose_template", _expected_redirect=url_for(
service_id=service_one['id'], "main.choose_template",
_external=True) service_id=service_one['id'],
template_folder_id=parent_folder_id,
_external=True,
)
) )
mock_delete.assert_called_once_with(service_one['id'], folder_id) mock_delete.assert_called_once_with(service_one['id'], folder_id)