test: close coverage gaps and add frontend test infrastructure
Backend (516 tests, 94% coverage): - Add azure_openai endpoint/deployment validation tests (config.py -> 100%) - Add _total_conversations and _avg_turns direct tests (queries.py -> 100%) - Add transformer edge cases: list content, string checkpoint, invalid JSON, malformed message graceful skip (transformer.py -> 93%) - Add safety combined status_code+error_message interaction tests - Fix ambiguous 200/422 assertion to strict 422 - Add E2E pagination shape assertions (total, page, per_page, row count) - Fix ReplayPool mock to respect LIMIT/OFFSET params Frontend (23 tests, vitest + happy-dom + @testing-library/react): - Add vitest infrastructure with happy-dom environment - Add api.ts tests: success, HTTP error, success=false, URL encoding - Add DashboardPage tests: loading, data, error, empty states - Add ReplayListPage tests: loading, empty, data, error, status badge classes - Add ReplayPage tests: loading, steps, empty, error states
This commit is contained in:
@@ -47,7 +47,13 @@ class ReplayPool(FakePool):
|
||||
if "COUNT" in query and "conversations" in query:
|
||||
return FakeCursor([(len(self._convos),)])
|
||||
if "conversations" in query and "SELECT" in query:
|
||||
return FakeCursor(self._convos)
|
||||
# Respect LIMIT/OFFSET from params if provided
|
||||
rows = self._convos
|
||||
if params:
|
||||
offset = params.get("offset", 0)
|
||||
limit = params.get("limit", len(rows))
|
||||
rows = rows[offset : offset + limit]
|
||||
return FakeCursor(rows)
|
||||
if "checkpoints" in query:
|
||||
return FakeCursor(self._checkpoints)
|
||||
# Analytics queries
|
||||
@@ -122,6 +128,11 @@ class TestFlow6ReplayConversation:
|
||||
assert resp.status_code == 200
|
||||
body = resp.json()
|
||||
assert body["success"] is True
|
||||
data = body["data"]
|
||||
assert data["total"] == 5
|
||||
assert data["page"] == 1
|
||||
assert data["per_page"] == 2
|
||||
assert len(data["conversations"]) == 2
|
||||
|
||||
def test_replay_thread_not_found(self) -> None:
|
||||
pool = ReplayPool(checkpoints=[])
|
||||
|
||||
Reference in New Issue
Block a user