69 lines
3.4 KiB
Python
69 lines
3.4 KiB
Python
"""Ziel-Dedup: synonyme Lernziele werden deterministisch gemerged."""
|
|
from backend import db, struktur
|
|
from .conftest import topic_anlegen
|
|
|
|
|
|
def test_ziele_dedup_merged_synonyme():
|
|
topic = topic_anlegen()
|
|
z1 = db.insert("lernziele", topic=topic, titel="Grundlagen einordnen",
|
|
text="Der Lernende kann Pomodoro-Grundlagen einordnen.")
|
|
z2 = db.insert("lernziele", topic=topic, titel="Grundlagen verorten",
|
|
text="Der Lernende kann Pomodoro-Grundlagen verorten.")
|
|
z3 = db.insert("lernziele", topic=topic, titel="Anwendung",
|
|
text="Der Lernende kann die Technik im Alltag anwenden.")
|
|
b2 = db.insert("bausteine", topic=topic, ziel_id=z2, titel="B2")
|
|
a1 = db.insert("atome", topic=topic, titel="A1", status="aktiv", ziel_id=z2,
|
|
baustein_id=b2)
|
|
merges = struktur._ziele_dedup(topic)
|
|
assert merges == 1
|
|
# z2 weg, sein Atom hängt jetzt an z1, Baustein-Zuordnung gelöst
|
|
assert db.one("SELECT id FROM lernziele WHERE id=?", z2) is None
|
|
atom = db.one("SELECT ziel_id, baustein_id FROM atome WHERE id=?", a1)
|
|
assert atom["ziel_id"] == z1 and atom["baustein_id"] is None
|
|
assert db.one("SELECT id FROM lernziele WHERE id=?", z3) is not None
|
|
|
|
|
|
def test_ziele_dedup_verschont_verschiedene():
|
|
topic = topic_anlegen()
|
|
db.insert("lernziele", topic=topic, titel="Pausen gestalten",
|
|
text="Der Lernende kann Pausen erholsam gestalten.")
|
|
db.insert("lernziele", topic=topic, titel="Werkzeuge nutzen",
|
|
text="Der Lernende kann passende Apps und Timer auswählen.")
|
|
assert struktur._ziele_dedup(topic) == 0
|
|
assert db.one("SELECT COUNT(*) c FROM lernziele WHERE topic=?",
|
|
topic)["c"] == 2
|
|
|
|
|
|
def test_ziele_dedup_facetten_paraphrase():
|
|
"""Audit: Ganz-Satz-Jaccard kam nie über 0.36 — der Inhaltswort-Kern
|
|
(Floskeln raus) merged Paraphrasen desselben Soll-Punkts."""
|
|
topic = topic_anlegen()
|
|
s = db.insert("soll", topic=topic, punkt="P", status="bestaetigt")
|
|
db.insert("lernziele", topic=topic, titel="Wirkung verstehen", soll_id=s,
|
|
text="Der Lernende kann die Wirkung der Technik verstehen.")
|
|
db.insert("lernziele", topic=topic, titel="Wirkung einordnen", soll_id=s,
|
|
text="Der Lernende kann Wirkung und Grenzen der Technik einordnen.")
|
|
assert struktur._ziele_dedup(topic) == 1
|
|
|
|
|
|
def test_ziele_dedup_nur_gleicher_soll():
|
|
topic = topic_anlegen()
|
|
s1 = db.insert("soll", topic=topic, punkt="P1", status="bestaetigt")
|
|
s2 = db.insert("soll", topic=topic, punkt="P2", status="bestaetigt")
|
|
db.insert("lernziele", topic=topic, titel="Wirkung verstehen", soll_id=s1,
|
|
text="Der Lernende kann die Wirkung der Technik verstehen.")
|
|
db.insert("lernziele", topic=topic, titel="Wirkung einordnen", soll_id=s2,
|
|
text="Der Lernende kann Wirkung und Grenzen der Technik einordnen.")
|
|
assert struktur._ziele_dedup(topic) == 0 # andere Soll-Punkte → kein Merge
|
|
|
|
|
|
def test_baustein_min_wird_erzwungen():
|
|
"""Audit: 10 Atome → 8 „Teil"-Gruppen mit 1-2 Atomen. MIN-Merge macht
|
|
daraus Gruppen im Band, Quellreihenfolge bleibt."""
|
|
from backend import config
|
|
gruppen = [[{"id": i}] for i in range(8)]
|
|
aus = struktur._min_erzwingen(gruppen)
|
|
assert all(len(g) >= config.BAUSTEIN_MIN_ATOME for g in aus)
|
|
assert all(len(g) <= config.BAUSTEIN_MAX_ATOME for g in aus)
|
|
assert [a["id"] for g in aus for a in g] == list(range(8))
|