diff --git a/lib/galaxy_test/api/test_folders.py b/lib/galaxy_test/api/test_folders.py new file mode 100644 index 00000000000..0e7b21c1ef1 --- /dev/null +++ b/lib/galaxy_test/api/test_folders.py @@ -0,0 +1,134 @@ +from galaxy_test.base.populators import ( + DatasetCollectionPopulator, + DatasetPopulator, + LibraryPopulator, +) +from ._framework import ApiTestCase + + +class FoldersApiTestCase(ApiTestCase): + + def setUp(self): + super().setUp() + self.dataset_populator = DatasetPopulator(self.galaxy_interactor) + self.dataset_collection_populator = DatasetCollectionPopulator(self.galaxy_interactor) + self.library_populator = LibraryPopulator(self.galaxy_interactor) + + self.library = self.library_populator.new_library("FolderTestsLibrary") + + def test_create(self): + folder = self._create_folder("Test Create Folder") + self._assert_valid_folder(folder) + + def test_permissions(self): + folder = self._create_folder("Test Permissions Folder") + folder_id = folder["id"] + + empty_permissions = self._get_permissions(folder_id) + self._assert_permissions_empty(empty_permissions) + + role_id = self.library_populator.user_private_role_id() + action = "set_permissions" + data = { + "add_ids[]": [role_id], + "manage_ids[]": role_id, # string-lists also supported + "modify_ids[]": [role_id] + } + response = self._post(f"folders/{folder_id}/permissions?action={action}", data=data, admin=True) + self._assert_status_code_is(response, 200) + new_permissions = response.json() + + permissions = self._get_permissions(folder_id) + assert permissions == new_permissions + self._assert_permissions_contains_role(permissions, role_id) + + def test_update(self): + folder = self._create_folder("Test Update Folder") + folder_id = folder["id"] + updated_name = "UPDATED" + updated_desc = "UPDATED DESCRIPTION" + data = { + "name": updated_name, + "description": updated_desc, + } + patch_response = self._patch(f"folders/{folder_id}", data=data, admin=True) + self._assert_status_code_is(patch_response, 200) + updated_folder = patch_response.json() + self._assert_valid_folder(updated_folder) + assert updated_folder["name"] == updated_name + assert updated_folder["description"] == updated_desc + + def test_delete(self): + folder = self._create_folder("Test Delete Folder") + folder_id = folder["id"] + + delete_response = self._delete(f"folders/{folder_id}", admin=True) + self._assert_status_code_is(delete_response, 200) + deleted_folder = delete_response.json() + assert deleted_folder["deleted"] is True + + def test_undelete(self): + folder = self._create_folder("Test Undelete Folder") + folder_id = folder["id"] + + delete_response = self._delete(f"folders/{folder_id}", admin=True) + self._assert_status_code_is(delete_response, 200) + deleted_folder = delete_response.json() + assert deleted_folder["deleted"] is True + + undelete = True + undelete_response = self._delete(f"folders/{folder_id}?undelete={undelete}", admin=True) + self._assert_status_code_is(undelete_response, 200) + undeleted_folder = undelete_response.json() + assert undeleted_folder["deleted"] is False + + def _create_folder(self, name: str): + root_folder_id = self.library["root_folder_id"] + data = { + "name": name, + "description": f"The description of {name}", + } + create_response = self._post(f"folders/{root_folder_id}", data=data, admin=True) + self._assert_status_code_is(create_response, 200) + folder = create_response.json() + return folder + + def _get_permissions(self, folder_id): + response = self._get(f"folders/{folder_id}/permissions", admin=True) + self._assert_status_code_is(response, 200) + permissions = response.json() + self._assert_valid_permissions(permissions) + return permissions + + def _assert_valid_folder(self, folder): + self._assert_has_keys( + folder, + "id", + "name", + "model_class", + "parent_id", + "item_count", + "genome_build", + "update_time", + "deleted", + "library_path", + "parent_library_id" + ) + + def _assert_valid_permissions(self, permissions): + self._assert_has_keys( + permissions, + "modify_folder_role_list", + "manage_folder_role_list", + "add_library_item_role_list", + ) + + def _assert_permissions_empty(self, permissions): + assert permissions["modify_folder_role_list"] == [] + assert permissions["manage_folder_role_list"] == [] + assert permissions["add_library_item_role_list"] == [] + + def _assert_permissions_contains_role(self, permissions, role_id): + assert role_id in permissions["modify_folder_role_list"][0] + assert role_id in permissions["manage_folder_role_list"][0] + assert role_id in permissions["add_library_item_role_list"][0]