Files
awoooi/apps/api/tests/test_mcp_audit_context.py
Your Name 0e2e856f12
All checks were successful
Code Review / ai-code-review (push) Successful in 11s
CD Pipeline / tests (push) Successful in 58s
CD Pipeline / build-and-deploy (push) Successful in 4m39s
CD Pipeline / post-deploy-checks (push) Successful in 1m17s
fix(mcp): normalize audit session ids
2026-05-06 17:40:42 +08:00

75 lines
2.3 KiB
Python

from __future__ import annotations
from src.services.mcp_audit_context import (
MAX_MCP_AUDIT_SESSION_ID_LENGTH,
build_mcp_audit_context,
normalize_mcp_audit_session_id,
with_mcp_audit_context,
)
def test_build_mcp_audit_context_keeps_non_empty_fields() -> None:
context = build_mcp_audit_context(
session_id="incident:INC-1:pre_decision",
incident_id="INC-1",
flywheel_node="sense",
agent_role="pre_decision_investigator",
operator_user_id=None,
)
assert context == {
"gateway_path": "legacy_registry_provider",
"session_id": "incident:INC-1:pre_decision",
"incident_id": "INC-1",
"flywheel_node": "sense",
"agent_role": "pre_decision_investigator",
}
def test_normalize_mcp_audit_session_id_compacts_known_long_patterns() -> None:
values = [
(
"incident:INC-20260505-E8033A:pre_decision",
"inc:INC-20260505-E8033A:pre",
),
(
"incident:INC-20260505-E8033A:post_execution",
"inc:INC-20260505-E8033A:post",
),
(
"callback:INC-20260505-E8033A:check_process",
"cb:INC-20260505-E8033A",
),
(
"approval:123e4567-e89b-12d3-a456-426614174000",
"apr:123e4567",
),
]
for raw, expected_prefix in values:
normalized = normalize_mcp_audit_session_id(raw)
assert normalized is not None
assert len(normalized) <= MAX_MCP_AUDIT_SESSION_ID_LENGTH
assert normalized.startswith(expected_prefix)
def test_with_mcp_audit_context_merges_existing_context_without_mutating_source() -> None:
params = {
"namespace": "awoooi-prod",
"_mcp_audit": {"trace_id": "trace-1", "flywheel_node": "old"},
}
audited = with_mcp_audit_context(
params,
incident_id="INC-2",
flywheel_node="verify",
agent_role="post_execution_verifier",
)
assert params["_mcp_audit"]["flywheel_node"] == "old"
assert audited is not params
assert audited["_mcp_audit"]["trace_id"] == "trace-1"
assert audited["_mcp_audit"]["incident_id"] == "INC-2"
assert audited["_mcp_audit"]["flywheel_node"] == "verify"
assert audited["_mcp_audit"]["agent_role"] == "post_execution_verifier"