from __future__ import annotations from unittest.mock import patch from app.executors.http_executor import HttpHealthCheckExecutor class DummyResponse: def __init__(self, status_code: int, reason_phrase: str, text: str) -> None: self.status_code = status_code self.reason_phrase = reason_phrase self.text = text class DummyClient: def __init__(self, *args, **kwargs) -> None: self.kwargs = kwargs def __enter__(self) -> "DummyClient": return self def __exit__(self, exc_type, exc, tb) -> None: return None def get(self, url: str) -> DummyResponse: if "down" in url: return DummyResponse(500, "Internal Server Error", '{"status":"DOWN"}') return DummyResponse(200, "OK", '{"status":"UP"}') def test_http_health_check_executor_success() -> None: with patch("app.executors.http_executor.httpx.Client", DummyClient): success, message, data, evidence = HttpHealthCheckExecutor().execute( {"url": "http://service.test/health", "timeout_ms": 3000} ) assert success is True assert message == "200 OK" assert data["status_code"] == 200 assert data["latency_ms"] is not None assert evidence["response_body"] == '{"status":"UP"}' def test_http_health_check_executor_failure() -> None: with patch("app.executors.http_executor.httpx.Client", DummyClient): success, message, data, evidence = HttpHealthCheckExecutor().execute( {"url": "http://service.test/down", "timeout_ms": 3000} ) assert success is False assert message == "500 Internal Server Error" assert data["status_code"] == 500 assert evidence["response_body"] == '{"status":"DOWN"}'