Files
awoooi/apps/api/tests/test_auto_repair_api.py
2026-07-18 23:11:04 +08:00

67 lines
1.9 KiB
Python

from types import SimpleNamespace
from unittest.mock import AsyncMock
import pytest
from src.api.v1 import auto_repair as auto_repair_api
@pytest.mark.asyncio
async def test_execute_api_preserves_controlled_queue_truth(
monkeypatch: pytest.MonkeyPatch,
) -> None:
incident = object()
playbook = object()
incident_service = SimpleNamespace(
get_from_working_memory=AsyncMock(return_value=incident)
)
playbook_service = SimpleNamespace(
get_by_id=AsyncMock(return_value=playbook)
)
repair_service = SimpleNamespace(
execute_auto_repair=AsyncMock(
return_value=SimpleNamespace(
success=False,
status="queued",
repair_executed=False,
repair_verified=False,
incident_id="INC-HOST-QUEUED",
playbook_id="PB-HOST-ANSIBLE",
executed_steps=[
"Step 1: systemctl restart node_exporter -> QUEUED"
],
error=None,
execution_time_ms=7,
)
)
)
monkeypatch.setattr(
auto_repair_api,
"get_incident_service",
lambda: incident_service,
)
monkeypatch.setattr(
"src.services.playbook_service.get_playbook_service",
lambda: playbook_service,
)
monkeypatch.setattr(
auto_repair_api,
"get_auto_repair_service",
lambda: repair_service,
)
response = await auto_repair_api.execute_auto_repair(
auto_repair_api.ExecuteRequest(
incident_id="INC-HOST-QUEUED",
playbook_id="PB-HOST-ANSIBLE",
force=True,
),
None, # type: ignore[arg-type]
)
assert response.success is False
assert response.status == "queued"
assert response.repair_executed is False
assert response.repair_verified is False
assert response.error is None