77
88import pytest
99from aiohttp .test_utils import TestClient
10+ from models_library .api_schemas_resource_usage_tracker .licensed_items_usages import (
11+ LicenseCheckoutGet ,
12+ LicensedItemUsageGet ,
13+ )
1014from models_library .licensed_items import LicensedResourceType
1115from models_library .products import ProductName
1216from pytest_mock import MockerFixture
1721from servicelib .rabbitmq .rpc_interfaces .webserver .licenses .licensed_items import (
1822 checkout_licensed_item_for_wallet ,
1923 get_licensed_items ,
20- get_licensed_items_for_wallet ,
24+ get_purchased_licensed_items_for_wallet ,
2125 release_licensed_item_for_wallet ,
2226)
2327from settings_library .rabbit import RabbitSettings
@@ -67,12 +71,66 @@ async def rpc_client(
6771 return await rabbitmq_rpc_client ("client" )
6872
6973
70- async def test_api_keys_workflow (
74+ @pytest .fixture
75+ def mock_get_wallet_by_user (mocker : MockerFixture ) -> tuple :
76+ return mocker .patch (
77+ "simcore_service_webserver.licenses._licensed_checkouts_api.get_wallet_by_user" ,
78+ spec = True ,
79+ )
80+
81+
82+ _LICENSE_CHECKOUT_GET = LicenseCheckoutGet .model_validate (
83+ {
84+ "checkout_id" : "beb16d18-d57d-44aa-a638-9727fa4a72ef" ,
85+ }
86+ )
87+
88+
89+ @pytest .fixture
90+ def mock_checkout_licensed_item (mocker : MockerFixture ) -> tuple :
91+ return mocker .patch (
92+ "simcore_service_webserver.licenses._licensed_checkouts_api.licensed_items_usages.checkout_licensed_item" ,
93+ spec = True ,
94+ return_value = _LICENSE_CHECKOUT_GET ,
95+ )
96+
97+
98+ _LICENSED_ITEM_USAGE_GET = LicensedItemUsageGet .model_validate (
99+ LicensedItemUsageGet .model_config ["json_schema_extra" ]["examples" ][0 ]
100+ )
101+
102+
103+ @pytest .fixture
104+ def mock_get_licensed_item_usage (mocker : MockerFixture ) -> tuple :
105+ return mocker .patch (
106+ "simcore_service_webserver.licenses._licensed_checkouts_api.licensed_items_usages.get_licensed_item_usage" ,
107+ spec = True ,
108+ return_value = _LICENSED_ITEM_USAGE_GET ,
109+ )
110+
111+
112+ @pytest .fixture
113+ def mock_release_licensed_item (mocker : MockerFixture ) -> tuple :
114+ return mocker .patch (
115+ "simcore_service_webserver.licenses._licensed_checkouts_api.licensed_items_usages.release_licensed_item" ,
116+ spec = True ,
117+ return_value = _LICENSED_ITEM_USAGE_GET ,
118+ )
119+
120+
121+ @pytest .mark .acceptance_test (
122+ "Implements https://github.com/ITISFoundation/osparc-issues/issues/1800"
123+ )
124+ async def test_license_checkout_workflow (
71125 client : TestClient ,
72126 rpc_client : RabbitMQRPCClient ,
73127 osparc_product_name : ProductName ,
74128 logged_user : UserInfoDict ,
75129 pricing_plan_id : int ,
130+ mock_get_wallet_by_user : MockerFixture ,
131+ mock_checkout_licensed_item : MockerFixture ,
132+ mock_release_licensed_item : MockerFixture ,
133+ mock_get_licensed_item_usage : MockerFixture ,
76134):
77135 assert client .app
78136
@@ -82,7 +140,7 @@ async def test_api_keys_workflow(
82140 assert len (result .items ) == 0
83141 assert result .total == 0
84142
85- await _licensed_items_db .create (
143+ license_item_db = await _licensed_items_db .create (
86144 client .app ,
87145 product_name = osparc_product_name ,
88146 name = "Model A" ,
@@ -97,31 +155,26 @@ async def test_api_keys_workflow(
97155 assert result .total == 1
98156
99157 with pytest .raises (NotImplementedError ):
100- await get_licensed_items_for_wallet (
158+ await get_purchased_licensed_items_for_wallet (
101159 rpc_client ,
102160 user_id = logged_user ["id" ],
103161 product_name = osparc_product_name ,
104162 wallet_id = 1 ,
105163 )
106164
107- with pytest .raises (NotImplementedError ):
108- await checkout_licensed_item_for_wallet (
109- rpc_client ,
110- user_id = logged_user ["id" ],
111- product_name = osparc_product_name ,
112- wallet_id = 1 ,
113- licensed_item_id = "c5139a2e-4e1f-4ebe-9bfd-d17f195111ee" ,
114- num_of_seats = 1 ,
115- service_run_id = "run_1" ,
116- )
165+ checkout = await checkout_licensed_item_for_wallet (
166+ rpc_client ,
167+ product_name = osparc_product_name ,
168+ user_id = logged_user ["id" ],
169+ wallet_id = 1 ,
170+ licensed_item_id = license_item_db .licensed_item_id ,
171+ num_of_seats = 1 ,
172+ service_run_id = "run_1" ,
173+ )
117174
118- with pytest .raises (NotImplementedError ):
119- await release_licensed_item_for_wallet (
120- rpc_client ,
121- user_id = logged_user ["id" ],
122- product_name = osparc_product_name ,
123- wallet_id = 1 ,
124- licensed_item_id = "c5139a2e-4e1f-4ebe-9bfd-d17f195111ee" ,
125- num_of_seats = 1 ,
126- service_run_id = "run_1" ,
127- )
175+ await release_licensed_item_for_wallet (
176+ rpc_client ,
177+ product_name = osparc_product_name ,
178+ user_id = logged_user ["id" ],
179+ checkout_id = checkout .checkout_id ,
180+ )
0 commit comments