mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
More API tests for the tool shed.
Continue working toward a set of pydantic models to rapidly move toward FastAPI/OpenAPI also.
This commit is contained in:
@@ -10,9 +10,12 @@ from galaxy_test.base import api_asserts
|
||||
from galaxy_test.base.api_util import random_name
|
||||
from tool_shed_client.schema import (
|
||||
Category,
|
||||
GetOrderedInstallableRevisionsRequest,
|
||||
OrderedInstallableRevisions,
|
||||
Repository,
|
||||
RepositoryUpdate,
|
||||
ResetMetadataOnRepositoryRequest,
|
||||
ResetMetadataOnRepositoryResponse,
|
||||
)
|
||||
from .api_util import ShedApiInteractor
|
||||
|
||||
@@ -101,14 +104,20 @@ class ToolShedPopulator:
|
||||
return Category(**response.json())
|
||||
|
||||
def get_ordered_installable_revisions(self, owner: str, name: str) -> OrderedInstallableRevisions:
|
||||
params = {
|
||||
"owner": owner,
|
||||
"name": name,
|
||||
}
|
||||
revisions_response = self._api_interactor.get("repositories/get_ordered_installable_revisions", params=params)
|
||||
request = GetOrderedInstallableRevisionsRequest(owner=owner, name=name)
|
||||
revisions_response = self._api_interactor.get(
|
||||
"repositories/get_ordered_installable_revisions", params=request.dict()
|
||||
)
|
||||
api_asserts.assert_status_code_is_ok(revisions_response)
|
||||
return OrderedInstallableRevisions(__root__=revisions_response.json())
|
||||
|
||||
def reset_metadata(self, repository: HasRepositoryId) -> ResetMetadataOnRepositoryResponse:
|
||||
repository_id = self._repository_id(repository)
|
||||
request = ResetMetadataOnRepositoryRequest(repository_id=repository_id)
|
||||
reset_response = self._api_interactor.post("repositories/reset_metadata_on_repository", json=request.dict())
|
||||
reset_response.raise_for_status()
|
||||
return ResetMetadataOnRepositoryResponse(**reset_response.json())
|
||||
|
||||
def _repository_id(self, has_id: HasRepositoryId) -> str:
|
||||
if isinstance(has_id, Repository):
|
||||
return has_id.id
|
||||
|
||||
@@ -15,3 +15,19 @@ class ShedGalaxyInstallApiTestCase(ShedApiTestCase):
|
||||
expected_tool = f"{self.host}:{self.port}/repos/{owner}/{name}/Add_a_column1/1.1.0"
|
||||
tool_ids = [t["id"] for t in response.json()]
|
||||
assert expected_tool in tool_ids, f"Didn't find {expected_tool} in {tool_ids}"
|
||||
|
||||
def test_install_simple_after_repository_metadata_reset(self):
|
||||
populator = self.populator
|
||||
repository = populator.setup_column_maker_repo(prefix="repoformetadata")
|
||||
owner = repository.owner
|
||||
name = repository.name
|
||||
installable_revisions = populator.get_ordered_installable_revisions(owner, name)
|
||||
latest_install_revision = installable_revisions.__root__[-1]
|
||||
metadata_response = populator.reset_metadata(repository)
|
||||
assert metadata_response.status == "ok"
|
||||
self.install_repository(owner, name, latest_install_revision, tool_shed_url=self.url)
|
||||
response = self.galaxy_interactor._get("tools?in_panel=False")
|
||||
response.raise_for_status()
|
||||
expected_tool = f"{self.host}:{self.port}/repos/{owner}/{name}/Add_a_column1/1.1.0"
|
||||
tool_ids = [t["id"] for t in response.json()]
|
||||
assert expected_tool in tool_ids, f"Didn't find {expected_tool} in {tool_ids}"
|
||||
|
||||
@@ -76,3 +76,18 @@ class ShedRepositoriesApiTestCase(ShedApiTestCase):
|
||||
assert repository.name
|
||||
revisions = populator.get_ordered_installable_revisions(repository.owner, repository.name)
|
||||
assert len(revisions.__root__) == 1
|
||||
|
||||
def test_reset_on_repository(self):
|
||||
populator = self.populator
|
||||
repository = populator.setup_column_maker_repo(prefix="repoforreseta")
|
||||
assert repository.owner
|
||||
assert repository.name
|
||||
revisions = populator.get_ordered_installable_revisions(repository.owner, repository.name)
|
||||
assert len(revisions.__root__) == 1
|
||||
metadata_response = populator.reset_metadata(repository)
|
||||
assert metadata_response.start_time
|
||||
assert metadata_response.stop_time
|
||||
assert metadata_response.status == "ok"
|
||||
assert len(metadata_response.repository_status) == 1
|
||||
revisions = populator.get_ordered_installable_revisions(repository.owner, repository.name)
|
||||
assert len(revisions.__root__) == 1
|
||||
|
||||
@@ -659,7 +659,7 @@ class RepositoriesController(BaseAPIController):
|
||||
@web.legacy_expose_api
|
||||
def reset_metadata_on_repository(self, trans, payload, **kwd):
|
||||
"""
|
||||
PUT /api/repositories/reset_metadata_on_repository
|
||||
POST /api/repositories/reset_metadata_on_repository
|
||||
|
||||
Resets all metadata on a specified repository in the Tool Shed.
|
||||
|
||||
|
||||
@@ -25,6 +25,11 @@ class FailedRepositoryUpdateMessage(BaseModel):
|
||||
err_msg: str
|
||||
|
||||
|
||||
class GetOrderedInstallableRevisionsRequest(BaseModel):
|
||||
name: str
|
||||
owner: str
|
||||
|
||||
|
||||
class OrderedInstallableRevisions(BaseModel):
|
||||
__root__: List[str]
|
||||
|
||||
@@ -35,3 +40,14 @@ class RepositoryUpdate(BaseModel):
|
||||
@property
|
||||
def is_ok(self):
|
||||
return isinstance(self.__root__, ValidRepostiroyUpdateMessage)
|
||||
|
||||
|
||||
class ResetMetadataOnRepositoryRequest(BaseModel):
|
||||
repository_id: str
|
||||
|
||||
|
||||
class ResetMetadataOnRepositoryResponse(BaseModel):
|
||||
status: str # TODO: enum...
|
||||
repository_status: List[str]
|
||||
start_time: str
|
||||
stop_time: str
|
||||
|
||||
Reference in New Issue
Block a user