Skip to content

Commit 176c9fe

Browse files
committed
bugfix catalog history returning [] and test
1 parent 1450131 commit 176c9fe

File tree

3 files changed

+48
-7
lines changed

3 files changed

+48
-7
lines changed

services/api-server/src/simcore_service_api_server/_service_programs.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ async def list_program_history(
7070
offset=offset,
7171
limit=limit,
7272
)
73+
if len(page) == 0:
74+
return [], page_meta
7375

7476
program_instance = await self._catalog_service.get(
7577
user_id=user_id,

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -457,9 +457,15 @@ def mocked_catalog_rest_api_base(
457457
yield respx_mock
458458

459459

460+
@pytest.fixture
461+
def catalog_rpc_side_effects(request) -> Any:
462+
param = request.param if request.param is not None else CatalogRpcSideEffects()
463+
return param
464+
465+
460466
@pytest.fixture
461467
def mocked_catalog_rpc_api(
462-
app: FastAPI, mocker: MockerFixture
468+
app: FastAPI, mocker: MockerFixture, catalog_rpc_side_effects: CatalogRpcSideEffects
463469
) -> Iterable[dict[str, MockType]]:
464470
"""
465471
Mocks the RPC catalog service API for testing purposes.
@@ -469,38 +475,37 @@ def get_mock_rabbitmq_rpc_client():
469475
return MagicMock()
470476

471477
app.dependency_overrides[get_rabbitmq_rpc_client] = get_mock_rabbitmq_rpc_client
472-
side_effects = CatalogRpcSideEffects()
473478

474479
yield {
475480
"list_services_paginated": mocker.patch.object(
476481
catalog_rpc,
477482
"list_services_paginated",
478483
autospec=True,
479-
side_effect=side_effects.list_services_paginated,
484+
side_effect=catalog_rpc_side_effects.list_services_paginated,
480485
),
481486
"get_service": mocker.patch.object(
482487
catalog_rpc,
483488
"get_service",
484489
autospec=True,
485-
side_effect=side_effects.get_service,
490+
side_effect=catalog_rpc_side_effects.get_service,
486491
),
487492
"update_service": mocker.patch.object(
488493
catalog_rpc,
489494
"update_service",
490495
autospec=True,
491-
side_effect=side_effects.update_service,
496+
side_effect=catalog_rpc_side_effects.update_service,
492497
),
493498
"list_my_service_history_latest_first": mocker.patch.object(
494499
catalog_rpc,
495500
"list_my_service_history_latest_first",
496501
autospec=True,
497-
side_effect=side_effects.list_my_service_history_latest_first,
502+
side_effect=catalog_rpc_side_effects.list_my_service_history_latest_first,
498503
),
499504
"get_service_ports": mocker.patch.object(
500505
catalog_rpc,
501506
"get_service_ports",
502507
autospec=True,
503-
side_effect=side_effects.get_service_ports,
508+
side_effect=catalog_rpc_side_effects.get_service_ports,
504509
),
505510
}
506511
app.dependency_overrides.pop(get_rabbitmq_rpc_client)

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

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

5+
from dataclasses import dataclass
56
from functools import partial
67
from pathlib import Path
78
from typing import Any
@@ -12,6 +13,8 @@
1213
from fastapi import status
1314
from httpx import AsyncClient
1415
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
1518
from models_library.users import UserID
1619
from pytest_mock import MockerFixture, MockType
1720
from pytest_simcore.helpers.faker_factories import DEFAULT_FAKER
@@ -168,3 +171,34 @@ async def test_list_program_history(
168171
f"/{API_VTAG}/programs/{program_key}/releases", auth=auth
169172
)
170173
assert response.status_code == status.HTTP_200_OK
174+
175+
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+
191+
@pytest.mark.parametrize(
192+
"catalog_rpc_side_effects", [_MockCatalogRpcSideEffects()], indirect=True
193+
)
194+
async def test_list_program_history_no_program(
195+
auth: httpx.BasicAuth,
196+
client: AsyncClient,
197+
mocked_catalog_rpc_api: dict[str, MockType],
198+
):
199+
program_key = "simcore/services/dynamic/my_program"
200+
# Arrange
201+
response = await client.get(
202+
f"/{API_VTAG}/programs/{program_key}/releases", auth=auth
203+
)
204+
assert response.status_code == status.HTTP_200_OK

0 commit comments

Comments
 (0)