Skip to content

Commit 542b80b

Browse files
committed
mock backend with pydantic model example
1 parent cefc23e commit 542b80b

File tree

2 files changed

+56
-10
lines changed

2 files changed

+56
-10
lines changed

packages/models-library/src/models_library/api_schemas_webserver/licensed_items.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from models_library.licensed_items import LicensedItemID, LicensedResourceType
55
from models_library.resource_tracker import PricingPlanId
6-
from pydantic import PositiveInt
6+
from pydantic import ConfigDict, PositiveInt
77

88
from ._base import OutputSchema
99

@@ -15,6 +15,20 @@ class LicensedItemGet(OutputSchema):
1515
pricing_plan_id: PricingPlanId
1616
created_at: datetime
1717
modified_at: datetime
18+
model_config = ConfigDict(
19+
json_schema_extra={
20+
"examples": [
21+
{
22+
"licensed_item_id": "0362b88b-91f8-4b41-867c-35544ad1f7a1",
23+
"name": "best-model",
24+
"licensed_resource_type": f"{LicensedResourceType.VIP_MODEL}",
25+
"pricing_plan_id": "15",
26+
"created_at": "2024-12-12 09:59:26.422140",
27+
"modified_at": "2024-12-12 09:59:26.422140",
28+
}
29+
]
30+
}
31+
)
1832

1933

2034
class LicensedItemGetPage(NamedTuple):
Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,66 @@
11
import pytest
22
from fastapi import status
33
from httpx import AsyncClient, BasicAuth
4-
from models_library.api_schemas_webserver.licensed_items import LicensedItemGetPage
4+
from models_library.api_schemas_webserver.licensed_items import (
5+
LicensedItemGet as _LicensedItemGet,
6+
)
7+
from models_library.api_schemas_webserver.licensed_items import (
8+
LicensedItemGetPage as _LicensedItemGetPage,
9+
)
10+
from pydantic import TypeAdapter
511
from pytest_mock import MockerFixture
612
from servicelib.rabbitmq._client_rpc import RabbitMQRPCClient
713
from simcore_service_api_server._meta import API_VTAG
14+
from simcore_service_api_server.models.pagination import Page
15+
from simcore_service_api_server.models.schemas.model_adapter import LicensedItemGet
816

917

1018
@pytest.fixture
11-
async def mock_wb_api_server_rcp(mocker: MockerFixture) -> MockerFixture:
19+
async def mock_rabbitmq_rpc_client(mocker: MockerFixture) -> MockerFixture:
20+
class DummyRabbitMqRpcClient:
21+
pass
22+
23+
def _get_dummy_rpc_client():
24+
return DummyRabbitMqRpcClient
25+
26+
mocker.patch(
27+
"simcore_service_api_server.core.application.get_rabbitmq_rpc_client",
28+
sideeffect=_get_dummy_rpc_client,
29+
)
30+
return mocker
31+
32+
33+
@pytest.fixture
34+
async def mock_wb_api_server_rcp(
35+
mock_rabbitmq_rpc_client: MockerFixture,
36+
) -> MockerFixture:
1237
async def _get_backend_licensed_items(
1338
rabbitmq_rpc_client: RabbitMQRPCClient,
1439
*,
1540
product_name: str,
1641
offset: int,
1742
limit: int,
18-
) -> LicensedItemGetPage:
19-
return None
43+
) -> _LicensedItemGetPage:
44+
extra = _LicensedItemGet.model_config.get("json_schema_extra")
45+
assert isinstance(extra, dict)
46+
examples = extra.get("examples")
47+
assert isinstance(examples, list)
48+
return _LicensedItemGetPage(
49+
items=[_LicensedItemGet.model_validate(ex) for ex in examples],
50+
total=len(examples),
51+
)
2052

21-
mocker.patch(
22-
"servicelib.rabbitmq.rpc_interfaces.webserver.licenses.licensed_items.get_licensed_items",
53+
mock_rabbitmq_rpc_client.patch(
54+
"simcore_service_api_server.services_rpc.wb_api_server._get_licensed_items",
2355
_get_backend_licensed_items,
2456
)
2557

26-
return mocker
58+
return mock_rabbitmq_rpc_client
2759

2860

2961
async def test_get_licensed_items(
3062
mock_wb_api_server_rcp: MockerFixture, client: AsyncClient, auth: BasicAuth
3163
):
32-
33-
resp = await client.get(f"{API_VTAG}/credits/price", auth=auth)
64+
resp = await client.get(f"{API_VTAG}/licensed-items/page", auth=auth)
3465
assert resp.status_code == status.HTTP_200_OK
66+
TypeAdapter(Page[LicensedItemGet]).validate_json(resp.text)

0 commit comments

Comments
 (0)