mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-09-09 06:03:12 -04:00
add template folder form
This commit is contained in:
committed by
Alexey Bezhan
parent
7cbf5de240
commit
1ecf360e7f
@@ -1100,3 +1100,7 @@ class ReturnedLettersForm(StripWhitespaceForm):
|
|||||||
DataRequired(message="Can’t be empty"),
|
DataRequired(message="Can’t be empty"),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TemplateFolderForm(StripWhitespaceForm):
|
||||||
|
name = StringField('Folder name', validators=[DataRequired(message='Can’t be empty')])
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from app import (
|
|||||||
service_api_client,
|
service_api_client,
|
||||||
template_statistics_client,
|
template_statistics_client,
|
||||||
user_api_client,
|
user_api_client,
|
||||||
|
template_folder_api_client
|
||||||
)
|
)
|
||||||
from app.main import main
|
from app.main import main
|
||||||
from app.main.forms import (
|
from app.main.forms import (
|
||||||
@@ -23,6 +24,7 @@ from app.main.forms import (
|
|||||||
SearchTemplatesForm,
|
SearchTemplatesForm,
|
||||||
SetTemplateSenderForm,
|
SetTemplateSenderForm,
|
||||||
SMSTemplateForm,
|
SMSTemplateForm,
|
||||||
|
TemplateFolderForm
|
||||||
)
|
)
|
||||||
from app.main.views.send import get_example_csv_rows, get_sender_details
|
from app.main.views.send import get_example_csv_rows, get_sender_details
|
||||||
from app.models.service import Service
|
from app.models.service import Service
|
||||||
@@ -290,18 +292,23 @@ 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_folder(service_id):
|
def add_template_folder(service_id):
|
||||||
if not current_service.has_permission('edit_folders'):
|
if not current_service.has_permission('edit_folders'):
|
||||||
abort(403)
|
abort(403)
|
||||||
|
|
||||||
form = NewFolderForm()
|
form = TemplateFolderForm()
|
||||||
|
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
folder_api_client.create_template_folder(form.name.data, current_service.id, parent_id=None)
|
template_folder_api_client.create_template_folder(current_service.id, name=form.name.data, parent_id=None)
|
||||||
return redirect(
|
return redirect(
|
||||||
url_for('.view_templates', service_id=service_id)
|
url_for('.choose_template', service_id=service_id)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
return render_template(
|
||||||
|
'views/templates/add-template-folder.html',
|
||||||
|
form=form
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@main.route("/services/<service_id>/templates/add-<template_type>", methods=['GET', 'POST'])
|
@main.route("/services/<service_id>/templates/add-<template_type>", methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from app.notify_client.job_api_client import job_api_client
|
|||||||
from app.notify_client.organisations_api_client import organisations_client
|
from app.notify_client.organisations_api_client import organisations_client
|
||||||
from app.notify_client.service_api_client import service_api_client
|
from app.notify_client.service_api_client import service_api_client
|
||||||
from app.notify_client.user_api_client import user_api_client
|
from app.notify_client.user_api_client import user_api_client
|
||||||
from app.notify_client.template_folder_client import template_folder_client
|
from app.notify_client.template_folder_api_client import template_folder_api_client
|
||||||
from app.utils import get_default_sms_sender
|
from app.utils import get_default_sms_sender
|
||||||
|
|
||||||
|
|
||||||
@@ -256,4 +256,4 @@ class Service():
|
|||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def template_folders(self):
|
def template_folders(self):
|
||||||
return template_folder_client.get_template_folders(self.id)
|
return template_folder_api_client.get_template_folders(self.id)
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ class HeaderNavigation(Navigation):
|
|||||||
'add_service',
|
'add_service',
|
||||||
'add_service_template',
|
'add_service_template',
|
||||||
'add_template_by_type',
|
'add_template_by_type',
|
||||||
'add_folder',
|
'add_template_folder',
|
||||||
'agreement',
|
'agreement',
|
||||||
'api_callbacks',
|
'api_callbacks',
|
||||||
'api_documentation',
|
'api_documentation',
|
||||||
@@ -300,7 +300,7 @@ class MainNavigation(Navigation):
|
|||||||
'action_blocked',
|
'action_blocked',
|
||||||
'add_service_template',
|
'add_service_template',
|
||||||
'add_template_by_type',
|
'add_template_by_type',
|
||||||
'add_folder',
|
'add_template_folder',
|
||||||
'check_messages',
|
'check_messages',
|
||||||
'check_notification',
|
'check_notification',
|
||||||
'choose_template',
|
'choose_template',
|
||||||
@@ -554,7 +554,7 @@ class CaseworkNavigation(Navigation):
|
|||||||
'add_service',
|
'add_service',
|
||||||
'add_service_template',
|
'add_service_template',
|
||||||
'add_template_by_type',
|
'add_template_by_type',
|
||||||
'add_folder',
|
'add_template_folder',
|
||||||
'agreement',
|
'agreement',
|
||||||
'api_callbacks',
|
'api_callbacks',
|
||||||
'api_documentation',
|
'api_documentation',
|
||||||
@@ -790,7 +790,7 @@ class OrgNavigation(Navigation):
|
|||||||
'add_service',
|
'add_service',
|
||||||
'add_service_template',
|
'add_service_template',
|
||||||
'add_template_by_type',
|
'add_template_by_type',
|
||||||
'add_folder',
|
'add_template_folder',
|
||||||
'agreement',
|
'agreement',
|
||||||
'api_callbacks',
|
'api_callbacks',
|
||||||
'api_documentation',
|
'api_documentation',
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{% extends "withnav_template.html" %}
|
{% extends "withnav_template.html" %}
|
||||||
{% from "components/textbox.html" import textbox %}
|
{% from "components/textbox.html" import textbox %}
|
||||||
{% from "components/page-footer.html" import page_footer %}
|
{% from "components/page-footer.html" import page_footer %}
|
||||||
|
|||||||
20
app/templates/views/templates/add-template-folder.html
Normal file
20
app/templates/views/templates/add-template-folder.html
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
{% 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 %}
|
||||||
|
Add a folder
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block maincolumn_content %}
|
||||||
|
|
||||||
|
<h1 class="heading-large">Add a folder</h1>
|
||||||
|
|
||||||
|
{% call form_wrapper() %}
|
||||||
|
{{ textbox(form.name) }}
|
||||||
|
{{ page_footer('Save') }}
|
||||||
|
{% endcall %}
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
|
from flask import url_for
|
||||||
|
|
||||||
|
|
||||||
def test_add_folder(
|
def test_add_page_shows_option_for_folder(
|
||||||
client_request,
|
client_request,
|
||||||
service_one,
|
service_one,
|
||||||
mocker,
|
mocker,
|
||||||
@@ -26,3 +27,35 @@ def test_add_folder(
|
|||||||
'Copy of an existing template',
|
'Copy of an existing template',
|
||||||
'Folder'
|
'Folder'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_add_template_folder_page(client_request, service_one):
|
||||||
|
service_one['permissions'] += ['edit_folders']
|
||||||
|
|
||||||
|
page = client_request.get('main.add_template_folder', service_id=service_one['id'])
|
||||||
|
|
||||||
|
assert page.find('input', attrs={'name': 'name'}) is not None
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_template_folder_page_rejects_if_service_doesnt_have_permission(client_request, service_one):
|
||||||
|
client_request.get('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):
|
||||||
|
mock_create = mocker.patch('app.template_folder_api_client.create_template_folder')
|
||||||
|
|
||||||
|
service_one['permissions'] += ['edit_folders']
|
||||||
|
|
||||||
|
client_request.post(
|
||||||
|
'main.add_template_folder',
|
||||||
|
service_id=service_one['id'],
|
||||||
|
_data={'name': 'foo'},
|
||||||
|
_expected_redirect=url_for(
|
||||||
|
'main.choose_template',
|
||||||
|
service_id=service_one['id'],
|
||||||
|
_external=True,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
mock_create.assert_called_once_with(service_one['id'], name='foo', parent_id=None)
|
||||||
|
|||||||
Reference in New Issue
Block a user