Warning

This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy_test.api.test_folder_contents

from typing import (
    Any,
    List,
    Optional,
)

from galaxy_test.base.populators import (
    DatasetCollectionPopulator,
    DatasetPopulator,
    LibraryPopulator,
)
from ._framework import ApiTestCase


[docs]class FolderContentsApiTestCase(ApiTestCase):
[docs] 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.history_id = self.dataset_populator.new_history() self.library = self.library_populator.new_private_library("FolderContentsTestsLibrary") self.root_folder_id = self._create_folder_in_library("Test Folder Contents")
[docs] def test_create_hda_with_ldda_message(self): hda_id = self._create_hda() ldda_message = "Test message" data = { "from_hda_id": hda_id, "ldda_message": ldda_message, } ldda = self._create_content_in_folder_with_payload(self.root_folder_id, data) self._assert_has_keys(ldda, "name", "id")
[docs] def test_create_hdca_with_ldda_message(self): contents = ["dataset01", "dataset02"] hdca_id = self._create_hdca_with_contents(contents) ldda_message = "Test message" data = { "from_hdca_id": hdca_id, "ldda_message": ldda_message, } lddas = self._create_content_in_folder_with_payload(self.root_folder_id, data) assert len(contents) == len(lddas)
[docs] def test_index(self): folder_id = self._create_folder_in_library("Test Folder Contents Index") self._create_dataset_in_folder(folder_id) response = self._get(f"folders/{folder_id}/contents") self._assert_status_code_is(response, 200) contents = response.json()["folder_contents"] assert len(contents) == 1
[docs] def test_index_include_deleted(self): folder_name = "Test Folder Contents Index include deleted" folder_id = self._create_folder_in_library(folder_name) hda_id = self._create_dataset_in_folder(folder_id) self._delete_library_dataset(hda_id) response = self._get(f"folders/{folder_id}/contents") self._assert_status_code_is(response, 200) contents = response.json()["folder_contents"] assert len(contents) == 0 include_deleted = True response = self._get(f"folders/{folder_id}/contents?include_deleted={include_deleted}") self._assert_status_code_is(response, 200) contents = response.json()["folder_contents"] assert len(contents) == 1 assert contents[0]["deleted"] is True
[docs] def test_index_limit_offset(self): folder_name = "Test Folder Contents Index limit" folder_id = self._create_folder_in_library(folder_name) num_subfolders = 5 for index in range(num_subfolders): self._create_subfolder_in(folder_id, name=f"Folder_{index}") num_datasets = 5 for _ in range(num_datasets): self._create_dataset_in_folder(folder_id) total_items = num_datasets + num_subfolders response = self._get(f"folders/{folder_id}/contents") self._assert_status_code_is(response, 200) original_contents = response.json()["folder_contents"] assert len(original_contents) == total_items limit = 7 response = self._get(f"folders/{folder_id}/contents?limit={limit}") self._assert_status_code_is(response, 200) contents = response.json()["folder_contents"] assert len(contents) == limit offset = 3 response = self._get(f"folders/{folder_id}/contents?offset={offset}") self._assert_status_code_is(response, 200) contents = response.json()["folder_contents"] assert len(contents) == total_items - offset limit = 4 offset = 4 response = self._get(f"folders/{folder_id}/contents?limit={limit}&offset={offset}") self._assert_status_code_is(response, 200) contents = response.json()["folder_contents"] assert len(contents) == limit expected_query_result = original_contents[offset:offset + limit] for index in range(limit): assert contents[index]["id"] == expected_query_result[index]["id"]
[docs] def test_index_search_text(self): folder_name = "Test Folder Contents Index search text" folder_id = self._create_folder_in_library(folder_name) dataset_names = ["AB", "BC", "ABC"] for name in dataset_names: self._create_dataset_in_folder(folder_id, name) subfolder_names = ["Folder_A", "Folder_C"] for name in subfolder_names: self._create_subfolder_in(folder_id, name) all_names = dataset_names + subfolder_names search_terms = ["A", "B", "C"] for search_text in search_terms: response = self._get(f"folders/{folder_id}/contents?search_text={search_text}") self._assert_status_code_is(response, 200) contents = response.json()["folder_contents"] matching_names = [name for name in all_names if search_text in name] assert len(contents) == len(matching_names)
[docs] def test_index_permissions_include_deleted(self): folder_name = "Test Folder Contents Index permissions include deteleted" folder_id = self._create_folder_in_library(folder_name) num_subfolders = 5 subfolder_ids: List[str] = [] deleted_subfolder_ids: List[str] = [] for index in range(num_subfolders): id = self._create_subfolder_in(folder_id, name=f"Folder_{index}") subfolder_ids.append(id) for index, subfolder_id in enumerate(subfolder_ids): if index % 2 == 0: self._delete_subfolder(subfolder_id) deleted_subfolder_ids.append(subfolder_id) num_datasets = 5 datasets_ids: List[str] = [] deleted_datasets_ids: List[str] = [] for _ in range(num_datasets): id = self._create_dataset_in_folder(folder_id) datasets_ids.append(id) for index, ldda_id in enumerate(datasets_ids): if index % 2 == 0: self._delete_library_dataset(ldda_id) deleted_datasets_ids.append(ldda_id) num_total_contents = num_subfolders + num_datasets num_non_deleted = num_total_contents - len(deleted_subfolder_ids) - len(deleted_datasets_ids) # Verify deleted contents are not listed include_deleted = False response = self._get(f"folders/{folder_id}/contents?include_deleted={include_deleted}") self._assert_status_code_is(response, 200) contents = response.json()["folder_contents"] assert len(contents) == num_non_deleted include_deleted = True # Admins can see everything... response = self._get(f"folders/{folder_id}/contents?include_deleted={include_deleted}", admin=True) self._assert_status_code_is(response, 200) contents = response.json()["folder_contents"] assert len(contents) == num_total_contents # Owner can see everything too response = self._get(f"folders/{folder_id}/contents?include_deleted={include_deleted}") self._assert_status_code_is(response, 200) contents = response.json()["folder_contents"] assert len(contents) == num_total_contents # Users with access but no modify permission can't see deleted with self._different_user(): different_user_role_id = self.dataset_populator.user_private_role_id() self._allow_library_access_to_user_role(different_user_role_id) with self._different_user(): response = self._get(f"folders/{folder_id}/contents?include_deleted={include_deleted}") self._assert_status_code_is(response, 200) contents = response.json()["folder_contents"] assert len(contents) == num_non_deleted
def _create_folder_in_library(self, name: str) -> Any: root_folder_id = self.library["root_folder_id"] return self._create_subfolder_in(root_folder_id, name) def _create_subfolder_in(self, folder_id: str, name: str) -> str: data = { "name": name, "description": f"The description of {name}", } create_response = self._post(f"folders/{folder_id}", data=data, json=True) self._assert_status_code_is(create_response, 200) folder = create_response.json() return folder["id"] def _create_dataset_in_folder(self, folder_id: str, name: Optional[str] = None) -> str: hda_id = self._create_hda(name) data = { "from_hda_id": hda_id, } ldda = self._create_content_in_folder_with_payload(folder_id, data) return ldda["id"] def _create_content_in_folder_with_payload(self, folder_id: str, payload) -> Any: create_response = self._post(f"folders/{folder_id}/contents", data=payload, json=True) self._assert_status_code_is(create_response, 200) return create_response.json() def _create_hda(self, name: Optional[str] = None) -> str: hda = self.dataset_populator.new_dataset(self.history_id, name=name) hda_id = hda["id"] return hda_id def _create_hdca_with_contents(self, contents: List[str]) -> str: hdca = self.dataset_collection_populator.create_list_in_history(self.history_id, contents=contents, direct_upload=True).json()["outputs"][0] hdca_id = hdca["id"] return hdca_id def _delete_library_dataset(self, ldda_id: str) -> None: delete_response = self._delete(f"libraries/datasets/{ldda_id}") self._assert_status_code_is(delete_response, 200) def _delete_subfolder(self, folder_id: str) -> None: delete_response = self._delete(f"folders/{folder_id}") self._assert_status_code_is(delete_response, 200) def _allow_library_access_to_user_role(self, role_id: str): library_id = self.library["id"] action = "set_permissions" data = { "access_ids[]": role_id, } response = self._post(f"libraries/{library_id}/permissions?action={action}", data=data, admin=True, json=True) self._assert_status_code_is(response, 200)