Skip to content

Commit 4a1008f

Browse files
fix import
1 parent 583b2b4 commit 4a1008f

File tree

3 files changed

+83
-10
lines changed

3 files changed

+83
-10
lines changed

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ class WalletGet(OutputSchema):
2727
"examples": [
2828
{
2929
"wallet_id": 1,
30-
"name": "pm_0987654321",
31-
"description": "https://example.com/payment-method/form",
32-
"owner": "https://example.com/payment-method/form",
30+
"name": "My wallet",
31+
"description": "My description",
32+
"owner": 1,
3333
"thumbnail": "https://example.com/payment-method/form",
34-
"status": "https://example.com/payment-method/form",
35-
"created": "https://example.com/payment-method/form",
36-
"modified": "https://example.com/payment-method/form",
34+
"status": "ACTIVE",
35+
"created": "2024-03-25T00:00:00",
36+
"modified": "2024-03-25T00:00:00",
3737
}
3838
]
3939
},

packages/service-library/src/servicelib/rabbitmq/rpc_interfaces/resource_usage_tracker/licensed_items_purchases.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
)
77
from models_library.api_schemas_resource_usage_tracker.licensed_items_purchases import (
88
LicensedItemPurchaseGet,
9-
LicensedItemPurchaseID,
109
LicensedItemsPurchasesPage,
1110
)
1211
from models_library.basic_types import IDStr
1312
from models_library.products import ProductName
1413
from models_library.rabbitmq_basic_types import RPCMethodName
1514
from models_library.resource_tracker_licensed_items_purchases import (
15+
LicensedItemPurchaseID,
1616
LicensedItemsPurchasesCreate,
1717
)
1818
from models_library.rest_ordering import OrderBy

services/web/server/tests/unit/with_dbs/04/licenses/test_licensed_items_handlers.py

Lines changed: 76 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@
77

88
import pytest
99
from aiohttp.test_utils import TestClient
10+
from models_library.api_schemas_resource_usage_tracker.pricing_plans import (
11+
PricingUnitGet,
12+
)
1013
from models_library.api_schemas_webserver.licensed_items import LicensedItemGet
14+
from models_library.api_schemas_webserver.wallets import WalletGetWithAvailableCredits
1115
from models_library.licensed_items import LicensedResourceType
16+
from pytest_mock.plugin import MockerFixture
1217
from pytest_simcore.helpers.assert_checks import assert_status
1318
from pytest_simcore.helpers.webserver_login import UserInfoDict
1419
from servicelib.aiohttp import status
@@ -18,7 +23,7 @@
1823

1924

2025
@pytest.mark.parametrize("user_role,expected", [(UserRole.USER, status.HTTP_200_OK)])
21-
async def test_licensed_items_db_crud(
26+
async def test_licensed_items_listing(
2227
client: TestClient,
2328
logged_user: UserInfoDict,
2429
user_project: ProjectDict,
@@ -58,9 +63,77 @@ async def test_licensed_items_db_crud(
5863
data, _ = await assert_status(resp, status.HTTP_200_OK)
5964
assert LicensedItemGet(**data)
6065

66+
67+
@pytest.fixture
68+
def mock_licensed_items_purchase_functions(mocker: MockerFixture) -> tuple:
69+
mock_wallet_credits = mocker.patch(
70+
"simcore_service_webserver.licenses._licensed_items_api.get_wallet_with_available_credits_by_user_and_wallet",
71+
spec=True,
72+
return_value=WalletGetWithAvailableCredits.model_validate(
73+
WalletGetWithAvailableCredits.model_config["json_schema_extra"]["examples"][
74+
0
75+
]
76+
),
77+
)
78+
mock_get_pricing_unit = mocker.patch(
79+
"simcore_service_webserver.licenses._licensed_items_api.get_pricing_plan_unit",
80+
spec=True,
81+
return_value=PricingUnitGet.model_validate(
82+
PricingUnitGet.model_config["json_schema_extra"]["examples"][0]
83+
),
84+
)
85+
mock_create_licensed_item_purchase = mocker.patch(
86+
"simcore_service_webserver.licenses._licensed_items_api.licensed_items_purchases.create_licensed_item_purchase",
87+
spec=True,
88+
)
89+
90+
return (
91+
mock_wallet_credits,
92+
mock_get_pricing_unit,
93+
mock_create_licensed_item_purchase,
94+
)
95+
96+
97+
@pytest.mark.parametrize("user_role,expected", [(UserRole.USER, status.HTTP_200_OK)])
98+
async def test_licensed_items_purchase(
99+
client: TestClient,
100+
logged_user: UserInfoDict,
101+
user_project: ProjectDict,
102+
osparc_product_name: str,
103+
expected: HTTPStatus,
104+
pricing_plan_id: int,
105+
mock_licensed_items_purchase_functions: tuple,
106+
):
107+
assert client.app
108+
109+
licensed_item_db = await _licensed_items_db.create(
110+
client.app,
111+
product_name=osparc_product_name,
112+
name="Model A",
113+
licensed_resource_type=LicensedResourceType.VIP_MODEL,
114+
pricing_plan_id=pricing_plan_id,
115+
)
116+
_licensed_item_id = licensed_item_db.licensed_item_id
117+
118+
# get
119+
url = client.app.router["get_licensed_item"].url_for(
120+
licensed_item_id=f"{_licensed_item_id}"
121+
)
122+
resp = await client.get(f"{url}")
123+
data, _ = await assert_status(resp, status.HTTP_200_OK)
124+
assert LicensedItemGet(**data)
125+
61126
# purchase
62127
url = client.app.router["purchase_licensed_item"].url_for(
63128
licensed_item_id=f"{_licensed_item_id}"
64129
)
65-
resp = await client.post(f"{url}", json={"wallet_id": 1, "num_of_seats": 5})
66-
# NOTE: Not yet implemented
130+
resp = await client.post(
131+
f"{url}",
132+
json={
133+
"wallet_id": 1,
134+
"num_of_seats": 5,
135+
"pricing_plan_id": pricing_plan_id,
136+
"pricing_unit_id": 1,
137+
},
138+
)
139+
await assert_status(resp, status.HTTP_204_NO_CONTENT)

0 commit comments

Comments
 (0)