Files
awoooi/apps/api/tests/test_agent_claude_remediator_adapter.py
Your Name e0a86b6254
Some checks failed
Code Review / ai-code-review (push) Successful in 13s
CD Pipeline / tests (push) Failing after 1m8s
CD Pipeline / build-and-deploy (push) Has been skipped
CD Pipeline / post-deploy-checks (push) Has been skipped
Ansible / Reboot Recovery Contract / validate (push) Has been cancelled
feat(agents): route high risk through controlled automation
2026-06-26 19:19:40 +08:00

77 lines
2.8 KiB
Python

from __future__ import annotations
import pytest
from src.services.agent_claude_remediator_adapter import (
CLAUDE_REMEDIATOR_CANDIDATE_ID,
build_claude_remediator_candidate_result,
)
def test_claude_remediator_adapter_emits_candidate_result_contract():
result = build_claude_remediator_candidate_result({
"schema_version": "agent_replay_candidate_input_v1",
"run_id": "run",
"incident_id": "INC-1",
"incident_context": {
"severity": "P2",
"alert_category": "backend",
"alertname": "FastAPIImportError",
"affected_services": ["awoooi-api"],
"signals": [
{
"labels": {"service": "awoooi-api"},
"annotations": {"summary": "ImportError traceback in API build"},
}
],
},
"source_metadata": {},
}).to_dict()
assert result["schema_version"] == "agent_candidate_replay_result_v1"
assert result["candidate_id"] == CLAUDE_REMEDIATOR_CANDIDATE_ID
assert result["candidate_role"] == "devops_code_remediation_agent"
assert "CLAUDE_PATCH_PROPOSAL" in result["proposed_action"]
assert result["risk_level"] == "medium"
assert result["requires_human_approval"] is False
assert result["fallback_used"] is False
assert result["trace_complete"] is True
assert result["cost_usd"] == 0
assert result["metadata"]["adapter_mode"] == "deterministic_offline_remediation_boundary"
assert result["metadata"]["anthropic_api_calls"] is False
assert result["metadata"]["files_edited"] is False
def test_claude_remediator_adapter_rejects_label_leak_before_execution():
with pytest.raises(ValueError, match="evaluation label"):
build_claude_remediator_candidate_result({
"run_id": "run",
"incident_id": "INC-1",
"incident_context": {
"execution_success": True,
},
"source_metadata": {},
})
def test_claude_remediator_adapter_routes_config_to_secret_safe_review():
result = build_claude_remediator_candidate_result({
"schema_version": "agent_replay_candidate_input_v1",
"run_id": "run",
"incident_id": "INC-2",
"incident_context": {
"severity": "P3",
"alert_category": "config",
"alertname": "TelegramTokenMisconfigured",
"affected_services": ["awoooi-api"],
"signals": [{"annotations": {"summary": "secret token config changed"}}],
},
"source_metadata": {},
}).to_dict()
assert "CLAUDE_CONFIG_REVIEW" in result["proposed_action"]
assert result["risk_level"] == "high"
assert result["requires_human_approval"] is True
assert result["metadata"]["remediation_route"] == "config_patch_proposal"
assert result["metadata"]["anthropic_api_calls"] is False