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_folders
from galaxy_test.base.decorators import requires_new_library
from galaxy_test.base.populators import (
DatasetPopulator,
LibraryPopulator,
)
from ._framework import ApiTestCase
[docs]class TestFoldersApi(ApiTestCase):
dataset_populator: DatasetPopulator
[docs] def setUp(self):
super().setUp()
self.dataset_populator = DatasetPopulator(self.galaxy_interactor)
self.library_populator = LibraryPopulator(self.galaxy_interactor)
self.library = self.library_populator.new_library("FolderTestsLibrary")
[docs] @requires_new_library
def test_create(self):
folder = self._create_folder("Test Create Folder")
self._assert_valid_folder(folder)
# assert that listing items in folder works.
# this is a regression test
response = self._get(f"libraries/{folder['parent_library_id']}/contents")
response.raise_for_status()
[docs] @requires_new_library
def test_list_library(self):
library, _ = self.library_populator.fetch_single_url_to_folder()
library = self._list_library(library["id"])
assert len(library) == 2
folders = [folder for folder in library if folder["type"] == "folder"]
assert len(folders) == 1
files = [file for file in library if file["type"] == "file"]
assert len(files) == 1
[docs] @requires_new_library
def test_create_without_name_raises_400(self):
root_folder_id = self.library["root_folder_id"]
data = {
"description": "Description only",
}
create_response = self._post(f"folders/{root_folder_id}", data=data, admin=True)
self._assert_status_code_is(create_response, 400)
[docs] @requires_new_library
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, json=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)
[docs] @requires_new_library
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,
}
put_response = self._put(f"folders/{folder_id}", data=data, admin=True, json=True)
self._assert_status_code_is(put_response, 200)
updated_folder = put_response.json()
self._assert_valid_folder(updated_folder)
assert updated_folder["name"] == updated_name
assert updated_folder["description"] == updated_desc
[docs] @requires_new_library
def test_delete(self):
folder = self._create_folder("Test Delete Folder")
folder_id = folder["id"]
deleted_folder = self._delete_folder(folder_id)
assert deleted_folder["deleted"] is True
[docs] @requires_new_library
def test_undelete(self):
folder = self._create_folder("Test Undelete Folder")
folder_id = folder["id"]
deleted_folder = self._delete_folder(folder_id)
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
[docs] @requires_new_library
def test_import_folder_to_history(self):
library, response = self.library_populator.fetch_single_url_to_folder()
dataset = self.library_populator.get_library_contents_with_path(library["id"], "/4.bed")
with self.dataset_populator.test_history() as history_id:
create_data = {"source": "library_folder", "content": dataset["folder_id"]}
create_response = self._post(f"histories/{history_id}/contents", create_data, json=True)
create_response.raise_for_status()
datasets = create_response.json()
assert len(datasets) == 1
assert datasets[0]["name"] == "4.bed"
[docs] @requires_new_library
def test_update_deleted_raise_403(self):
folder = self._create_folder("Test Update Deleted Folder")
folder_id = folder["id"]
deleted_folder = self._delete_folder(folder_id)
assert deleted_folder["deleted"] is True
data = {
"name": "test",
}
put_response = self._put(f"folders/{folder_id}", data=data, admin=True, json=True)
self._assert_status_code_is(put_response, 403)
def _list_library(self, library_id):
response = self._get(f"libraries/{library_id}/contents")
response.raise_for_status()
return response.json()
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, json=True)
self._assert_status_code_is(create_response, 200)
folder = create_response.json()
return folder
def _delete_folder(self, 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()
return deleted_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]