import sys from pathlib import Path import pytest from fastapi.testclient import TestClient ROOT = Path(__file__).resolve().parents[1] if str(ROOT) not in sys.path: sys.path.append(str(ROOT)) from api_dashboard_backend import app client = TestClient(app) def test_health_endpoint() -> None: response = client.get("/api/health") assert response.status_code == 200 payload = response.json() assert payload["status"] in {"ok", "degraded"} assert "services" in payload def _assert_optional_success(response): if response.status_code == 200: return response.json() assert response.status_code in {502, 503} return None def test_coins_top_endpoint() -> None: response = client.get("/api/coins/top?limit=3") payload = _assert_optional_success(response) if payload: assert payload["count"] <= 3 def test_query_router() -> None: response = client.post("/api/query", json={"query": "Bitcoin price"}) assert response.status_code == 200 payload = response.json() assert payload["type"] == "price" def test_websocket_connection() -> None: with client.websocket_connect("/ws") as websocket: message = websocket.receive_json() assert message["type"] in {"connected", "update"}