|
22 | 22 | licensed_items_checkouts, |
23 | 23 | licensed_items_purchases, |
24 | 24 | ) |
| 25 | +from servicelib.rabbitmq.rpc_interfaces.resource_usage_tracker.errors import ( |
| 26 | + NotEnoughAvailableSeatsError, |
| 27 | +) |
25 | 28 | from simcore_postgres_database.models.resource_tracker_licensed_items_checkouts import ( |
26 | 29 | resource_tracker_licensed_items_checkouts, |
27 | 30 | ) |
| 31 | +from simcore_postgres_database.models.resource_tracker_licensed_items_purchases import ( |
| 32 | + resource_tracker_licensed_items_purchases, |
| 33 | +) |
28 | 34 | from simcore_postgres_database.models.resource_tracker_service_runs import ( |
29 | 35 | resource_tracker_service_runs, |
30 | 36 | ) |
@@ -62,6 +68,7 @@ def resource_tracker_service_run_id( |
62 | 68 | yield row[0] |
63 | 69 |
|
64 | 70 | con.execute(resource_tracker_licensed_items_checkouts.delete()) |
| 71 | + con.execute(resource_tracker_licensed_items_purchases.delete()) |
65 | 72 | con.execute(resource_tracker_service_runs.delete()) |
66 | 73 |
|
67 | 74 |
|
@@ -141,3 +148,134 @@ async def test_rpc_licensed_items_checkouts_workflow( |
141 | 148 | ) |
142 | 149 | assert license_item_checkout |
143 | 150 | 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 | + |
| 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 | + |
| 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 | + |
| 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 | + |
| 281 | + ) |
0 commit comments