Files
galaxy/lib/galaxy_test/api/test_unprivileged_tools.py
T

96 lines
4.5 KiB
Python

# Test tools API.
from galaxy.tool_util_models import UserToolSource
from galaxy_test.base.populators import (
DatasetCollectionPopulator,
DatasetPopulator,
)
from ._framework import ApiTestCase
from .test_tools import (
TestsTools,
TOOL_WITH_SHELL_COMMAND,
)
class TestUnprivilegedToolsApi(ApiTestCase, TestsTools):
def setUp(self):
super().setUp()
self.dataset_populator = DatasetPopulator(self.galaxy_interactor)
self.dataset_collection_populator = DatasetCollectionPopulator(self.galaxy_interactor)
def test_create_unprivileged_requires_execute_role(self):
dynamic_tool = self.dataset_populator.create_unprivileged_tool(
UserToolSource(**TOOL_WITH_SHELL_COMMAND), assert_ok=False
)
assert dynamic_tool["err_msg"] == "User is not allowed to run unprivileged tools"
def test_create_unprivileged(self):
# Create a new dynamic tool.
with self.dataset_populator.user_tool_execute_permissions():
dynamic_tool = self.dataset_populator.create_unprivileged_tool(UserToolSource(**TOOL_WITH_SHELL_COMMAND))
assert dynamic_tool["uuid"], "Dynamic tool UUID not found in response"
assert dynamic_tool["representation"]["name"] == TOOL_WITH_SHELL_COMMAND["name"]
def test_list_unprivileged(self):
with self.dataset_populator.user_tool_execute_permissions():
dynamic_tool = self.dataset_populator.create_unprivileged_tool(UserToolSource(**TOOL_WITH_SHELL_COMMAND))
dynamic_tools = self.dataset_populator.get_unprivileged_tools()
assert any(
dynamic_tool["uuid"] == t["uuid"] for t in dynamic_tools
), f"Newly created dynamic tool {dynamic_tool['uuid']} not in dynamic tools list {dynamic_tools}"
def test_show(self):
with self.dataset_populator.user_tool_execute_permissions():
dynamic_tool = self.dataset_populator.create_unprivileged_tool(UserToolSource(**TOOL_WITH_SHELL_COMMAND))
show_response = self.dataset_populator.show_unprivileged_tool(dynamic_tool["uuid"])
assert show_response["representation"]["name"]
def test_build(self):
with (
self.dataset_populator.test_history() as history_id,
self.dataset_populator.user_tool_execute_permissions(),
):
response = self.dataset_populator.build_unprivileged_tool(
UserToolSource(**TOOL_WITH_SHELL_COMMAND), history_id=history_id
)
assert response
def test_build_runtime_model(self):
with self.dataset_populator.user_tool_execute_permissions():
response = self.dataset_populator.build_runtime_model_for_tool(UserToolSource(**TOOL_WITH_SHELL_COMMAND))
assert response
assert response["openapi"] == "3.1.0"
assert response["components"]["schemas"]["inputs"]
def test_run(self):
with (
self.dataset_populator.test_history() as history_id,
self.dataset_populator.user_tool_execute_permissions(),
):
# Create a new dynamic tool.
# This is a shell command tool that will echo the input dataset.
dynamic_tool = self.dataset_populator.create_unprivileged_tool(UserToolSource(**TOOL_WITH_SHELL_COMMAND))
# Run tool.
dataset = self.dataset_populator.new_dataset(history_id=history_id, content="abc")
self._run(
history_id=history_id,
tool_uuid=dynamic_tool["uuid"],
inputs={"input": {"src": "hda", "id": dataset["id"]}},
)
self.dataset_populator.wait_for_history(history_id, assert_ok=True)
output_content = self.dataset_populator.get_history_dataset_content(history_id)
assert output_content == "abc\n"
def test_deactivate(self):
with self.dataset_populator.user_tool_execute_permissions():
# Create a new dynamic tool.
dynamic_tool = self.dataset_populator.create_unprivileged_tool(UserToolSource(**TOOL_WITH_SHELL_COMMAND))
# Deactivate the tool.
self.dataset_populator.deactivate_unprivileged_tool(dynamic_tool["uuid"])
# Check that the tool is deactivated.
dynamic_tools = self.dataset_populator.get_unprivileged_tools()
assert not any(
dynamic_tool["uuid"] == t["uuid"] for t in dynamic_tools
), f"Dynamic tool {dynamic_tool['uuid']} still in dynamic tools list {dynamic_tools}"