Skip to content

Commit e6bf689

Browse files
committed
extending test
1 parent 38c1915 commit e6bf689

File tree

2 files changed

+139
-87
lines changed

2 files changed

+139
-87
lines changed
Lines changed: 98 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from dataclasses import dataclass
2+
13
from models_library.basic_types import VersionStr
24
from models_library.products import ProductName
35
from models_library.rest_pagination import (
@@ -7,6 +9,9 @@
79
PageOffsetInt,
810
)
911
from models_library.users import UserID
12+
from servicelib.fastapi.app_state import SingletonInAppStateMixin
13+
from servicelib.rabbitmq import RabbitMQRPCClient
14+
from servicelib.rabbitmq.rpc_interfaces.catalog import services as catalog_rpc
1015

1116
from ..models.schemas.solvers import Solver, SolverKeyId, SolverPort
1217

@@ -23,88 +28,96 @@
2328
# ServiceUpdateV2,
2429
# )
2530

26-
27-
async def list_latest_releases(
28-
*,
29-
product_name: ProductName,
30-
user_id: UserID,
31-
offset: PageOffsetInt = 0,
32-
limit: PageLimitInt = DEFAULT_NUMBER_OF_ITEMS_PER_PAGE,
33-
) -> tuple[list[Solver], PageMetaInfoLimitOffset]:
34-
assert product_name # nosec
35-
assert user_id # nosec
36-
37-
data = _FAKE[offset : offset + limit]
38-
meta = PageMetaInfoLimitOffset(
39-
limit=limit, offset=offset, total=len(_FAKE), count=len(data)
40-
)
41-
return data, meta
42-
43-
44-
async def list_solver_releases(
45-
*,
46-
product_name: ProductName,
47-
user_id: UserID,
48-
solver_id: SolverKeyId,
49-
offset: PageOffsetInt = 0,
50-
limit: PageLimitInt = DEFAULT_NUMBER_OF_ITEMS_PER_PAGE,
51-
) -> tuple[list[Solver], PageMetaInfoLimitOffset]:
52-
assert product_name # nosec
53-
assert user_id # nosec
54-
55-
data = [solver for solver in _FAKE if solver.id == solver_id][
56-
offset : offset + limit
57-
]
58-
59-
meta = PageMetaInfoLimitOffset(
60-
limit=limit, offset=offset, total=len(_FAKE), count=len(data)
61-
)
62-
return data, meta
63-
64-
65-
async def get_solver(
66-
*,
67-
product_name: ProductName,
68-
user_id: UserID,
69-
solver_id: SolverKeyId,
70-
solver_version: VersionStr,
71-
) -> Solver | None:
72-
assert product_name # nosec
73-
assert user_id # nosec
74-
75-
# service: ServiceGetV2 = await catalog_rpc.get_service(
76-
# get_rabbitmq_rpc_client(app),
77-
# product_name=product_name,
78-
# user_id=user_id,
79-
# service_key=solver_id,
80-
# service_version=solver_version,
81-
# )
82-
83-
# solver = Solver(id=service.key, version=service.version, title=) ServiceGetV2)(service)
84-
85-
return next(
86-
(
87-
solver
88-
for solver in _FAKE
89-
if solver.id == solver_id and solver.version == solver_version
90-
),
91-
None,
92-
)
93-
94-
95-
async def get_solver_ports(
96-
*,
97-
product_name: ProductName,
98-
user_id: int,
99-
solver_id: SolverKeyId,
100-
solver_version: VersionStr,
101-
) -> list[SolverPort]:
102-
103-
if await get_solver(
104-
product_name=product_name,
105-
user_id=user_id,
106-
solver_id=solver_id,
107-
solver_version=solver_version,
108-
):
109-
return _FAKE2
110-
return []
31+
assert catalog_rpc # nosec
32+
33+
34+
@dataclass
35+
class CatalogService(SingletonInAppStateMixin):
36+
app_state_name = "CatalogService"
37+
_client: RabbitMQRPCClient
38+
39+
async def list_latest_releases(
40+
self,
41+
*,
42+
product_name: ProductName,
43+
user_id: UserID,
44+
offset: PageOffsetInt = 0,
45+
limit: PageLimitInt = DEFAULT_NUMBER_OF_ITEMS_PER_PAGE,
46+
) -> tuple[list[Solver], PageMetaInfoLimitOffset]:
47+
assert product_name # nosec
48+
assert user_id # nosec
49+
50+
data = _FAKE[offset : offset + limit]
51+
meta = PageMetaInfoLimitOffset(
52+
limit=limit, offset=offset, total=len(_FAKE), count=len(data)
53+
)
54+
return data, meta
55+
56+
async def list_solver_releases(
57+
self,
58+
*,
59+
product_name: ProductName,
60+
user_id: UserID,
61+
solver_id: SolverKeyId,
62+
offset: PageOffsetInt = 0,
63+
limit: PageLimitInt = DEFAULT_NUMBER_OF_ITEMS_PER_PAGE,
64+
) -> tuple[list[Solver], PageMetaInfoLimitOffset]:
65+
assert product_name # nosec
66+
assert user_id # nosec
67+
68+
data = [solver for solver in _FAKE if solver.id == solver_id][
69+
offset : offset + limit
70+
]
71+
72+
meta = PageMetaInfoLimitOffset(
73+
limit=limit, offset=offset, total=len(_FAKE), count=len(data)
74+
)
75+
return data, meta
76+
77+
async def get_solver(
78+
self,
79+
*,
80+
product_name: ProductName,
81+
user_id: UserID,
82+
solver_id: SolverKeyId,
83+
solver_version: VersionStr,
84+
) -> Solver | None:
85+
assert product_name # nosec
86+
assert user_id # nosec
87+
88+
# service: ServiceGetV2 = await catalog_rpc.get_service(
89+
# get_rabbitmq_rpc_client(app),
90+
# product_name=product_name,
91+
# user_id=user_id,
92+
# service_key=solver_id,
93+
# service_version=solver_version,
94+
# )
95+
96+
# solver = Solver(id=service.key, version=service.version, title=) ServiceGetV2)(service)
97+
98+
return next(
99+
(
100+
solver
101+
for solver in _FAKE
102+
if solver.id == solver_id and solver.version == solver_version
103+
),
104+
None,
105+
)
106+
107+
async def get_solver_ports(
108+
self,
109+
*,
110+
product_name: ProductName,
111+
user_id: int,
112+
solver_id: SolverKeyId,
113+
solver_version: VersionStr,
114+
) -> list[SolverPort]:
115+
116+
if await self.get_solver(
117+
product_name=product_name,
118+
user_id=user_id,
119+
solver_id=solver_id,
120+
solver_version=solver_version,
121+
):
122+
return _FAKE2
123+
return []

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

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,57 @@
55
# pylint: disable=unused-variable
66

77
import pytest
8+
from fastapi import FastAPI
89
from models_library.products import ProductName
910
from models_library.users import UserID
11+
from pytest_mock import MockerFixture, MockType
12+
from pytest_simcore.helpers.catalog_rpc_server import CatalogRpcSideEffects
1013
from simcore_service_api_server.models.schemas.solvers import Solver, SolverPort
11-
from simcore_service_api_server.services_rpc import catalog as catalog_service
14+
from simcore_service_api_server.services_rpc.catalog import CatalogService, catalog_rpc
1215

1316

1417
@pytest.fixture
1518
def product_name() -> ProductName:
1619
return "osparc"
1720

1821

19-
async def test_catalog_service_read_solvers(product_name: ProductName, user_id: UserID):
22+
@pytest.fixture
23+
def mocked_rpc_catalog_service_api(mocker: MockerFixture) -> dict[str, MockType]:
24+
25+
side_effects = CatalogRpcSideEffects()
26+
27+
return {
28+
"list_services_paginated": mocker.patch.object(
29+
catalog_rpc,
30+
"list_services_paginated",
31+
autospec=True,
32+
side_effect=side_effects.list_services_paginated,
33+
),
34+
"get_service": mocker.patch.object(
35+
catalog_rpc,
36+
"get_service",
37+
autospec=True,
38+
side_effect=side_effects.get_service,
39+
),
40+
"update_service": mocker.patch.object(
41+
catalog_rpc,
42+
"update_service",
43+
autospec=True,
44+
side_effect=side_effects.update_service,
45+
),
46+
}
47+
48+
49+
async def test_catalog_service_read_solvers(
50+
product_name: ProductName,
51+
user_id: UserID,
52+
mocker: MockerFixture,
53+
mocked_rpc_catalog_service_api: dict[str, MockType],
54+
):
55+
56+
catalog_service = CatalogService(_client=mocker.MagicMock())
57+
catalog_service.set_to_app_state(app=FastAPI())
58+
2059
# Step 1: List latest releases in a page
2160
solver_releases_page, meta = await catalog_service.list_latest_releases(
2261
product_name=product_name, user_id=user_id

0 commit comments

Comments
 (0)