Skip to content

Commit 38c1915

Browse files
committed
sideeffects
1 parent 9fc678b commit 38c1915

File tree

2 files changed

+98
-78
lines changed

2 files changed

+98
-78
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# pylint: disable=not-context-manager
2+
# pylint: disable=protected-access
3+
# pylint: disable=redefined-outer-name
4+
# pylint: disable=unused-argument
5+
# pylint: disable=unused-variable
6+
7+
8+
from models_library.api_schemas_catalog.services import LatestServiceGet, ServiceGetV2
9+
from models_library.api_schemas_webserver.catalog import (
10+
CatalogServiceUpdate,
11+
)
12+
from models_library.products import ProductName
13+
from models_library.rpc_pagination import PageLimitInt, PageRpc
14+
from models_library.services_types import ServiceKey, ServiceVersion
15+
from models_library.users import UserID
16+
from pydantic import NonNegativeInt, TypeAdapter
17+
from servicelib.rabbitmq._client_rpc import RabbitMQRPCClient
18+
19+
20+
class CatalogRpcSideEffects:
21+
async def list_services_paginated(
22+
self,
23+
rpc_client: RabbitMQRPCClient,
24+
*,
25+
product_name: ProductName,
26+
user_id: UserID,
27+
limit: PageLimitInt,
28+
offset: NonNegativeInt,
29+
):
30+
assert rpc_client
31+
assert product_name
32+
assert user_id
33+
34+
items = TypeAdapter(list[LatestServiceGet]).validate_python(
35+
LatestServiceGet.model_json_schema()["examples"],
36+
)
37+
total_count = len(items)
38+
39+
return PageRpc[LatestServiceGet].create(
40+
items[offset : offset + limit],
41+
total=total_count,
42+
limit=limit,
43+
offset=offset,
44+
)
45+
46+
async def get_service(
47+
self,
48+
rpc_client: RabbitMQRPCClient,
49+
*,
50+
product_name: ProductName,
51+
user_id: UserID,
52+
service_key: ServiceKey,
53+
service_version: ServiceVersion,
54+
):
55+
assert rpc_client
56+
assert product_name
57+
assert user_id
58+
59+
got = ServiceGetV2.model_validate(
60+
ServiceGetV2.model_json_schema()["examples"][0]
61+
)
62+
got.version = service_version
63+
got.key = service_key
64+
65+
return got
66+
67+
async def update_service(
68+
self,
69+
rpc_client: RabbitMQRPCClient,
70+
*,
71+
product_name: ProductName,
72+
user_id: UserID,
73+
service_key: ServiceKey,
74+
service_version: ServiceVersion,
75+
update: CatalogServiceUpdate,
76+
):
77+
assert rpc_client
78+
assert product_name
79+
assert user_id
80+
81+
got = ServiceGetV2.model_validate(
82+
ServiceGetV2.model_json_schema()["examples"][0]
83+
)
84+
got.version = service_version
85+
got.key = service_key
86+
return got.model_copy(update=update.model_dump(exclude_unset=True))

services/web/server/tests/unit/with_dbs/01/test_catalog_handlers__services.py

Lines changed: 12 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,22 @@
44

55
import re
66
import urllib.parse
7-
from unittest.mock import MagicMock
87

98
import pytest
10-
from aiohttp import web
119
from aiohttp.test_utils import TestClient
1210
from aioresponses import aioresponses as AioResponsesMock
1311
from faker import Faker
14-
from models_library.api_schemas_catalog.services import LatestServiceGet, ServiceGetV2
12+
from models_library.api_schemas_catalog.services import ServiceGetV2
1513
from models_library.api_schemas_webserver.catalog import (
1614
CatalogServiceGet,
1715
CatalogServiceUpdate,
1816
)
19-
from models_library.products import ProductName
2017
from models_library.rest_pagination import Page
21-
from models_library.rpc_pagination import PageLimitInt, PageRpc
22-
from models_library.services_types import ServiceKey, ServiceVersion
23-
from models_library.users import UserID
2418
from models_library.utils.fastapi_encoders import jsonable_encoder
25-
from pydantic import NonNegativeInt, TypeAdapter
26-
from pytest_mock import MockerFixture
19+
from pydantic import TypeAdapter
20+
from pytest_mock import MockerFixture, MockType
2721
from pytest_simcore.helpers.assert_checks import assert_status
22+
from pytest_simcore.helpers.catalog_rpc_server import CatalogRpcSideEffects
2823
from pytest_simcore.helpers.faker_factories import random_icon_url
2924
from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict
3025
from pytest_simcore.helpers.typing_env import EnvVarsDict
@@ -50,86 +45,25 @@ def app_environment(
5045

5146

5247
@pytest.fixture
53-
def mocked_rpc_catalog_service_api(mocker: MockerFixture) -> dict[str, MagicMock]:
54-
async def _list(
55-
app: web.Application,
56-
*,
57-
product_name: ProductName,
58-
user_id: UserID,
59-
limit: PageLimitInt,
60-
offset: NonNegativeInt,
61-
):
62-
assert app
63-
assert product_name
64-
assert user_id
65-
66-
items = TypeAdapter(list[LatestServiceGet]).validate_python(
67-
LatestServiceGet.model_json_schema()["examples"],
68-
)
69-
total_count = len(items)
70-
71-
return PageRpc[LatestServiceGet].create(
72-
items[offset : offset + limit],
73-
total=total_count,
74-
limit=limit,
75-
offset=offset,
76-
)
48+
def mocked_rpc_catalog_service_api(mocker: MockerFixture) -> dict[str, MockType]:
7749

78-
async def _get(
79-
app: web.Application,
80-
*,
81-
product_name: ProductName,
82-
user_id: UserID,
83-
service_key: ServiceKey,
84-
service_version: ServiceVersion,
85-
):
86-
assert app
87-
assert product_name
88-
assert user_id
89-
90-
got = ServiceGetV2.model_validate(
91-
ServiceGetV2.model_json_schema()["examples"][0]
92-
)
93-
got.version = service_version
94-
got.key = service_key
95-
96-
return got
97-
98-
async def _update(
99-
app: web.Application,
100-
*,
101-
product_name: ProductName,
102-
user_id: UserID,
103-
service_key: ServiceKey,
104-
service_version: ServiceVersion,
105-
update: CatalogServiceUpdate,
106-
):
107-
assert app
108-
assert product_name
109-
assert user_id
110-
111-
got = ServiceGetV2.model_validate(
112-
ServiceGetV2.model_json_schema()["examples"][0]
113-
)
114-
got.version = service_version
115-
got.key = service_key
116-
return got.model_copy(update=update.model_dump(exclude_unset=True))
50+
side_effects = CatalogRpcSideEffects()
11751

11852
return {
11953
"list_services_paginated": mocker.patch(
12054
"simcore_service_webserver.catalog._service.catalog_rpc.list_services_paginated",
12155
autospec=True,
122-
side_effect=_list,
56+
side_effect=side_effects.list_services_paginated,
12357
),
12458
"get_service": mocker.patch(
12559
"simcore_service_webserver.catalog._service.catalog_rpc.get_service",
12660
autospec=True,
127-
side_effect=_get,
61+
side_effect=side_effects.get_service,
12862
),
12963
"update_service": mocker.patch(
13064
"simcore_service_webserver.catalog._service.catalog_rpc.update_service",
13165
autospec=True,
132-
side_effect=_update,
66+
side_effect=side_effects.update_service,
13367
),
13468
}
13569

@@ -141,7 +75,7 @@ async def _update(
14175
async def test_list_services_latest(
14276
client: TestClient,
14377
logged_user: UserInfoDict,
144-
mocked_rpc_catalog_service_api: dict[str, MagicMock],
78+
mocked_rpc_catalog_service_api: dict[str, MockType],
14579
):
14680
assert client.app
14781
assert client.app.router
@@ -359,7 +293,7 @@ async def test_get_compatible_outputs_given_target_inptuts(
359293
async def test_get_and_patch_service(
360294
client: TestClient,
361295
logged_user: UserInfoDict,
362-
mocked_rpc_catalog_service_api: dict[str, MagicMock],
296+
mocked_rpc_catalog_service_api: dict[str, MockType],
363297
faker: Faker,
364298
):
365299
assert client.app
@@ -426,7 +360,7 @@ async def test_get_and_patch_service(
426360
async def test_tags_in_services(
427361
client: TestClient,
428362
logged_user: UserInfoDict,
429-
mocked_rpc_catalog_service_api: dict[str, MagicMock],
363+
mocked_rpc_catalog_service_api: dict[str, MockType],
430364
):
431365
assert client.app
432366
assert client.app.router

0 commit comments

Comments
 (0)