mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-18 13:39:41 -04: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/add-<template_type>", methods=['GET', 'POST'])
|
||||||
@main.route("/services/<service_id>/templates/folders/<template_folder_id>/add-<template_type>",
|
@main.route("/services/<service_id>/templates/folders/<template_folder_id>/add-<template_type>",
|
||||||
methods=['GET', 'POST'])
|
methods=['GET', 'POST'])
|
||||||
|
|||||||
@@ -172,6 +172,7 @@ class HeaderNavigation(Navigation):
|
|||||||
'letter_jobs',
|
'letter_jobs',
|
||||||
'link_service_to_organisation',
|
'link_service_to_organisation',
|
||||||
'manage_org_users',
|
'manage_org_users',
|
||||||
|
'manage_template_folder',
|
||||||
'manage_users',
|
'manage_users',
|
||||||
'monthly',
|
'monthly',
|
||||||
'new_password',
|
'new_password',
|
||||||
@@ -310,6 +311,7 @@ class MainNavigation(Navigation):
|
|||||||
'copy_template',
|
'copy_template',
|
||||||
'delete_service_template',
|
'delete_service_template',
|
||||||
'edit_service_template',
|
'edit_service_template',
|
||||||
|
'manage_template_folder',
|
||||||
'send_messages',
|
'send_messages',
|
||||||
'send_one_off',
|
'send_one_off',
|
||||||
'send_one_off_step',
|
'send_one_off_step',
|
||||||
@@ -625,6 +627,7 @@ class CaseworkNavigation(Navigation):
|
|||||||
'link_service_to_organisation',
|
'link_service_to_organisation',
|
||||||
'live_services',
|
'live_services',
|
||||||
'manage_org_users',
|
'manage_org_users',
|
||||||
|
'manage_template_folder',
|
||||||
'manage_users',
|
'manage_users',
|
||||||
'monthly',
|
'monthly',
|
||||||
'new_password',
|
'new_password',
|
||||||
@@ -857,6 +860,7 @@ class OrgNavigation(Navigation):
|
|||||||
'letter_jobs',
|
'letter_jobs',
|
||||||
'link_service_to_organisation',
|
'link_service_to_organisation',
|
||||||
'live_services',
|
'live_services',
|
||||||
|
'manage_template_folder',
|
||||||
'manage_users',
|
'manage_users',
|
||||||
'monthly',
|
'monthly',
|
||||||
'new_password',
|
'new_password',
|
||||||
|
|||||||
@@ -43,5 +43,11 @@ class TemplateFolderAPIClient(NotifyAdminAPIClient):
|
|||||||
template_ids,
|
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()
|
template_folder_api_client = TemplateFolderAPIClient()
|
||||||
|
|||||||
@@ -65,6 +65,10 @@
|
|||||||
{% if current_user.has_permissions('manage_templates') %}
|
{% if current_user.has_permissions('manage_templates') %}
|
||||||
<div class="column-one-third">
|
<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>
|
<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>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</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['subject'],
|
||||||
data['process_type'],
|
data['process_type'],
|
||||||
data['parent_folder_id'])
|
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