This commit is contained in:
team3
2026-07-13 06:07:09 +02:00
parent 8926f87185
commit 32d7ad9ea1
15 changed files with 552 additions and 115 deletions

View File

@@ -17,8 +17,8 @@ async def test_export_import_roundtrip():
await pipeline._laeufe[topic]
tabellen = ("quellen", "soll", "atome", "anker", "kanten", "artefakte",
"lernziele", "bausteine", "kapitel", "sections", "runs",
"befunde", "events", "leitner")
"lernziele", "bausteine", "kapitel", "sections", "auftraege",
"runs", "befunde", "events", "leitner")
vorher = {t: len(db.query(f"SELECT * FROM {t}", ())) for t in tabellen}
md_vorher = guide.guide_markdown(topic)
@@ -51,24 +51,30 @@ async def test_export_import_roundtrip():
assert int(m) in atom_ids, f"toter Marker {m}"
async def test_import_remappt_befunde_atom_ids():
"""Offene Fix-Aufträge nennen Atom-IDs im Klartext — nach Import müssen sie
auf die neu vergebenen IDs zeigen, nicht auf tote."""
topic = topic_anlegen("befunde-remap", art="thema")
async def test_import_remappt_auftrag_atom_ids():
"""Aufträge nennen Atom-IDs im Klartext — nach Import müssen sie auf die neu
vergebenen IDs zeigen. Alt-Exporte mit befunde-Key: KRITISCH-Arten werden
Zeilen, Rest fliegt (wie die Schema-Migration)."""
topic = topic_anlegen("auftrag-remap", art="thema")
pipeline.lauf_starten(topic)
await pipeline._laeufe[topic]
b = db.one("SELECT * FROM bausteine WHERE topic=? LIMIT 1", (topic,))
a = db.one("SELECT id FROM atome WHERE baustein_id=?", (b["id"],))
db.update("sections", "baustein_id", b["id"],
befunde=db.j([f"KRITISCH: Marker für Atom {a['id']} fehlt — exakt einfügen."]))
db.insert("auftraege", baustein_id=b["id"], art="falsch",
detail=f"Atom {a['id']} widerspricht dem Text")
d = json.loads(json.dumps(transfer.export(topic)))
# Alt-Export simulieren: befunde-Freitext an einer Section
d["sections"][0]["befunde"] = db.j([
f"KRITISCH (luecke): Atom {a['id']} fehlt inhaltlich",
"Langtext, Absatz 3 hat 120 Wörter (Regel: 4090): teilen."]) # → verwerfen
transfer.importieren(d)
atom_ids = {r["id"] for r in db.query("SELECT id FROM atome WHERE topic=?", (topic,))}
zeilen = db.query("SELECT au.* FROM auftraege au JOIN bausteine b"
" ON b.id=au.baustein_id WHERE b.topic=?", (topic,))
assert {z["art"] for z in zeilen} == {"falsch", "luecke"} # det-Zeile verworfen
treffer = 0
for s in db.query("SELECT s.befunde FROM sections s JOIN bausteine b ON b.id=s.baustein_id"
" WHERE b.topic=?", (topic,)):
for auftrag in db.uj(s["befunde"]):
for m in re.findall(r"Atom (\d+)", str(auftrag)):
assert int(m) in atom_ids, f"toter Befund-Marker {m}"
treffer += 1
assert treffer >= 1 # der eingefügte Auftrag wurde geprüft
for z in zeilen:
for m in re.findall(r"Atom (\d+)", z["detail"]):
assert int(m) in atom_ids, f"toter Auftrag-Verweis {m}"
treffer += 1
assert treffer == 2