update
This commit is contained in:
@@ -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: 40–90): 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
|
||||
|
||||
Reference in New Issue
Block a user