From f58a6c64be1e66683eeeae3cc1cd13b22b59205c Mon Sep 17 00:00:00 2001 From: CleverThis Date: Tue, 2 Jun 2026 11:17:47 -0400 Subject: [PATCH] fix(tests): update stale mock patch targets after validation helper refactor The PR moved `_get_tool_registry_service` from a private helper in `validation.py` to a public `get_tool_registry_service` in `validation_helpers.py`, re-exported into the `validation` module namespace. All test files that patched the old private name via `mock.patch()` raised `AttributeError` at runtime. Updated all 14 affected files to patch the public name: - features/steps/: 8 step files updated patch targets and direct imports - robot/: 4 helper scripts updated patch targets - benchmarks/: 2 benchmark files updated patch targets Also fixed `validation_list_command_steps.py`: - Added `patch` import - Added proper `get_tool_registry_service` patcher in all @given steps so the CLI is mocked correctly during scenario execution - Removed invalid import from non-existent `validation_app` module ISSUES CLOSED: #8667 --- benchmarks/m3_smoke_bench.py | 2 +- benchmarks/tool_cli_bench.py | 2 +- .../m3_decision_validation_smoke_steps.py | 2 +- .../tdd_di_tool_registry_service_steps.py | 6 ++-- .../tdd_validation_add_required_flag_steps.py | 2 +- features/steps/tool_cli_coverage_steps.py | 2 +- features/steps/tool_cli_steps.py | 2 +- .../validation_attach_type_guard_steps.py | 2 +- ...validation_cli_uncovered_branches_steps.py | 6 ++-- .../steps/validation_list_command_steps.py | 36 +++++++++++++++++-- robot/helper_m3_decision_validation_smoke.py | 6 ++-- robot/helper_tdd_validation_required_flag.py | 2 +- robot/helper_tool_cli.py | 6 ++-- robot/helper_validation_attach_type_guard.py | 6 ++-- 14 files changed, 56 insertions(+), 26 deletions(-) diff --git a/benchmarks/m3_smoke_bench.py b/benchmarks/m3_smoke_bench.py index 82274d83a..fd823b201 100644 --- a/benchmarks/m3_smoke_bench.py +++ b/benchmarks/m3_smoke_bench.py @@ -150,7 +150,7 @@ class M3ValidationAddSuite: } self._mock_service.register_tool.return_value = mock_validation self._patcher = patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=self._mock_service, ) self._patcher.start() diff --git a/benchmarks/tool_cli_bench.py b/benchmarks/tool_cli_bench.py index 5b3569e97..15d4cd28a 100644 --- a/benchmarks/tool_cli_bench.py +++ b/benchmarks/tool_cli_bench.py @@ -162,7 +162,7 @@ class ValidationCLIAddSuite: ) self._mock_service.get_tool.return_value = None self._patcher = patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=self._mock_service, ) self._patcher.start() diff --git a/features/steps/m3_decision_validation_smoke_steps.py b/features/steps/m3_decision_validation_smoke_steps.py index cfc321e35..5f265be6c 100644 --- a/features/steps/m3_decision_validation_smoke_steps.py +++ b/features/steps/m3_decision_validation_smoke_steps.py @@ -58,7 +58,7 @@ def step_m3_smoke_mock_env(context: Context) -> None: return_value=context.mock_invariant_service, ) context.validation_patcher = patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=context.mock_tool_registry_service, ) context.plan_patcher = patch( diff --git a/features/steps/tdd_di_tool_registry_service_steps.py b/features/steps/tdd_di_tool_registry_service_steps.py index 1fbb367ba..6d584f980 100644 --- a/features/steps/tdd_di_tool_registry_service_steps.py +++ b/features/steps/tdd_di_tool_registry_service_steps.py @@ -54,11 +54,11 @@ def step_tdd_di_container_has_provider(context: Context) -> None: @when("_get_tool_registry_service is called with the mocked container") def step_tdd_di_call_function(context: Context) -> None: - """Call _get_tool_registry_service with the mocked container injected.""" - from cleveragents.cli.commands.validation import _get_tool_registry_service + """Call get_tool_registry_service with the mocked container injected.""" + from cleveragents.cli.commands.validation_helpers import get_tool_registry_service with patch(_PATCH_GET_CONTAINER, return_value=context.tdd_di_mock_container): - context.tdd_di_returned_service = _get_tool_registry_service() + context.tdd_di_returned_service = get_tool_registry_service() @then("the returned service should be the one from container.tool_registry_service") diff --git a/features/steps/tdd_validation_add_required_flag_steps.py b/features/steps/tdd_validation_add_required_flag_steps.py index 15bbaa3d8..0cf9f7bbd 100644 --- a/features/steps/tdd_validation_add_required_flag_steps.py +++ b/features/steps/tdd_validation_add_required_flag_steps.py @@ -31,7 +31,7 @@ from cleveragents.cli.commands.validation import app as validation_app _runner = CliRunner() -_PATCH_SVC = "cleveragents.cli.commands.validation._get_tool_registry_service" +_PATCH_SVC = "cleveragents.cli.commands.validation.get_tool_registry_service" _VALID_MODES = {"required", "informational"} diff --git a/features/steps/tool_cli_coverage_steps.py b/features/steps/tool_cli_coverage_steps.py index ed39f8dc5..c6351664b 100644 --- a/features/steps/tool_cli_coverage_steps.py +++ b/features/steps/tool_cli_coverage_steps.py @@ -35,7 +35,7 @@ def _patch_tool_svc(context: Context) -> Any: def _patch_val_svc(context: Context) -> Any: return patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=context.mock_service, ) diff --git a/features/steps/tool_cli_steps.py b/features/steps/tool_cli_steps.py index a97cb7536..83e0c2de0 100644 --- a/features/steps/tool_cli_steps.py +++ b/features/steps/tool_cli_steps.py @@ -91,7 +91,7 @@ def _patch_tool_svc(context: Context) -> Any: def _patch_val_svc(context: Context) -> Any: return patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=context.mock_service, ) diff --git a/features/steps/validation_attach_type_guard_steps.py b/features/steps/validation_attach_type_guard_steps.py index 429807995..20deba1be 100644 --- a/features/steps/validation_attach_type_guard_steps.py +++ b/features/steps/validation_attach_type_guard_steps.py @@ -35,7 +35,7 @@ def step_type_guard_mock_env(context: Context) -> None: context.mock_tool_registry_service = MagicMock() context.validation_patcher = patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=context.mock_tool_registry_service, ) context.validation_patcher.start() diff --git a/features/steps/validation_cli_uncovered_branches_steps.py b/features/steps/validation_cli_uncovered_branches_steps.py index 40141324b..710900526 100644 --- a/features/steps/validation_cli_uncovered_branches_steps.py +++ b/features/steps/validation_cli_uncovered_branches_steps.py @@ -32,7 +32,7 @@ _runner = CliRunner() _PATCH_GET_CONTAINER = "cleveragents.application.container.get_container" # For the detach scenario we still patch the whole helper to isolate DB access. -_PATCH_VAL_SVC = "cleveragents.cli.commands.validation._get_tool_registry_service" +_PATCH_VAL_SVC = "cleveragents.cli.commands.validation.get_tool_registry_service" # --------------------------------------------------------------------------- @@ -89,10 +89,10 @@ def step_vcb_di_container(context: Context) -> None: @when("the validation cli branch _get_tool_registry_service is called") def step_vcb_call_get_tool_registry_service(context: Context) -> None: - from cleveragents.cli.commands.validation import _get_tool_registry_service + from cleveragents.cli.commands.validation_helpers import get_tool_registry_service with patch(_PATCH_GET_CONTAINER, return_value=context.vcb_mock_container): - context.vcb_returned_service = _get_tool_registry_service() + context.vcb_returned_service = get_tool_registry_service() @then("the validation cli branch returned service should be a ToolRegistryService") diff --git a/features/steps/validation_list_command_steps.py b/features/steps/validation_list_command_steps.py index 5a279b9ac..237fae176 100644 --- a/features/steps/validation_list_command_steps.py +++ b/features/steps/validation_list_command_steps.py @@ -7,7 +7,7 @@ from typing import Any import yaml from behave import given, then, when from typer.testing import CliRunner -from unittest.mock import MagicMock +from unittest.mock import MagicMock, patch def _make_validation( @@ -53,6 +53,14 @@ def _make_attachment( def step_validate_list_runner(context: Any) -> None: """Set up a CliRunner for the validation CLI app.""" context.validation_list_runner = CliRunner(mix_stderr=False) + mock_service = MagicMock() + mock_service.list_tools.return_value = [] + patcher = patch( + "cleveragents.cli.commands.validation.get_tool_registry_service", + return_value=mock_service, + ) + patcher.start() + context.add_cleanup(patcher.stop) @given("a tool registry with registered validation tools") @@ -80,8 +88,12 @@ def step_mock_validation_service_with_tools(context: Any) -> None: mock_service.list_tools.return_value = validations mock_service.get_tool.return_value = None - from cleveragents.cli.commands.validation_app import app as validation_app # noqa: F401 - + patcher = patch( + "cleveragents.cli.commands.validation.get_tool_registry_service", + return_value=mock_service, + ) + patcher.start() + context.add_cleanup(patcher.stop) context.mock_validation_service = mock_service @@ -102,6 +114,12 @@ def step_mock_namespaced_validations(context: Any) -> None: mock_service = MagicMock() mock_service.list_tools.return_value = validations + patcher = patch( + "cleveragents.cli.commands.validation.get_tool_registry_service", + return_value=mock_service, + ) + patcher.start() + context.add_cleanup(patcher.stop) context.mock_validation_service = mock_service @@ -128,6 +146,12 @@ def step_mock_sourced_validations(context: Any) -> None: mock_service = MagicMock() mock_service.list_tools.return_value = validations + patcher = patch( + "cleveragents.cli.commands.validation.get_tool_registry_service", + return_value=mock_service, + ) + patcher.start() + context.add_cleanup(patcher.stop) context.mock_validation_service = mock_service @@ -148,6 +172,12 @@ def step_mock_numbered_validations(context: Any) -> None: mock_service = MagicMock() mock_service.list_tools.return_value = validations + patcher = patch( + "cleveragents.cli.commands.validation.get_tool_registry_service", + return_value=mock_service, + ) + patcher.start() + context.add_cleanup(patcher.stop) context.mock_validation_service = mock_service diff --git a/robot/helper_m3_decision_validation_smoke.py b/robot/helper_m3_decision_validation_smoke.py index 2b81fb245..641422720 100644 --- a/robot/helper_m3_decision_validation_smoke.py +++ b/robot/helper_m3_decision_validation_smoke.py @@ -189,7 +189,7 @@ def validation_add() -> None: } mock_svc.register_tool.return_value = mock_validation with patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=mock_svc, ): result = runner.invoke( @@ -218,7 +218,7 @@ def validation_attach() -> None: mock_attachment.created_at = "2026-01-01T00:00:00" mock_svc.attach_validation.return_value = mock_attachment with patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=mock_svc, ): result = runner.invoke( @@ -243,7 +243,7 @@ def validation_detach() -> None: mock_svc = MagicMock() mock_svc.detach_validation.return_value = True with patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=mock_svc, ): result = runner.invoke( diff --git a/robot/helper_tdd_validation_required_flag.py b/robot/helper_tdd_validation_required_flag.py index ed528ba0c..1a2680dcc 100644 --- a/robot/helper_tdd_validation_required_flag.py +++ b/robot/helper_tdd_validation_required_flag.py @@ -41,7 +41,7 @@ from cleveragents.cli.commands.validation import app as validation_app # noqa: runner: CliRunner = CliRunner() -_PATCH_SVC: str = "cleveragents.cli.commands.validation._get_tool_registry_service" +_PATCH_SVC: str = "cleveragents.cli.commands.validation.get_tool_registry_service" def _fail(message: str) -> NoReturn: diff --git a/robot/helper_tool_cli.py b/robot/helper_tool_cli.py index 1bf083b47..854e83b3a 100644 --- a/robot/helper_tool_cli.py +++ b/robot/helper_tool_cli.py @@ -151,7 +151,7 @@ def validation_add_config() -> None: svc.register_tool.return_value = _mock_tool("local/smoke-val", "validation") svc.get_tool.return_value = None with patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=svc, ): result = runner.invoke(validation_app, ["add", "--config", path]) @@ -166,7 +166,7 @@ def validation_attach() -> None: svc = MagicMock() svc.attach_validation.return_value = _mock_attachment() with patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=svc, ): result = runner.invoke( @@ -182,7 +182,7 @@ def validation_detach() -> None: svc = MagicMock() svc.detach_validation.return_value = True with patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=svc, ): result = runner.invoke( diff --git a/robot/helper_validation_attach_type_guard.py b/robot/helper_validation_attach_type_guard.py index 19b106afa..7b4e492c2 100644 --- a/robot/helper_validation_attach_type_guard.py +++ b/robot/helper_validation_attach_type_guard.py @@ -41,7 +41,7 @@ def attach_plain_tool_rejected() -> None: actual_type="tool", ) with patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=mock_svc, ): result = runner.invoke( @@ -79,7 +79,7 @@ def attach_validation_accepted() -> None: mock_attachment.created_at = "2026-01-01T00:00:00" mock_svc.attach_validation.return_value = mock_attachment with patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=mock_svc, ): result = runner.invoke( @@ -107,7 +107,7 @@ def attach_plain_tool_dict_rejected() -> None: actual_type="tool", ) with patch( - "cleveragents.cli.commands.validation._get_tool_registry_service", + "cleveragents.cli.commands.validation.get_tool_registry_service", return_value=mock_svc, ): result = runner.invoke(