mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-08 18:33:12 -04:00
Create new folders inside the current folder
When adding a new folder it is created inside the currently active one. The user is returned to the previously active folder page, which shows the added folder. This adds a new route to the add template/folder views. Thankfully, `url_for` recognizes when `template_folder_id` is `None` and will use the URL without `/folders/...`, so users without folder permissions should be unaffected by this change.
This commit is contained in:
@@ -119,6 +119,7 @@ def choose_template(service_id, template_type='all', template_folder_id=None):
|
|||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/templates/choose.html',
|
'views/templates/choose.html',
|
||||||
|
current_template_folder_id=template_folder_id,
|
||||||
template_folder_path=current_service.get_template_folder_path(template_folder_id),
|
template_folder_path=current_service.get_template_folder_path(template_folder_id),
|
||||||
template_folders=current_service.get_template_folders(template_folder_id),
|
template_folders=current_service.get_template_folders(template_folder_id),
|
||||||
templates=current_service.get_templates(template_type, template_folder_id),
|
templates=current_service.get_templates(template_type, template_folder_id),
|
||||||
@@ -179,9 +180,10 @@ def view_template_version_preview(service_id, template_id, version, filetype):
|
|||||||
|
|
||||||
|
|
||||||
@main.route("/services/<service_id>/templates/add", methods=['GET', 'POST'])
|
@main.route("/services/<service_id>/templates/add", methods=['GET', 'POST'])
|
||||||
|
@main.route("/services/<service_id>/templates/folders/<template_folder_id>/add", methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('manage_templates')
|
@user_has_permissions('manage_templates')
|
||||||
def add_template_by_type(service_id):
|
def add_template_by_type(service_id, template_folder_id=None):
|
||||||
|
|
||||||
form = ChooseTemplateType(
|
form = ChooseTemplateType(
|
||||||
include_letters=current_service.has_permission('letter'),
|
include_letters=current_service.has_permission('letter'),
|
||||||
@@ -228,6 +230,7 @@ def add_template_by_type(service_id):
|
|||||||
'.add_service_template',
|
'.add_service_template',
|
||||||
service_id=service_id,
|
service_id=service_id,
|
||||||
template_type=form.template_type.data,
|
template_type=form.template_type.data,
|
||||||
|
template_folder_id=template_folder_id,
|
||||||
))
|
))
|
||||||
|
|
||||||
return render_template('views/templates/add.html', form=form)
|
return render_template('views/templates/add.html', form=form)
|
||||||
@@ -296,16 +299,19 @@ def action_blocked(service_id, notification_type, return_to, template_id):
|
|||||||
|
|
||||||
|
|
||||||
@main.route("/services/<service_id>/templates/add-folder", methods=['GET', 'POST'])
|
@main.route("/services/<service_id>/templates/add-folder", methods=['GET', 'POST'])
|
||||||
def add_template_folder(service_id):
|
@main.route("/services/<service_id>/templates/folders/<template_folder_id>/add-folder", methods=['GET', 'POST'])
|
||||||
|
def add_template_folder(service_id, template_folder_id=None):
|
||||||
if not current_service.has_permission('edit_folders'):
|
if not current_service.has_permission('edit_folders'):
|
||||||
abort(403)
|
abort(403)
|
||||||
|
|
||||||
form = TemplateFolderForm()
|
form = TemplateFolderForm()
|
||||||
|
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
template_folder_api_client.create_template_folder(current_service.id, name=form.name.data, parent_id=None)
|
template_folder_api_client.create_template_folder(
|
||||||
|
current_service.id, name=form.name.data, parent_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_id)
|
||||||
)
|
)
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
@@ -315,9 +321,11 @@ def add_template_folder(service_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>",
|
||||||
|
methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('manage_templates')
|
@user_has_permissions('manage_templates')
|
||||||
def add_service_template(service_id, template_type):
|
def add_service_template(service_id, template_type, template_folder_id=None):
|
||||||
|
|
||||||
if template_type not in ['sms', 'email', 'letter']:
|
if template_type not in ['sms', 'email', 'letter']:
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|||||||
@@ -64,7 +64,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{% 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) }}" 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>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -9,9 +9,11 @@ PARENT_FOLDER_ID = '7e979e79-d970-43a5-ac69-b625a8d147b0'
|
|||||||
CHILD_FOLDER_ID = '92ee1ee0-e4ee-4dcc-b1a7-a5da9ebcfa2b'
|
CHILD_FOLDER_ID = '92ee1ee0-e4ee-4dcc-b1a7-a5da9ebcfa2b'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('parent_folder_id', [None, PARENT_FOLDER_ID])
|
||||||
def test_add_page_shows_option_for_folder(
|
def test_add_page_shows_option_for_folder(
|
||||||
client_request,
|
client_request,
|
||||||
service_one,
|
service_one,
|
||||||
|
parent_folder_id,
|
||||||
mocker,
|
mocker,
|
||||||
mock_get_service_templates,
|
mock_get_service_templates,
|
||||||
mock_get_organisations_and_services_for_user,
|
mock_get_organisations_and_services_for_user,
|
||||||
@@ -22,6 +24,7 @@ def test_add_page_shows_option_for_folder(
|
|||||||
page = client_request.get(
|
page = client_request.get(
|
||||||
'main.add_template_by_type',
|
'main.add_template_by_type',
|
||||||
service_id=service_one['id'],
|
service_id=service_one['id'],
|
||||||
|
template_folder_id=parent_folder_id,
|
||||||
_test_page_title=False
|
_test_page_title=False
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -37,10 +40,15 @@ def test_add_page_shows_option_for_folder(
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def test_get_add_template_folder_page(client_request, service_one):
|
@pytest.mark.parametrize('parent_folder_id', [None, PARENT_FOLDER_ID])
|
||||||
|
def test_get_add_template_folder_page(client_request, service_one, parent_folder_id):
|
||||||
service_one['permissions'] += ['edit_folders']
|
service_one['permissions'] += ['edit_folders']
|
||||||
|
|
||||||
page = client_request.get('main.add_template_folder', service_id=service_one['id'])
|
page = client_request.get(
|
||||||
|
'main.add_template_folder',
|
||||||
|
service_id=service_one['id'],
|
||||||
|
template_folder_id=parent_folder_id
|
||||||
|
)
|
||||||
|
|
||||||
assert page.find('input', attrs={'name': 'name'}) is not None
|
assert page.find('input', attrs={'name': 'name'}) is not None
|
||||||
|
|
||||||
@@ -50,7 +58,8 @@ def test_add_template_folder_page_rejects_if_service_doesnt_have_permission(clie
|
|||||||
client_request.post('main.add_template_folder', service_id=service_one['id'], _expected_status=403)
|
client_request.post('main.add_template_folder', service_id=service_one['id'], _expected_status=403)
|
||||||
|
|
||||||
|
|
||||||
def test_post_add_template_folder_page(client_request, service_one, mocker):
|
@pytest.mark.parametrize('parent_folder_id', [None, PARENT_FOLDER_ID])
|
||||||
|
def test_post_add_template_folder_page(client_request, service_one, mocker, parent_folder_id):
|
||||||
mock_create = mocker.patch('app.template_folder_api_client.create_template_folder')
|
mock_create = mocker.patch('app.template_folder_api_client.create_template_folder')
|
||||||
|
|
||||||
service_one['permissions'] += ['edit_folders']
|
service_one['permissions'] += ['edit_folders']
|
||||||
@@ -58,15 +67,17 @@ def test_post_add_template_folder_page(client_request, service_one, mocker):
|
|||||||
client_request.post(
|
client_request.post(
|
||||||
'main.add_template_folder',
|
'main.add_template_folder',
|
||||||
service_id=service_one['id'],
|
service_id=service_one['id'],
|
||||||
|
template_folder_id=parent_folder_id,
|
||||||
_data={'name': 'foo'},
|
_data={'name': 'foo'},
|
||||||
_expected_redirect=url_for(
|
_expected_redirect=url_for(
|
||||||
'main.choose_template',
|
'main.choose_template',
|
||||||
service_id=service_one['id'],
|
service_id=service_one['id'],
|
||||||
|
template_folder_id=parent_folder_id,
|
||||||
_external=True,
|
_external=True,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
mock_create.assert_called_once_with(service_one['id'], name='foo', parent_id=None)
|
mock_create.assert_called_once_with(service_one['id'], name='foo', parent_id=parent_folder_id)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
|||||||
Reference in New Issue
Block a user