fix(tests): force manual approval mode in E2E blocking tests

Commit 62a76bd3d (feat: make smart approvals the default, #62661)
changed approvals.mode default from "manual" to "smart". The
TestBlockingApprovalE2E tests did not patch the approval mode, so
check_all_command_guards routed through _smart_approve() first —
calling call_llm() which tried all auxiliary providers, failed (no
API keys in test env), and returned "escalate" before falling through
to the gateway blocking path. The LLM failure cascade took longer
than the test's 2.5s wait window (50 × 0.05s), so the notify
callback had not fired yet when assert len(notified) == 1 ran.

Force {"mode": "manual"} via patch in setup_method/teardown_method,
matching the pattern already used by test_blocking_approval_uses_
canonical_timeout in the same class.
This commit is contained in:
ethernet 2026-07-13 16:24:59 -04:00
parent caed552de1
commit 55624e10b9

View file

@ -421,6 +421,18 @@ class TestBlockingApprovalE2E:
os.environ.pop("HERMES_GATEWAY_SESSION", None)
os.environ.pop("HERMES_EXEC_ASK", None)
os.environ.pop("HERMES_SESSION_KEY", None)
# Force manual approval mode — these tests exercise the blocking
# gateway flow, not smart approval. The default became "smart"
# (#62661), which routes through _smart_approve() first and
# delays the notify callback past the test's wait window.
self._approval_mode_patch = patch(
"tools.approval._get_approval_config",
return_value={"mode": "manual"},
)
self._approval_mode_patch.start()
def teardown_method(self):
self._approval_mode_patch.stop()
def test_blocking_approval_approve_once(self):
"""check_all_command_guards blocks until resolve_gateway_approval is called."""