Skip to content

Commit 84fce1a

Browse files
adding RUT tests for versionig
1 parent 4bace37 commit 84fce1a

File tree

2 files changed

+138
-1
lines changed

2 files changed

+138
-1
lines changed

services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/services/modules/db/licensed_items_purchases_db.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,6 @@ async def get_active_purchased_seats_for_key_version_wallet(
170170
engine: AsyncEngine,
171171
connection: AsyncConnection | None = None,
172172
*,
173-
# licensed_item_id: LicensedItemID,
174173
key: str,
175174
version: str,
176175
wallet_id: WalletID,

services/resource-usage-tracker/tests/unit/with_dbs/test_api_licensed_items_checkouts.py

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,15 @@
2222
licensed_items_checkouts,
2323
licensed_items_purchases,
2424
)
25+
from servicelib.rabbitmq.rpc_interfaces.resource_usage_tracker.errors import (
26+
NotEnoughAvailableSeatsError,
27+
)
2528
from simcore_postgres_database.models.resource_tracker_licensed_items_checkouts import (
2629
resource_tracker_licensed_items_checkouts,
2730
)
31+
from simcore_postgres_database.models.resource_tracker_licensed_items_purchases import (
32+
resource_tracker_licensed_items_purchases,
33+
)
2834
from simcore_postgres_database.models.resource_tracker_service_runs import (
2935
resource_tracker_service_runs,
3036
)
@@ -62,6 +68,7 @@ def resource_tracker_service_run_id(
6268
yield row[0]
6369

6470
con.execute(resource_tracker_licensed_items_checkouts.delete())
71+
con.execute(resource_tracker_licensed_items_purchases.delete())
6572
con.execute(resource_tracker_service_runs.delete())
6673

6774

@@ -141,3 +148,134 @@ async def test_rpc_licensed_items_checkouts_workflow(
141148
)
142149
assert license_item_checkout
143150
assert isinstance(license_item_checkout.stopped_at, datetime)
151+
152+
153+
async def test_rpc_licensed_items_checkouts_can_checkout_older_version(
154+
mocked_redis_server: None,
155+
resource_tracker_service_run_id: str,
156+
rpc_client: RabbitMQRPCClient,
157+
):
158+
# List licensed items checkouts
159+
output = await licensed_items_checkouts.get_licensed_items_checkouts_page(
160+
rpc_client,
161+
product_name="osparc",
162+
filter_wallet_id=_WALLET_ID,
163+
)
164+
assert output.total == 0
165+
assert output.items == []
166+
167+
# Purchase license item
168+
_create_data = LicensedItemsPurchasesCreate(
169+
product_name="osparc",
170+
licensed_item_id="beb16d18-d57d-44aa-a638-9727fa4a72ef",
171+
key="Duke",
172+
version="2.0.0",
173+
wallet_id=_WALLET_ID,
174+
wallet_name="My Wallet",
175+
pricing_plan_id=1,
176+
pricing_unit_id=1,
177+
pricing_unit_cost_id=1,
178+
pricing_unit_cost=Decimal(10),
179+
start_at=datetime.now(tz=UTC),
180+
expire_at=datetime.now(tz=UTC) + timedelta(days=1),
181+
num_of_seats=5,
182+
purchased_by_user=_USER_ID_1,
183+
user_email="[email protected]",
184+
purchased_at=datetime.now(tz=UTC),
185+
)
186+
created_item = await licensed_items_purchases.create_licensed_item_purchase(
187+
rpc_client, data=_create_data
188+
)
189+
190+
# Checkout with num of seats
191+
checkout = await licensed_items_checkouts.checkout_licensed_item(
192+
rpc_client,
193+
licensed_item_id=created_item.licensed_item_id,
194+
key="Duke",
195+
version="1.0.0", # <-- Older version
196+
wallet_id=_WALLET_ID,
197+
product_name="osparc",
198+
num_of_seats=3,
199+
service_run_id=resource_tracker_service_run_id,
200+
user_id=_USER_ID_1,
201+
user_email="[email protected]",
202+
)
203+
204+
# List licensed items checkouts
205+
output = await licensed_items_checkouts.get_licensed_items_checkouts_page(
206+
rpc_client,
207+
product_name="osparc",
208+
filter_wallet_id=_WALLET_ID,
209+
)
210+
assert output.total == 1
211+
assert isinstance(output, LicensedItemsCheckoutsPage)
212+
213+
# Get licensed items checkouts
214+
output = await licensed_items_checkouts.get_licensed_item_checkout(
215+
rpc_client,
216+
product_name="osparc",
217+
licensed_item_checkout_id=output.items[0].licensed_item_checkout_id,
218+
)
219+
assert isinstance(output, LicensedItemCheckoutGet)
220+
221+
# Release num of seats
222+
license_item_checkout = await licensed_items_checkouts.release_licensed_item(
223+
rpc_client,
224+
licensed_item_checkout_id=checkout.licensed_item_checkout_id,
225+
product_name="osparc",
226+
)
227+
assert license_item_checkout
228+
assert isinstance(license_item_checkout.stopped_at, datetime)
229+
230+
231+
async def test_rpc_licensed_items_checkouts_can_not_checkout_newer_version(
232+
mocked_redis_server: None,
233+
resource_tracker_service_run_id: str,
234+
rpc_client: RabbitMQRPCClient,
235+
):
236+
# List licensed items checkouts
237+
output = await licensed_items_checkouts.get_licensed_items_checkouts_page(
238+
rpc_client,
239+
product_name="osparc",
240+
filter_wallet_id=_WALLET_ID,
241+
)
242+
assert output.total == 0
243+
assert output.items == []
244+
245+
# Purchase license item
246+
_create_data = LicensedItemsPurchasesCreate(
247+
product_name="osparc",
248+
licensed_item_id="beb16d18-d57d-44aa-a638-9727fa4a72ef",
249+
key="Duke",
250+
version="2.0.0", # <-- Older version
251+
wallet_id=_WALLET_ID,
252+
wallet_name="My Wallet",
253+
pricing_plan_id=1,
254+
pricing_unit_id=1,
255+
pricing_unit_cost_id=1,
256+
pricing_unit_cost=Decimal(10),
257+
start_at=datetime.now(tz=UTC),
258+
expire_at=datetime.now(tz=UTC) + timedelta(days=1),
259+
num_of_seats=5,
260+
purchased_by_user=_USER_ID_1,
261+
user_email="[email protected]",
262+
purchased_at=datetime.now(tz=UTC),
263+
)
264+
created_item = await licensed_items_purchases.create_licensed_item_purchase(
265+
rpc_client, data=_create_data
266+
)
267+
268+
# Checkout with num of seats
269+
with pytest.raises(NotEnoughAvailableSeatsError):
270+
await licensed_items_checkouts.checkout_licensed_item(
271+
rpc_client,
272+
licensed_item_id=created_item.licensed_item_id,
273+
key="Duke",
274+
version="3.0.0", # <-- Newer version
275+
wallet_id=_WALLET_ID,
276+
product_name="osparc",
277+
num_of_seats=3,
278+
service_run_id=resource_tracker_service_run_id,
279+
user_id=_USER_ID_1,
280+
user_email="[email protected]",
281+
)

0 commit comments

Comments
 (0)