Files
agent_contas/tests/migration/test_input_guardrail_user_feedback.py

42 lines
1.4 KiB
Python

from types import SimpleNamespace
from app.workflows.agent_graph import AgentWorkflow
def decision(code, allowed=False, reason=""):
return SimpleNamespace(code=code, allowed=allowed, reason=reason)
def test_coer_block_is_clarification_not_fake_security_message():
msg = AgentWorkflow._input_guardrail_user_message(
[decision("COER", reason="fala incompreensível ou negação ambígua na transcrição")],
{},
"está cobrando um",
)
assert "incompleta ou ambígua" in msg
assert "regra de segurança" not in msg.lower()
assert "COER" not in msg
def test_other_input_block_has_safe_non_internal_fallback():
msg = AgentWorkflow._input_guardrail_user_message(
[decision("UNKNOWN_RAIL", reason="internal implementation detail")],
{},
"texto",
)
assert "reformular" in msg.lower()
assert "internal implementation detail" not in msg
def test_blocked_input_is_routed_through_output_guardrails():
src = open("app/workflows/agent_graph.py", encoding="utf-8").read()
assert '{"blocked": "output_guardrails", "continue": "load_long_term_memory"}' in src
assert '{"blocked": "persist", "continue": "judge"}' in src
def test_blocked_input_clears_stale_tool_state():
src = open("app/workflows/agent_graph.py", encoding="utf-8").read()
assert '"mcp_tools": []' in src
assert '"mcp_results": []' in src
assert '"intent": "input_guardrail_blocked"' in src