"""Fake-E2E: kompletter Generierungspfad in Sekunden. Thema (Web-Recherche) und Uni (Dateien), plus Resume-Idempotenz.""" import asyncio import itertools import db import guide import korpus import pipeline from conftest import topic_anlegen from fake_agents import FAKE_TEXT async def _lauf_komplett(topic): run_id = pipeline.lauf_starten(topic) await pipeline._laeufe[topic] return run_id def _pruefe_endzustand(topic, run_id): assert db.one("SELECT status FROM topics WHERE name=?", (topic,))["status"] == "fertig" run = db.one("SELECT * FROM runs WHERE id=?", (run_id,)) assert run["status"] == "done" offen = db.query("SELECT * FROM befunde WHERE run_id=? AND status='offen'", (run_id,)) assert offen == [], f"offene Befunde: {offen}" atome = db.query("SELECT * FROM atome WHERE topic=? AND status NOT IN" " ('gemerged','verworfen')", (topic,)) assert len(atome) == 3 # die Fake-Welt hat exakt drei Atome assert all(a["soll_id"] and a["ziel_id"] and a["baustein_id"] for a in atome) for a in atome: assert db.one("SELECT id FROM anker WHERE atom_id=?", (a["id"],)) karten = db.query("SELECT * FROM artefakte WHERE atom_id=? AND typ='flashcard'" " AND status='verifiziert'", (a["id"],)) assert karten md = guide.guide_markdown(topic) for a in atome: assert f"