|
48 | 48 | from pydantic import EmailStr, HttpUrl, TypeAdapter |
49 | 49 | from pytest_mock import MockerFixture, MockType |
50 | 50 | from pytest_simcore.helpers.catalog_rpc_server import CatalogRpcSideEffects |
| 51 | +from pytest_simcore.helpers.director_v2_rpc_server import DirectorV2SideEffects |
51 | 52 | from pytest_simcore.helpers.host import get_localhost_ip |
52 | 53 | from pytest_simcore.helpers.monkeypatch_envs import EnvVarsDict, setenvs_from_dict |
53 | 54 | from pytest_simcore.helpers.webserver_rpc_server import WebserverRpcSideEffects |
@@ -611,6 +612,49 @@ def mocked_catalog_rpc_api( |
611 | 612 | return mocks |
612 | 613 |
|
613 | 614 |
|
| 615 | +@pytest.fixture |
| 616 | +def directorv2_rpc_side_effects(request) -> Any: |
| 617 | + if "param" in dir(request) and request.param is not None: |
| 618 | + return request.param |
| 619 | + return DirectorV2SideEffects() |
| 620 | + |
| 621 | + |
| 622 | +@pytest.fixture |
| 623 | +def mocked_directorv2_rpc_api( |
| 624 | + mocked_app_dependencies: None, |
| 625 | + mocker: MockerFixture, |
| 626 | + directorv2_rpc_side_effects: Any, |
| 627 | +) -> dict[str, MockType]: |
| 628 | + """ |
| 629 | + Mocks the director-v2's simcore service RPC API for testing purposes. |
| 630 | + """ |
| 631 | + from servicelib.rabbitmq.rpc_interfaces.director_v2 import ( |
| 632 | + computations_tasks as directorv2_rpc, # keep import here |
| 633 | + ) |
| 634 | + |
| 635 | + mocks = {} |
| 636 | + |
| 637 | + # Get all callable methods from the side effects class that are not built-ins |
| 638 | + side_effect_methods = [ |
| 639 | + method_name |
| 640 | + for method_name in dir(directorv2_rpc_side_effects) |
| 641 | + if not method_name.startswith("_") |
| 642 | + and callable(getattr(directorv2_rpc_side_effects, method_name)) |
| 643 | + ] |
| 644 | + |
| 645 | + # Create mocks for each method in directorv2_rpc that has a corresponding side effect |
| 646 | + for method_name in side_effect_methods: |
| 647 | + if hasattr(directorv2_rpc, method_name): |
| 648 | + mocks[method_name] = mocker.patch.object( |
| 649 | + directorv2_rpc, |
| 650 | + method_name, |
| 651 | + autospec=True, |
| 652 | + side_effect=getattr(directorv2_rpc_side_effects, method_name), |
| 653 | + ) |
| 654 | + |
| 655 | + return mocks |
| 656 | + |
| 657 | + |
614 | 658 | # |
615 | 659 | # Other Mocks |
616 | 660 | # |
|
0 commit comments