"""Chat endpoint tests.""" from __future__ import annotations import os import pytest from fastapi.testclient import TestClient def _client_with_bypass(): os.environ["DEV_AUTH_BYPASS"] = "true" os.environ["ANTHROPIC_API_KEY"] = "" from app.config import get_settings get_settings.cache_clear() import importlib import app.main as main_mod importlib.reload(main_mod) return TestClient(main_mod.app, base_url="https://testserver") def teardown_module(_mod): os.environ["DEV_AUTH_BYPASS"] = "false" os.environ.pop("ANTHROPIC_API_KEY", None) from app.config import get_settings get_settings.cache_clear() import importlib import app.main as main_mod importlib.reload(main_mod) def test_chat_503_when_no_api_key(): c = _client_with_bypass() r = c.post("/api/chat", json={ "messages": [{"role": "user", "content": "hi"}], }) assert r.status_code == 503 body = r.json() assert "AI chat is not configured" in body["detail"] def test_chat_400_when_empty_messages(): # Even with the key set, we should refuse empty messages. os.environ["DEV_AUTH_BYPASS"] = "true" os.environ["ANTHROPIC_API_KEY"] = "sk-test" from app.config import get_settings get_settings.cache_clear() import importlib import app.main as main_mod importlib.reload(main_mod) c = TestClient(main_mod.app, base_url="https://testserver") r = c.post("/api/chat", json={"messages": []}) # 422 from pydantic validation or 400 from our own check — either is acceptable. assert r.status_code in (400, 422)