mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-06 03:13:42 -05:00
Add a new endpoint for managing a folder, use it to rename folder
- Add a GET / POST view: manage template folder - Add a template for that view, where a user can rename their folder - Add an API client method for updating a folder - Test the new feature, including the test that service without permissions cannot manage a folder
This commit is contained in:
@@ -369,6 +369,27 @@ def add_template_folder(service_id, template_folder_id=None):
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/templates/folders/<template_folder_id>/manage", methods=['GET', 'POST'])
|
||||
def manage_template_folder(service_id, template_folder_id):
|
||||
if not current_service.has_permission('edit_folders'):
|
||||
abort(403)
|
||||
|
||||
form = TemplateFolderForm()
|
||||
if form.validate_on_submit():
|
||||
template_folder_api_client.update_template_folder(
|
||||
current_service.id, template_folder_id, name=form.name.data
|
||||
)
|
||||
return redirect(
|
||||
url_for('.choose_template', service_id=service_id, template_folder_id=template_folder_id)
|
||||
)
|
||||
|
||||
return render_template(
|
||||
'views/templates/manage-template-folder.html',
|
||||
form=form,
|
||||
template_folder_path=current_service.get_template_folder_path(template_folder_id),
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/templates/add-<template_type>", methods=['GET', 'POST'])
|
||||
@main.route("/services/<service_id>/templates/folders/<template_folder_id>/add-<template_type>",
|
||||
methods=['GET', 'POST'])
|
||||
|
||||
@@ -172,6 +172,7 @@ class HeaderNavigation(Navigation):
|
||||
'letter_jobs',
|
||||
'link_service_to_organisation',
|
||||
'manage_org_users',
|
||||
'manage_template_folder',
|
||||
'manage_users',
|
||||
'monthly',
|
||||
'new_password',
|
||||
@@ -310,6 +311,7 @@ class MainNavigation(Navigation):
|
||||
'copy_template',
|
||||
'delete_service_template',
|
||||
'edit_service_template',
|
||||
'manage_template_folder',
|
||||
'send_messages',
|
||||
'send_one_off',
|
||||
'send_one_off_step',
|
||||
@@ -625,6 +627,7 @@ class CaseworkNavigation(Navigation):
|
||||
'link_service_to_organisation',
|
||||
'live_services',
|
||||
'manage_org_users',
|
||||
'manage_template_folder',
|
||||
'manage_users',
|
||||
'monthly',
|
||||
'new_password',
|
||||
@@ -857,6 +860,7 @@ class OrgNavigation(Navigation):
|
||||
'letter_jobs',
|
||||
'link_service_to_organisation',
|
||||
'live_services',
|
||||
'manage_template_folder',
|
||||
'manage_users',
|
||||
'monthly',
|
||||
'new_password',
|
||||
|
||||
@@ -43,5 +43,11 @@ class TemplateFolderAPIClient(NotifyAdminAPIClient):
|
||||
template_ids,
|
||||
))
|
||||
|
||||
def update_template_folder(self, service_id, template_folder_id, name):
|
||||
self.post(
|
||||
'/service/{}/template-folder/{}'.format(service_id, template_folder_id),
|
||||
{"name": name}
|
||||
)
|
||||
|
||||
|
||||
template_folder_api_client = TemplateFolderAPIClient()
|
||||
|
||||
@@ -65,6 +65,10 @@
|
||||
{% if current_user.has_permissions('manage_templates') %}
|
||||
<div class="column-one-third">
|
||||
<a href="{{ url_for('.add_template_by_type', service_id=current_service.id, template_folder_id=current_template_folder_id) }}" class="button align-with-heading">Add new template</a>
|
||||
|
||||
{% if can_manage_folders and template_folder_path %}
|
||||
<a href="{{ url_for('.manage_template_folder', service_id=current_service.id, template_folder_id=current_template_folder_id) }}" class="align-with-heading">Manage</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
31
app/templates/views/templates/manage-template-folder.html
Normal file
31
app/templates/views/templates/manage-template-folder.html
Normal file
@@ -0,0 +1,31 @@
|
||||
{% extends "withnav_template.html" %}
|
||||
{% from "components/textbox.html" import textbox %}
|
||||
{% from "components/page-footer.html" import page_footer %}
|
||||
{% from "components/form.html" import form_wrapper %}
|
||||
|
||||
{% block service_page_title %}
|
||||
Templates
|
||||
{% for folder in template_folder_path %}
|
||||
/
|
||||
{{ folder.name }}
|
||||
{% endfor %}
|
||||
- Manage folder
|
||||
{% endblock %}
|
||||
|
||||
{% block maincolumn_content %}
|
||||
|
||||
<h1 class="heading-large">
|
||||
<a href="{{ url_for('.choose_template', service_id=current_service.id, template_type=template_type) }}">Templates</a>
|
||||
{% for folder in template_folder_path %}
|
||||
/
|
||||
<a href="{{ url_for('.choose_template', service_id=current_service.id, template_type=template_type, template_folder_id=folder.id) }}">{{ folder.name }}</a>
|
||||
{% endfor %}
|
||||
</h1>
|
||||
|
||||
|
||||
{% call form_wrapper() %}
|
||||
{{ textbox(form.name) }}
|
||||
{{ page_footer('Save') }}
|
||||
{% endcall %}
|
||||
|
||||
{% endblock %}
|
||||
@@ -248,3 +248,55 @@ def test_can_create_email_template_with_parent_folder(
|
||||
data['subject'],
|
||||
data['process_type'],
|
||||
data['parent_folder_id'])
|
||||
|
||||
|
||||
def test_get_manage_folder_page(client_request, service_one, mock_get_template_folders):
|
||||
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']
|
||||
|
||||
page = client_request.get(
|
||||
'main.manage_template_folder',
|
||||
service_id=service_one['id'],
|
||||
template_folder_id=folder_id
|
||||
)
|
||||
assert page.select_one('input[name=name]') is not None
|
||||
|
||||
|
||||
def test_get_manage_folder_page_no_permissions(client_request, service_one, mock_get_template_folders):
|
||||
folder_id = str(uuid.uuid4())
|
||||
|
||||
client_request.get(
|
||||
'main.manage_template_folder',
|
||||
service_id=service_one['id'],
|
||||
template_folder_id=folder_id,
|
||||
_expected_status=403
|
||||
)
|
||||
|
||||
|
||||
def test_rename_folder(client_request, service_one, mock_get_template_folders, mocker):
|
||||
mock_update = mocker.patch('app.template_folder_api_client.update_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.manage_template_folder',
|
||||
service_id=service_one['id'],
|
||||
template_folder_id=folder_id,
|
||||
_data={"name": "new beautiful name"},
|
||||
_expected_redirect=url_for("main.choose_template",
|
||||
service_id=service_one['id'],
|
||||
template_folder_id=folder_id,
|
||||
_external=True)
|
||||
)
|
||||
|
||||
mock_update.assert_called_once_with(
|
||||
service_one['id'],
|
||||
folder_id,
|
||||
name="new beautiful name"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user