diff --git a/app/main/views/templates.py b/app/main/views/templates.py index 98eee35af..3285534d9 100644 --- a/app/main/views/templates.py +++ b/app/main/views/templates.py @@ -119,6 +119,7 @@ def choose_template(service_id, template_type='all', template_folder_id=None): return render_template( 'views/templates/choose.html', + current_template_folder_id=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), 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//templates/add", methods=['GET', 'POST']) +@main.route("/services//templates/folders//add", methods=['GET', 'POST']) @login_required @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( include_letters=current_service.has_permission('letter'), @@ -228,6 +230,7 @@ def add_template_by_type(service_id): '.add_service_template', service_id=service_id, template_type=form.template_type.data, + template_folder_id=template_folder_id, )) 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//templates/add-folder", methods=['GET', 'POST']) -def add_template_folder(service_id): +@main.route("/services//templates/folders//add-folder", methods=['GET', 'POST']) +def add_template_folder(service_id, template_folder_id=None): if not current_service.has_permission('edit_folders'): abort(403) form = TemplateFolderForm() 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( - 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( @@ -315,9 +321,11 @@ def add_template_folder(service_id): @main.route("/services//templates/add-", methods=['GET', 'POST']) +@main.route("/services//templates/folders//add-", + methods=['GET', 'POST']) @login_required @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']: abort(404) diff --git a/app/templates/views/templates/choose.html b/app/templates/views/templates/choose.html index 25d51820e..dfff6b425 100644 --- a/app/templates/views/templates/choose.html +++ b/app/templates/views/templates/choose.html @@ -64,7 +64,7 @@ {% if current_user.has_permissions('manage_templates') %} {% endif %} diff --git a/tests/app/main/views/test_template_folders.py b/tests/app/main/views/test_template_folders.py index 6c5acbc5e..74429813b 100644 --- a/tests/app/main/views/test_template_folders.py +++ b/tests/app/main/views/test_template_folders.py @@ -9,9 +9,11 @@ PARENT_FOLDER_ID = '7e979e79-d970-43a5-ac69-b625a8d147b0' 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( client_request, service_one, + parent_folder_id, mocker, mock_get_service_templates, mock_get_organisations_and_services_for_user, @@ -22,6 +24,7 @@ def test_add_page_shows_option_for_folder( page = client_request.get( 'main.add_template_by_type', service_id=service_one['id'], + template_folder_id=parent_folder_id, _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'] - 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 @@ -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) -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') service_one['permissions'] += ['edit_folders'] @@ -58,15 +67,17 @@ def test_post_add_template_folder_page(client_request, service_one, mocker): client_request.post( 'main.add_template_folder', service_id=service_one['id'], + template_folder_id=parent_folder_id, _data={'name': 'foo'}, _expected_redirect=url_for( 'main.choose_template', service_id=service_one['id'], + template_folder_id=parent_folder_id, _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(