diff --git a/app/models/template_list.py b/app/models/template_list.py index 3e43aa30c..4621f6735 100644 --- a/app/models/template_list.py +++ b/app/models/template_list.py @@ -170,6 +170,7 @@ class TemplateListFolder(TemplateListItem): super().__init__(folder, ancestors) self.folder = folder self.service_id = service_id + self.folders = folders self.number_of_templates = len(templates) self.number_of_folders = len(folders) diff --git a/tests/app/models/test_service.py b/tests/app/models/test_service.py index 8a7454673..d10199a9a 100644 --- a/tests/app/models/test_service.py +++ b/tests/app/models/test_service.py @@ -1,144 +1,10 @@ -import uuid - import pytest from app.models.organisation import Organisation from app.models.service import Service -from app.models.user import User from tests import organisation_json, service_json from tests.conftest import ORGANISATION_ID, create_folder, create_template -INV_PARENT_FOLDER_ID = '7e979e79-d970-43a5-ac69-b625a8d147b0' -INV_CHILD_1_FOLDER_ID = '92ee1ee0-e4ee-4dcc-b1a7-a5da9ebcfa2b' -VIS_PARENT_FOLDER_ID = 'bbbb222b-2b22-2b22-222b-b222b22b2222' -INV_CHILD_2_FOLDER_ID = 'fafe723f-1d39-4a10-865f-e551e03d8886' - - -def _get_all_folders(active_user_with_permissions): - return [ - { - 'name': "Invisible folder", - 'id': str(uuid.uuid4()), - 'parent_id': None, - 'users_with_permission': [] - }, - { - 'name': "Parent 1 - invisible", - 'id': INV_PARENT_FOLDER_ID, - 'parent_id': None, - 'users_with_permission': [] - }, - { - 'name': "1's Visible child", - 'id': str(uuid.uuid4()), - 'parent_id': INV_PARENT_FOLDER_ID, - 'users_with_permission': [active_user_with_permissions['id']], - }, - { - 'name': "1's Invisible child", - 'id': INV_CHILD_1_FOLDER_ID, - 'parent_id': INV_PARENT_FOLDER_ID, - 'users_with_permission': [] - }, - { - 'name': "1's Visible grandchild", - 'id': str(uuid.uuid4()), - 'parent_id': INV_CHILD_1_FOLDER_ID, - 'users_with_permission': [active_user_with_permissions['id']], - }, - { - 'name': "Parent 2 - visible", - 'id': VIS_PARENT_FOLDER_ID, - 'parent_id': None, - 'users_with_permission': [active_user_with_permissions['id']], - }, - { - 'name': "2's Visible child", - 'id': str(uuid.uuid4()), - 'parent_id': VIS_PARENT_FOLDER_ID, - 'users_with_permission': [active_user_with_permissions['id']], - }, - { - 'name': "2's Invisible child", - 'id': INV_CHILD_2_FOLDER_ID, - 'parent_id': VIS_PARENT_FOLDER_ID, - 'users_with_permission': [] - }, - { - 'name': "2's Visible grandchild", - 'id': str(uuid.uuid4()), - 'parent_id': INV_CHILD_2_FOLDER_ID, - 'users_with_permission': [active_user_with_permissions['id']], - }, - ] - - -def test_get_user_template_folders_only_returns_folders_visible_to_user( - notify_admin, - mock_get_template_folders, - service_one, - active_user_with_permissions, - mocker -): - mock_get_template_folders.return_value = _get_all_folders(active_user_with_permissions) - service = Service(service_one) - user = User(active_user_with_permissions) - - result_folder_names = tuple( - result['name'] for result in - service.get_user_template_folders(user) - ) - - assert result_folder_names == ( - ["Parent 1 - invisible", "1's Visible child"], - ["Parent 1 - invisible", ["1's Invisible child", "1's Visible grandchild"]], - "2's Visible child", - ["2's Invisible child", "2's Visible grandchild"], - "Parent 2 - visible", - ) - - -def test_get_template_folders_shows_user_folders_when_user_id_passed_in( - notify_admin, - mock_get_template_folders, - service_one, - active_user_with_permissions, - mocker -): - mock_get_template_folders.return_value = _get_all_folders(active_user_with_permissions) - service = Service(service_one) - user = User(active_user_with_permissions) - - result_folder_names = tuple( - result['name'] for result in - service.get_template_folders(parent_folder_id=VIS_PARENT_FOLDER_ID, user=user) - ) - - assert result_folder_names == ( - "2's Visible child", - ["2's Invisible child", "2's Visible grandchild"], - ) - - -def test_get_template_folders_shows_all_folders_when_user_id_not_passed_in( - mock_get_template_folders, - service_one, - active_user_with_permissions, - mocker -): - mock_get_template_folders.return_value = _get_all_folders(active_user_with_permissions) - service = Service(service_one) - - result_folder_names = tuple( - result['name'] for result in - service.get_template_folders(parent_folder_id=VIS_PARENT_FOLDER_ID) - ) - - assert result_folder_names == ( - "2's Invisible child", - "2's Visible child", - ) - def test_organisation_type_when_services_organisation_has_no_org_type(mocker, service_one): service = Service(service_one) diff --git a/tests/app/models/test_template_list.py b/tests/app/models/test_template_list.py new file mode 100644 index 000000000..b8a3d5f4f --- /dev/null +++ b/tests/app/models/test_template_list.py @@ -0,0 +1,148 @@ +import uuid + +from app.models.service import Service +from app.models.template_list import TemplateList +from app.models.user import User + +INV_PARENT_FOLDER_ID = '7e979e79-d970-43a5-ac69-b625a8d147b0' +INV_CHILD_1_FOLDER_ID = '92ee1ee0-e4ee-4dcc-b1a7-a5da9ebcfa2b' +VIS_PARENT_FOLDER_ID = 'bbbb222b-2b22-2b22-222b-b222b22b2222' +INV_CHILD_2_FOLDER_ID = 'fafe723f-1d39-4a10-865f-e551e03d8886' + + +def _get_all_folders(active_user_with_permissions): + return [ + { + 'name': "Invisible folder", + 'id': str(uuid.uuid4()), + 'parent_id': None, + 'users_with_permission': [] + }, + { + 'name': "Parent 1 - invisible", + 'id': INV_PARENT_FOLDER_ID, + 'parent_id': None, + 'users_with_permission': [] + }, + { + 'name': "1's Visible child", + 'id': str(uuid.uuid4()), + 'parent_id': INV_PARENT_FOLDER_ID, + 'users_with_permission': [active_user_with_permissions['id']], + }, + { + 'name': "1's Invisible child", + 'id': INV_CHILD_1_FOLDER_ID, + 'parent_id': INV_PARENT_FOLDER_ID, + 'users_with_permission': [] + }, + { + 'name': "1's Visible grandchild", + 'id': str(uuid.uuid4()), + 'parent_id': INV_CHILD_1_FOLDER_ID, + 'users_with_permission': [active_user_with_permissions['id']], + }, + { + 'name': "Parent 2 - visible", + 'id': VIS_PARENT_FOLDER_ID, + 'parent_id': None, + 'users_with_permission': [active_user_with_permissions['id']], + }, + { + 'name': "2's Visible child", + 'id': str(uuid.uuid4()), + 'parent_id': VIS_PARENT_FOLDER_ID, + 'users_with_permission': [active_user_with_permissions['id']], + }, + { + 'name': "2's Invisible child", + 'id': INV_CHILD_2_FOLDER_ID, + 'parent_id': VIS_PARENT_FOLDER_ID, + 'users_with_permission': [] + }, + { + 'name': "2's Visible grandchild", + 'id': str(uuid.uuid4()), + 'parent_id': INV_CHILD_2_FOLDER_ID, + 'users_with_permission': [active_user_with_permissions['id']], + }, + ] + + +def test_template_list_yields_folders_visible_to_user( + notify_admin, + mock_get_template_folders, + mock_get_service_templates, + service_one, + active_user_with_permissions, + mocker +): + mock_get_template_folders.return_value = _get_all_folders(active_user_with_permissions) + service = Service(service_one) + user = User(active_user_with_permissions) + + result_folder_names = tuple( + result.name for result in + TemplateList(service=service, user=user) + if result.is_folder + ) + + assert result_folder_names == ( + ["Parent 1 - invisible", "1's Visible child"], + ["Parent 1 - invisible", ["1's Invisible child", "1's Visible grandchild"]], + "Parent 2 - visible", + "2's Visible child", + ["2's Invisible child", "2's Visible grandchild"], + ) + + +def test_template_list_folder_yields_user_folders_when_user_id_passed_in( + notify_admin, + mock_get_template_folders, + mock_get_service_templates, + service_one, + active_user_with_permissions, + mocker +): + mock_get_template_folders.return_value = _get_all_folders(active_user_with_permissions) + service = Service(service_one) + user = User(active_user_with_permissions) + + second_parent = next( + result for result in TemplateList(service=service, user=user) + if result.id == VIS_PARENT_FOLDER_ID + ) + + result_folder_names = tuple( + result['name'] for result in second_parent.folders + ) + + assert result_folder_names == ( + "2's Visible child", + ["2's Invisible child", "2's Visible grandchild"], + ) + + +def test_template_list_folder_yields_all_folders_when_user_id_not_passed_in( + mock_get_template_folders, + mock_get_service_templates, + service_one, + active_user_with_permissions, + mocker +): + mock_get_template_folders.return_value = _get_all_folders(active_user_with_permissions) + service = Service(service_one) + + second_parent = next( + result for result in TemplateList(service=service) + if result.id == VIS_PARENT_FOLDER_ID + ) + + result_folder_names = tuple( + result['name'] for result in second_parent.folders + ) + + assert result_folder_names == ( + "2's Invisible child", + "2's Visible child", + )