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:
John Chilton
2022-08-31 13:32:00 -04:00
parent c09ac64c1a
commit fc8938fb67
5 changed files with 62 additions and 6 deletions
+14 -5
View File
@@ -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
+1 -1
View File
@@ -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.
+16
View File
@@ -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