MemoriaLM / tests /test_api_chat.py
Max Saavedra
RAG techniques and benchmark
10aaf26
from fastapi.testclient import TestClient
from backend.api import chat as chat_api
from backend.api import notebooks as notebooks_api
from backend.app import app
from backend.models.schemas import NotebookCreate
from backend.services.storage import NotebookStore
client = TestClient(app)
AUTH_U1 = {"X-User-Id": "u1"}
def test_chat_endpoint_success_with_mock(monkeypatch, tmp_path):
store = NotebookStore(base_dir=str(tmp_path))
notebooks_api.store = store
chat_api.store = store
created = store.create(NotebookCreate(user_id="u1", name="N1"))
monkeypatch.setattr(
chat_api,
"answer_notebook_question",
lambda *args, **kwargs: {
"answer": "Mock answer",
"citations": [
{
"source_name": "a.txt",
"source_type": "txt",
"location": "full text",
"chunk_id": "chunk-1",
}
],
"used_chunks": 1,
},
)
resp = client.post(
f"/api/notebooks/{created.notebook_id}/chat",
json={"user_id": "u1", "message": "Hi", "top_k": 3, "retrieval_mode": "rerank"},
headers=AUTH_U1,
)
assert resp.status_code == 200
data = resp.json()
assert data["answer"] == "Mock answer"
assert data["used_chunks"] == 1
assert data["citations"][0]["source_name"] == "a.txt"
def test_chat_history_endpoint_reads_jsonl(tmp_path):
store = NotebookStore(base_dir=str(tmp_path))
notebooks_api.store = store
chat_api.store = store
created = store.create(NotebookCreate(user_id="u1", name="N1"))
store.append_chat_message("u1", created.notebook_id, {"role": "user", "content": "Q", "created_at": "2026-01-01T00:00:00+00:00"})
store.append_chat_message(
"u1",
created.notebook_id,
{
"role": "assistant",
"content": "A",
"created_at": "2026-01-01T00:00:01+00:00",
"citations": [],
},
)
resp = client.get(
f"/api/notebooks/{created.notebook_id}/chat",
params={"user_id": "u1"},
headers=AUTH_U1,
)
assert resp.status_code == 200
payload = resp.json()
assert len(payload["messages"]) == 2
assert payload["messages"][1]["role"] == "assistant"