from __future__ import annotations import pytest from fastapi.testclient import TestClient from chat.app import app @pytest.fixture def client(tmp_path, monkeypatch): cfg = tmp_path / "config.toml" cfg.write_text('featherless_api_key = "test"\n') monkeypatch.setenv("CHAT_CONFIG_PATH", str(cfg)) db = tmp_path / "test.db" monkeypatch.setenv("CHAT_DB_PATH", str(db)) with TestClient(app) as c: if hasattr(app.state, "background_worker"): app.state.background_worker.enabled = False yield c def _setup_minimal_state(db_path): """Set up enough state so the first-run middleware doesn't redirect.""" from chat.db.connection import open_db from chat.eventlog.log import append_event from chat.eventlog.projector import project with open_db(db_path) as conn: append_event( conn, kind="you_authored", payload={"name": "Me", "pronouns": "", "persona": ""}, ) append_event( conn, kind="bot_authored", payload={ "id": "bot_a", "name": "BotA", "persona": "", "voice_samples": [], "traits": [], "backstory": "", "initial_relationship_to_you": "", "kickoff_prose": "", }, ) project(conn) def test_404_renders_friendly_page_for_html(client, tmp_path): _setup_minimal_state(tmp_path / "test.db") response = client.get("/chats/no_such_chat") assert response.status_code == 404 body = response.text assert "404" in body assert "back to" in body.lower()