from fastapi.testclient import TestClient from serving.api import app client = TestClient(app) def test_health_endpoint() -> None: response = client.get("/health") assert response.status_code == 200 payload = response.json() assert payload["status"] == "ok" assert "verifier_backend" in payload assert "fallback_used" in payload assert "retrieval_backend" in payload assert "embedding_model" in payload assert "retrieval_fallback_used" in payload assert "reranker_backend" in payload assert "cross_encoder_model" in payload assert "reranker_fallback_used" in payload assert "checkpoint_path" in payload def test_verify_endpoint_rejects_empty_claim() -> None: response = client.post("/verify", json={"claim": " ", "top_k": 5}) assert response.status_code == 422 def test_verify_endpoint_returns_grounded_response() -> None: response = client.post("/verify", json={"claim": "Paris is in France", "top_k": 2}) assert response.status_code == 200 payload = response.json() assert payload["verdict"] in {"SUPPORTED", "REFUTED", "NOT ENOUGH INFO"} assert "explanation" in payload assert isinstance(payload["evidence"], list) assert "backend_used" in payload assert "retrieval_backend" in payload assert "retrieval_fallback_used" in payload assert "reranker_backend" in payload assert "reranker_fallback_used" in payload def test_metrics_endpoint_reports_snapshot() -> None: client.post("/verify", json={"claim": "Paris is in France", "top_k": 2}) response = client.get("/metrics") assert response.status_code == 200 payload = response.json() assert "requests" in payload assert "cache_entries" in payload assert "average_latency_ms" in payload assert "p95_latency_ms" in payload assert "verifier_backend" in payload assert "retrieval_backend" in payload assert "embedding_model" in payload assert "retrieval_fallback_used" in payload assert "reranker_backend" in payload assert "cross_encoder_model" in payload assert "reranker_fallback_used" in payload assert "checkpoint_path" in payload assert "backend_usage_counts" in payload