Skip to content

Commit 0997a1e

Browse files
committed
add test when no released solvers
1 parent 176c9fe commit 0997a1e

File tree

4 files changed

+50
-21
lines changed

4 files changed

+50
-21
lines changed

packages/pytest-simcore/src/pytest_simcore/helpers/catalog_rpc_server.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
# pylint: disable=unused-variable
66

77

8+
from dataclasses import dataclass
9+
810
from models_library.api_schemas_catalog.services import (
911
LatestServiceGet,
1012
ServiceGetV2,
@@ -171,3 +173,20 @@ async def get_service_ports(
171173
return TypeAdapter(list[ServicePortGet]).validate_python(
172174
ServicePortGet.model_json_schema()["examples"],
173175
)
176+
177+
178+
@dataclass
179+
class ZeroListingCatalogRpcSideEffects:
180+
"""Catalog RPC mocks that return empty lists"""
181+
182+
async def list_services_paginated(*args, **kwargs): ...
183+
async def get_service(*args, **kwargs): ...
184+
async def update_service(*args, **kwargs): ...
185+
async def get_service_ports(*args, **kwargs): ...
186+
async def list_my_service_history_latest_first(*args, **kwargs):
187+
return PageRpc[ServiceRelease].create(
188+
[],
189+
total=0,
190+
limit=10,
191+
offset=0,
192+
)

services/api-server/tests/unit/conftest.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,8 +459,9 @@ def mocked_catalog_rest_api_base(
459459

460460
@pytest.fixture
461461
def catalog_rpc_side_effects(request) -> Any:
462-
param = request.param if request.param is not None else CatalogRpcSideEffects()
463-
return param
462+
if "param" in dir(request) and request.param is not None:
463+
return request.param
464+
return CatalogRpcSideEffects()
464465

465466

466467
@pytest.fixture

services/api-server/tests/unit/test_api_programs.py

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
# pylint: disable=unused-variable
33
# pylint: disable=too-many-arguments
44

5-
from dataclasses import dataclass
65
from functools import partial
76
from pathlib import Path
87
from typing import Any
@@ -13,10 +12,9 @@
1312
from fastapi import status
1413
from httpx import AsyncClient
1514
from models_library.api_schemas_storage.storage_schemas import FileUploadSchema
16-
from models_library.rpc_pagination import PageRpc
17-
from models_library.services_history import ServiceRelease
1815
from models_library.users import UserID
1916
from pytest_mock import MockerFixture, MockType
17+
from pytest_simcore.helpers.catalog_rpc_server import ZeroListingCatalogRpcSideEffects
2018
from pytest_simcore.helpers.faker_factories import DEFAULT_FAKER
2119
from pytest_simcore.helpers.httpx_calls_capture_models import (
2220
CreateRespxMockCallback,
@@ -173,23 +171,8 @@ async def test_list_program_history(
173171
assert response.status_code == status.HTTP_200_OK
174172

175173

176-
@dataclass
177-
class _MockCatalogRpcSideEffects:
178-
async def list_services_paginated(*args, **kwargs): ...
179-
async def get_service(*args, **kwargs): ...
180-
async def update_service(*args, **kwargs): ...
181-
async def get_service_ports(*args, **kwargs): ...
182-
async def list_my_service_history_latest_first(*args, **kwargs):
183-
return PageRpc[ServiceRelease].create(
184-
[],
185-
total=0,
186-
limit=10,
187-
offset=0,
188-
)
189-
190-
191174
@pytest.mark.parametrize(
192-
"catalog_rpc_side_effects", [_MockCatalogRpcSideEffects()], indirect=True
175+
"catalog_rpc_side_effects", [ZeroListingCatalogRpcSideEffects()], indirect=True
193176
)
194177
async def test_list_program_history_no_program(
195178
auth: httpx.BasicAuth,

services/api-server/tests/unit/test_api_solvers.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from fastapi import status
1111
from httpx import AsyncClient
1212
from models_library.api_schemas_api_server.pricing_plans import ServicePricingPlanGet
13+
from pytest_simcore.helpers.catalog_rpc_server import ZeroListingCatalogRpcSideEffects
1314
from pytest_simcore.helpers.httpx_calls_capture_models import CreateRespxMockCallback
1415
from simcore_service_api_server._meta import API_VTAG
1516

@@ -73,3 +74,28 @@ async def test_get_latest_solver_release(
7374
if response.status_code == status.HTTP_200_OK:
7475
assert "id" in response.json()
7576
assert response.json()["id"] == solver_key
77+
78+
79+
@pytest.mark.parametrize(
80+
"catalog_rpc_side_effects",
81+
[ZeroListingCatalogRpcSideEffects()],
82+
indirect=True,
83+
)
84+
@pytest.mark.parametrize(
85+
"solver_key,expected_status_code",
86+
[
87+
("simcore/services/comp/valid_solver", status.HTTP_404_NOT_FOUND),
88+
],
89+
)
90+
async def test_get_latest_solver_release_zero_releases(
91+
client: AsyncClient,
92+
mocked_catalog_rpc_api,
93+
auth: httpx.BasicAuth,
94+
solver_key: str,
95+
expected_status_code: int,
96+
):
97+
response = await client.get(
98+
f"{API_VTAG}/solvers/{solver_key}/latest",
99+
auth=auth,
100+
)
101+
assert response.status_code == expected_status_code

0 commit comments

Comments
 (0)