Reuse TemplateList class when deleting a folder

Part of moving "get_template_folders" et al. into TemplateList so we
can cache it more effectively. This is slightly less efficient as
iterating a TemplateList will instantiate an object for each item
in the folder; but the difference is minimal.

Note that:

- The default template_type for TemplateList is "all".
- We need to pass realistic template "JSON" in the test now.
This commit is contained in:
Ben Thorner
2022-05-26 13:53:12 +01:00
parent fe13bb8dbc
commit f500db44f1
3 changed files with 4 additions and 11 deletions

View File

@@ -470,10 +470,9 @@ def manage_template_folder(service_id, template_folder_id):
@user_has_permissions('manage_templates')
def delete_template_folder(service_id, template_folder_id):
template_folder = current_service.get_template_folder_with_user_permission_or_403(template_folder_id, current_user)
template_list = TemplateList(service=current_service, template_folder_id=template_folder_id)
if len(current_service.get_template_folders_and_templates(
template_type="all", template_folder_id=template_folder_id
)) > 0:
if not template_list.folder_is_empty:
flash("You must empty this folder before you can delete it", 'info')
return redirect(
url_for(

View File

@@ -650,12 +650,6 @@ class Service(JSONModel, SortByNameMixin):
template,
]
def get_template_folders_and_templates(self, template_type, template_folder_id):
return (
self.get_templates(template_type, template_folder_id)
+ self.get_template_folders(template_type, template_folder_id)
)
@property
def count_of_templates_and_folders(self):
return len(self.all_templates + self.all_template_folders)

View File

@@ -5,7 +5,7 @@ from flask import abort, url_for
from notifications_python_client.errors import HTTPError
from app.models.user import User
from tests import sample_uuid
from tests import sample_uuid, template_json
from tests.conftest import (
SERVICE_ONE_ID,
TEMPLATE_ONE_ID,
@@ -968,7 +968,7 @@ def test_delete_template_folder_should_detect_non_empty_folder_on_get(
]
mocker.patch(
'app.models.service.Service.get_templates',
return_value=[{'id': template_id, 'name': 'template'}],
return_value=[template_json(service_one['id'], template_id)],
)
client_request.get(
'main.delete_template_folder', service_id=service_one['id'],