84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
from fastapi.testclient import TestClient
|
|
|
|
from chat.app import app
|
|
from chat.db.connection import open_db
|
|
from chat.eventlog.log import append_event
|
|
from chat.eventlog.projector import project
|
|
|
|
|
|
@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:
|
|
yield c
|
|
|
|
|
|
def _seed_chat(db_path: Path, bot_id: str = "bot_a", chat_id: str = "chat_bot_a") -> None:
|
|
"""Author a bot, create a chat with default state."""
|
|
with open_db(db_path) as conn:
|
|
append_event(
|
|
conn,
|
|
kind="bot_authored",
|
|
payload={
|
|
"id": bot_id,
|
|
"name": "BotA",
|
|
"persona": "...",
|
|
"voice_samples": [],
|
|
"traits": [],
|
|
"backstory": "",
|
|
"initial_relationship_to_you": "",
|
|
"kickoff_prose": "...",
|
|
},
|
|
)
|
|
append_event(
|
|
conn,
|
|
kind="chat_created",
|
|
payload={
|
|
"id": chat_id,
|
|
"host_bot_id": bot_id,
|
|
"initial_time": "2026-04-26T20:00:00+00:00",
|
|
"narrative_anchor": "Day 1",
|
|
"weather": "",
|
|
},
|
|
)
|
|
project(conn)
|
|
|
|
|
|
def test_get_chat_404_when_missing(client):
|
|
response = client.get("/chats/no_such_chat")
|
|
assert response.status_code == 404
|
|
|
|
|
|
def test_get_chat_renders_shell_with_host_bot_name(client, tmp_path):
|
|
_seed_chat(tmp_path / "test.db")
|
|
response = client.get("/chats/chat_bot_a")
|
|
assert response.status_code == 200
|
|
body = response.text
|
|
assert "BotA" in body
|
|
assert "<form" in body # turn input form
|
|
assert "drawer" in body.lower() # drawer present
|
|
assert "no turns yet" in body.lower() # empty timeline placeholder
|
|
|
|
|
|
def test_get_chat_includes_turn_post_action(client, tmp_path):
|
|
_seed_chat(tmp_path / "test.db")
|
|
response = client.get("/chats/chat_bot_a")
|
|
assert response.status_code == 200
|
|
assert 'action="/chats/chat_bot_a/turns"' in response.text
|
|
|
|
|
|
def test_get_chat_shows_chat_clock_time(client, tmp_path):
|
|
_seed_chat(tmp_path / "test.db")
|
|
response = client.get("/chats/chat_bot_a")
|
|
assert response.status_code == 200
|
|
assert "2026-04-26" in response.text
|