vignette/apps/api/app/test_engine_health_contract.py

50 lines
1.6 KiB
Python

"""실시간 내담자 공급자 준비상태의 API health 계약."""
from __future__ import annotations
import unittest
from unittest.mock import AsyncMock, patch
from . import main
class EngineHealthContractTest(unittest.IsolatedAsyncioTestCase):
async def test_health_is_degraded_when_live_client_lane_is_unready(self) -> None:
engine_detail = {
"ok": False,
"detail": "실시간 내담자 공급자 claude_cli: login required",
"default_engine": {
"provider": "agy_cli",
"ok": True,
"detail": "ready",
},
"live_client_engine": {
"provider": "claude_cli",
"ok": False,
"detail": "login required",
},
}
with (
patch.object(main, "healthcheck", AsyncMock(return_value=True)),
patch.object(
main.engine_client,
"health_detail",
AsyncMock(return_value=engine_detail),
),
patch.object(main.engine_client, "engine_mode", "agy_cli"),
patch.object(main.engine_client, "live_client_provider", "claude_cli"),
):
response = await main.health()
self.assertEqual(response["status"], "degraded")
self.assertFalse(response["engine"])
self.assertEqual(response["engine_mode"], "agy_cli")
self.assertEqual(response["live_client_provider"], "claude_cli")
self.assertEqual(
response["live_client_engine"],
engine_detail["live_client_engine"],
)
if __name__ == "__main__":
unittest.main()