refactor
This commit is contained in:
@@ -131,8 +131,8 @@ async def test_guide_error_event(testdb):
|
||||
|
||||
def test_timeout_calibration_smoke():
|
||||
from pipeline import _timeout
|
||||
assert _timeout("subblock", 10) == 400 + 150
|
||||
assert _timeout("content", 10) == 450 + 300
|
||||
assert _timeout("subblock_check", 10) == 150 + 100
|
||||
assert _timeout("writer", 10) == 450 + 600
|
||||
|
||||
|
||||
def test_env_file_wins(tmp_path, monkeypatch):
|
||||
@@ -317,3 +317,71 @@ async def test_events_run_summary_aggregates(testdb):
|
||||
assert s["agents"]["gesamt"] == 2 and s["agents"]["ok"] == 1 and s["agents"]["timeout"] == 1
|
||||
assert s["agents"]["verlorene_min"] == 2
|
||||
assert s["tokens"] == {"input": 15, "output": 2, "cache_read": 80, "cache_write": 1}
|
||||
|
||||
|
||||
async def test_topic_delete_entfernt_guides_und_kanban(testdb, tmp_path, monkeypatch):
|
||||
"""DELETE /topics: guides/guide_cards/kanban_cards mitlöschen — GET /topics leitet
|
||||
Topics aus guides ab, sonst taucht das gelöschte Topic sofort wieder auf."""
|
||||
import routes, qa
|
||||
db = testdb
|
||||
monkeypatch.setattr(routes, "topic_dir", lambda t: tmp_path / "topics" / t)
|
||||
monkeypatch.setattr(qa, "QA_DIR", tmp_path / "qa")
|
||||
await db.create_topic(TOPIC)
|
||||
await db.create_guide({"id": "g1", "topic": TOPIC, "format": "Guide", "instructions": "",
|
||||
"status": "done", "progress": None,
|
||||
"created_at": "2026-01-01", "updated_at": "2026-01-01"})
|
||||
await db.upsert_guide_card(TOPIC, "Guide", "alpha", "Alpha")
|
||||
await db.kanban_upsert_card(TOPIC, "inventory", "b-1", "block", "done_block", {"title": "Alpha"})
|
||||
res = await routes.remove_topic(TOPIC)
|
||||
assert res["ok"]
|
||||
assert all(g["topic"] != TOPIC for g in await db.list_guides())
|
||||
assert await db.list_guide_cards(TOPIC, "Guide") == []
|
||||
assert await db.kanban_cards(TOPIC, "inventory") == []
|
||||
assert TOPIC not in await routes.get_topics()
|
||||
|
||||
|
||||
async def test_topic_delete_409_bei_laufendem_guide(testdb, tmp_path, monkeypatch):
|
||||
"""Läuft eine Generierung, wird nicht gelöscht (409) — ein laufender Flow schrieb
|
||||
sonst nach dem Löschen munter neue Rows/Dateien."""
|
||||
import pytest
|
||||
from fastapi import HTTPException
|
||||
import routes
|
||||
db = testdb
|
||||
monkeypatch.setattr(routes, "topic_dir", lambda t: tmp_path / "topics" / t)
|
||||
await db.create_guide({"id": "g1", "topic": TOPIC, "format": "Guide", "instructions": "",
|
||||
"status": "generating", "progress": None,
|
||||
"created_at": "2026-01-01", "updated_at": "2026-01-01"})
|
||||
with pytest.raises(HTTPException) as e:
|
||||
await routes.remove_topic(TOPIC)
|
||||
assert e.value.status_code == 409
|
||||
assert any(g["topic"] == TOPIC for g in await db.list_guides())
|
||||
|
||||
|
||||
async def test_runs_endpoint_liefert_bilanz(testdb):
|
||||
"""GET /api/runs: pro run_id Zeitspanne + Agent-/Token-Bilanz + Fails, jüngster zuerst,
|
||||
aktiv-Flag aus dem Run-Registry."""
|
||||
import routes
|
||||
db = testdb
|
||||
db.set_current_run(TOPIC, "r1")
|
||||
await db.add_event(TOPIC, "agent", key="a", status="ok", dur_ms=1000,
|
||||
meta={"tokens": {"input": 10, "output": 20, "cache_read": 0, "cache_write": 0}})
|
||||
await db.add_event(TOPIC, "agent", key="b", status="timeout", dur_ms=120000)
|
||||
await db.add_event(TOPIC, "fail", key="inventory:b-1", status="dead", meta={"error": "kaputt"})
|
||||
res = await routes.get_runs(TOPIC)
|
||||
runs = res["runs"]
|
||||
assert len(runs) == 1 and runs[0]["run_id"] == "r1" and runs[0]["aktiv"] is True
|
||||
assert runs[0]["agents"]["gesamt"] == 2 and runs[0]["agents"]["timeout"] == 1
|
||||
assert runs[0]["tokens"]["output"] == 20
|
||||
assert runs[0]["fails"][0]["error"] == "kaputt" and runs[0]["fails"][0]["status"] == "dead"
|
||||
assert runs[0]["start"] <= runs[0]["ende"]
|
||||
db.set_current_run(TOPIC, "r2")
|
||||
await db.add_event(TOPIC, "agent", key="c", status="ok")
|
||||
db.set_current_run(TOPIC, None)
|
||||
runs = (await routes.get_runs(TOPIC))["runs"]
|
||||
assert [r["run_id"] for r in runs] == ["r2", "r1"]
|
||||
assert runs[0]["aktiv"] is False # Registry geräumt → Lauf beendet
|
||||
|
||||
|
||||
async def test_health(testdb):
|
||||
import routes
|
||||
assert (await routes.health())["ok"] is True
|
||||
|
||||
Reference in New Issue
Block a user