|
13 | 13 | from fastapi import FastAPI |
14 | 14 | from models_library.products import ProductName |
15 | 15 | from models_library.rest_pagination import MAXIMUM_NUMBER_OF_ITEMS_PER_PAGE |
| 16 | +from models_library.services import ServiceRelease |
16 | 17 | from models_library.services_types import ServiceKey, ServiceVersion |
17 | 18 | from models_library.users import UserID |
18 | 19 | from pydantic import ValidationError |
|
29 | 30 | batch_get_my_services, |
30 | 31 | check_for_service, |
31 | 32 | get_service, |
| 33 | + get_service_release_history, |
32 | 34 | list_services_paginated, |
33 | 35 | update_service, |
34 | 36 | ) |
@@ -477,3 +479,69 @@ async def test_rpc_batch_get_my_services( |
477 | 479 | "write": True, |
478 | 480 | } |
479 | 481 | assert my_services[1].owner == user["primary_gid"] |
| 482 | + assert my_services[1].key == other_service_key |
| 483 | + assert my_services[1].release.version == other_service_version |
| 484 | + |
| 485 | + |
| 486 | +async def test_rpc_get_service_release_history( |
| 487 | + background_sync_task_mocked: None, |
| 488 | + mocked_director_service_api: MockRouter, |
| 489 | + rpc_client: RabbitMQRPCClient, |
| 490 | + product_name: ProductName, |
| 491 | + user_id: UserID, |
| 492 | + app: FastAPI, |
| 493 | +): |
| 494 | + assert app |
| 495 | + |
| 496 | + service_key = "simcore/services/comp/test-service-release-history" |
| 497 | + service_version_1 = "1.0.0" |
| 498 | + service_version_2 = "1.1.0" |
| 499 | + |
| 500 | + # Inject fake service releases for the target service |
| 501 | + fake_releases = [ |
| 502 | + ServiceRelease(key=service_key, version=service_version_1), |
| 503 | + ServiceRelease(key=service_key, version=service_version_2), |
| 504 | + ] |
| 505 | + |
| 506 | + # Inject unrelated fake service releases |
| 507 | + unrelated_service_key_1 = "simcore/services/comp/unrelated-service-1" |
| 508 | + unrelated_service_key_2 = "simcore/services/comp/unrelated-service-2" |
| 509 | + unrelated_releases = [ |
| 510 | + ServiceRelease(key=unrelated_service_key_1, version="1.0.0"), |
| 511 | + ServiceRelease(key=unrelated_service_key_1, version="1.1.0"), |
| 512 | + ServiceRelease(key=unrelated_service_key_2, version="2.0.0"), |
| 513 | + ] |
| 514 | + |
| 515 | + mocked_director_service_api.post( |
| 516 | + f"/services/{service_key}/releases", |
| 517 | + json=[release.model_dump() for release in fake_releases], |
| 518 | + ) |
| 519 | + mocked_director_service_api.post( |
| 520 | + f"/services/{unrelated_service_key_1}/releases", |
| 521 | + json=[release.model_dump() for release in unrelated_releases[:2]], |
| 522 | + ) |
| 523 | + mocked_director_service_api.post( |
| 524 | + f"/services/{unrelated_service_key_2}/releases", |
| 525 | + json=[release.model_dump() for release in unrelated_releases[2:]], |
| 526 | + ) |
| 527 | + |
| 528 | + # Call the RPC function |
| 529 | + release_history = await get_service_release_history( |
| 530 | + rpc_client, |
| 531 | + product_name=product_name, |
| 532 | + user_id=user_id, |
| 533 | + service_key=service_key, |
| 534 | + ) |
| 535 | + |
| 536 | + # Validate the response |
| 537 | + assert isinstance(release_history, list) |
| 538 | + assert len(release_history) == 2 |
| 539 | + assert release_history[0].key == service_key |
| 540 | + assert release_history[0].version == service_version_1 |
| 541 | + assert release_history[1].key == service_key |
| 542 | + assert release_history[1].version == service_version_2 |
| 543 | + |
| 544 | + # Ensure unrelated services do not appear in the release history |
| 545 | + unrelated_keys = {unrelated_service_key_1, unrelated_service_key_2} |
| 546 | + for release in release_history: |
| 547 | + assert release.key not in unrelated_keys |
0 commit comments