Skip to content

Commit c4e56df

Browse files
checkout release functionality
1 parent 7406371 commit c4e56df

File tree

5 files changed

+72
-15
lines changed

5 files changed

+72
-15
lines changed

packages/models-library/src/models_library/api_schemas_resource_usage_tracker/licensed_items_usages.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class LicensedItemUsageGet(BaseModel):
2020
user_id: UserID
2121
product_name: ProductName
2222
service_run_id: ServiceRunId
23-
start_at: datetime
23+
started_at: datetime
2424
stopped_at: datetime | None
2525
num_of_seats: int
2626

@@ -34,7 +34,7 @@ class LicensedItemUsageGet(BaseModel):
3434
"user_id": 1,
3535
"product_name": "osparc",
3636
"service_run_id": "run_1",
37-
"start_at": "2023-01-11 13:11:47.293595",
37+
"started_at": "2023-01-11 13:11:47.293595",
3838
"stopped_at": "2023-01-11 13:11:47.293595",
3939
"num_of_seats": 1,
4040
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
"""modify licenses DB
2+
3+
Revision ID: 3720518f82a7
4+
Revises: 77ac824a77ff
5+
Create Date: 2024-12-13 12:46:38.302027+00:00
6+
7+
"""
8+
import sqlalchemy as sa
9+
from alembic import op
10+
from sqlalchemy.dialects import postgresql
11+
12+
# revision identifiers, used by Alembic.
13+
revision = "3720518f82a7"
14+
down_revision = "77ac824a77ff"
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade():
20+
op.drop_column("resource_tracker_licensed_items_usage", "licensed_item_id")
21+
op.add_column(
22+
"resource_tracker_licensed_items_usage",
23+
sa.Column("licensed_item_id", postgresql.UUID(as_uuid=True), nullable=False),
24+
)
25+
26+
27+
def downgrade():
28+
...

services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/services/licensed_items_usages.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ async def list_licensed_items_purchases(
5656
user_id=licensed_item_usage_db.user_id,
5757
product_name=licensed_item_usage_db.product_name,
5858
service_run_id=licensed_item_usage_db.service_run_id,
59-
start_at=licensed_item_usage_db.start_at,
59+
started_at=licensed_item_usage_db.started_at,
6060
stopped_at=licensed_item_usage_db.stopped_at,
6161
num_of_seats=licensed_item_usage_db.num_of_seats,
6262
)
@@ -84,7 +84,7 @@ async def get_licensed_item_usage(
8484
user_id=licensed_item_usage_db.user_id,
8585
product_name=licensed_item_usage_db.product_name,
8686
service_run_id=licensed_item_usage_db.service_run_id,
87-
start_at=licensed_item_usage_db.start_at,
87+
started_at=licensed_item_usage_db.started_at,
8888
stopped_at=licensed_item_usage_db.stopped_at,
8989
num_of_seats=licensed_item_usage_db.num_of_seats,
9090
)
@@ -176,7 +176,7 @@ async def release_licensed_item(
176176
user_id=licensed_item_usage_db.user_id,
177177
product_name=licensed_item_usage_db.product_name,
178178
service_run_id=licensed_item_usage_db.service_run_id,
179-
start_at=licensed_item_usage_db.started_at,
179+
started_at=licensed_item_usage_db.started_at,
180180
stopped_at=licensed_item_usage_db.stopped_at,
181181
num_of_seats=licensed_item_usage_db.num_of_seats,
182182
)

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

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66

77
from datetime import UTC, datetime, timedelta
88
from decimal import Decimal
9+
from typing import Generator
910

11+
import pytest
1012
import sqlalchemy as sa
1113
from models_library.resource_tracker_licensed_items_purchases import (
1214
LicensedItemsPurchasesCreate,
@@ -16,6 +18,9 @@
1618
licensed_items_purchases,
1719
licensed_items_usages,
1820
)
21+
from simcore_postgres_database.models.resource_tracker_service_runs import (
22+
resource_tracker_service_runs,
23+
)
1924

2025
pytest_simcore_core_services_selection = [
2126
"postgres",
@@ -38,16 +43,43 @@ async def test_service_licensed_items_usages(
3843
# Get licensed items usages
3944

4045

46+
_USER_ID_1 = 1
47+
_WALLET_ID = 6
48+
49+
50+
@pytest.fixture()
51+
def resource_tracker_service_run_id(
52+
postgres_db: sa.engine.Engine, random_resource_tracker_service_run
53+
) -> Generator[str, None, None]:
54+
with postgres_db.connect() as con:
55+
result = con.execute(
56+
resource_tracker_service_runs.insert()
57+
.values(
58+
**random_resource_tracker_service_run(
59+
user_id=_USER_ID_1, wallet_id=_WALLET_ID
60+
)
61+
)
62+
.returning(resource_tracker_service_runs.c.service_run_id)
63+
)
64+
row = result.first()
65+
assert row
66+
67+
yield row[0]
68+
69+
con.execute(resource_tracker_service_runs.delete())
70+
71+
4172
async def test_rpc_licensed_items_usages_workflow(
4273
mocked_redis_server: None,
4374
postgres_db: sa.engine.Engine,
75+
resource_tracker_service_run_id: str,
4476
rpc_client: RabbitMQRPCClient,
4577
):
4678
# Purchase license item
4779
_create_data = LicensedItemsPurchasesCreate(
4880
product_name="osparc",
4981
licensed_item_id="beb16d18-d57d-44aa-a638-9727fa4a72ef",
50-
wallet_id=1,
82+
wallet_id=_WALLET_ID,
5183
wallet_name="My Wallet",
5284
pricing_plan_id=1,
5385
pricing_unit_id=1,
@@ -56,11 +88,10 @@ async def test_rpc_licensed_items_usages_workflow(
5688
start_at=datetime.now(tz=UTC),
5789
expire_at=datetime.now(tz=UTC) + timedelta(days=1),
5890
num_of_seats=5,
59-
purchased_by_user=1,
91+
purchased_by_user=_USER_ID_1,
6092
user_email="[email protected]",
6193
purchased_at=datetime.now(tz=UTC),
6294
)
63-
6495
created_item = await licensed_items_purchases.create_licensed_item_purchase(
6596
rpc_client, data=_create_data
6697
)
@@ -69,11 +100,11 @@ async def test_rpc_licensed_items_usages_workflow(
69100
checkout = await licensed_items_usages.checkout_licensed_item(
70101
rpc_client,
71102
licensed_item_id=created_item.licensed_item_id,
72-
wallet_id=1,
103+
wallet_id=_WALLET_ID,
73104
product_name="osparc",
74105
num_of_seats=3,
75-
service_run_id="run_1",
76-
user_id=1,
106+
service_run_id=resource_tracker_service_run_id,
107+
user_id=_USER_ID_1,
77108
user_email="[email protected]",
78109
)
79110

@@ -82,7 +113,4 @@ async def test_rpc_licensed_items_usages_workflow(
82113
rpc_client, checkout_id=checkout.checkout_id, product_name="osparc"
83114
)
84115
assert license_item_usage
85-
86-
87-
# TODO: MD
88-
# Add test for heartbeat check!
116+
assert isinstance(license_item_usage.stopped_at, datetime)

services/web/server/src/simcore_service_webserver/licenses/_licensed_items_purchases_api.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
async def list_licensed_items_purchases(
2828
app: web.Application,
29+
*,
2930
product_name: ProductName,
3031
user_id: UserID,
3132
wallet_id: WalletID,

0 commit comments

Comments
 (0)