This commit is contained in:
team3
2026-07-27 12:47:32 +02:00
parent 1c8a4fd4fd
commit 41185eaccc
16 changed files with 582 additions and 230 deletions

View File

@@ -92,7 +92,9 @@ def test_auftrag_nennt_feld_und_stelle():
assert struktur.auftrag(b) == '- titel „Karten der Features prüfen“: Mehr als 3 Wörter'
async def test_pruefe_verbindet_messung_und_modell(datenordner, monkeypatch):
async def test_messung_ist_auftrag_und_tuersteher(datenordner, monkeypatch):
"""Die Messung geht als Auftrag rein und prüft die Antwort wieder nach.
Ein Vorschlag, der weiter verstößt, wird zurückgewiesen — mit Begründung."""
import agents
import features
import projekte
@@ -104,31 +106,48 @@ async def test_pruefe_verbindet_messung_und_modell(datenordner, monkeypatch):
"<!-- regeln -->\n- Auch Passwort prüfen.\n",
)
gesehen = []
# Jede Stimme liefert erst einen halbherzigen Vorschlag: Punkt weg, Füllwort bleibt
halb = '{"felder": {"regeln": {"neu": "- Auch Passwort prüfen", "grund": "Füllwort"}}}'
ganz = '{"felder": {"regeln": {"neu": "- Passwort prüfen", "grund": "Füllwort"}}}'
async def modell(system, inhalt):
async def modell(system, inhalt, temperatur=0.0):
gesehen.append(inhalt)
# Das Modell meldet ein erfundenes Feld und dieselbe Zeile noch einmal
return ('{"probleme": ['
'{"feld": "struktur", "original": "x", "vorschlag": "y"},'
'{"feld": "regeln", "original": "Auch Passwort prüfen.",'
' "problem": "Füllwort", "vorschlag": "Passwort prüfen"},'
'{"feld": "regeln", "original": "Auch Passwort prüfen.",'
' "problem": "zwei Aussagen", "vorschlag": "Passwort prüfen"}]}')
return ganz if "Dein Vorschlag verstößt" in inhalt else halb
monkeypatch.setattr(agents, "frage", modell)
aufgabe = pruefung.aufgaben(f)[1]
probleme = await pruefung._pruefe({"funktion": "<KATALOG>"}, aufgabe)
# Ein Befund für die Zeile, beide Verstöße auf einmal behoben — ohne Modell
assert [p["problem"] for p in probleme] == [
"Satzzeichen am Zeilenende, Füllwort „auch“",
]
# Eine Anfrage je Stimme, dazu je eine Nachbesserung
assert len(gesehen) == 2 * len(pruefung.TEMPERATUREN)
assert "Gemessen" in gesehen[0]
assert "Füllwort „auch“" in gesehen[0]
assert sum("Dein Vorschlag verstößt" in g for g in gesehen) == len(pruefung.TEMPERATUREN)
assert [p["original"] for p in probleme] == ["Auch Passwort prüfen."]
assert probleme[0]["vorschlag"] == "Passwort prüfen"
# Erfundenes Feld fällt raus, Doppelmeldung der gemessenen Zeile ebenso
assert probleme[0]["feld"] == "regeln"
assert probleme[0]["funktion"] == "Anmelden"
# Nichts zu kürzen -> kein Auftrag im Ausschnitt
assert "Gemessen" not in gesehen[0]
async def test_unverbesserlicher_vorschlag_faellt_weg(datenordner, monkeypatch):
import agents
import features
import projekte
projekte.anlegen("Test")
f = features.anlegen(
"Test",
"<!-- titel -->\nLogin\n<!-- funktion -->\nAnmelden\n"
"<!-- regeln -->\n- Auch Passwort prüfen.\n",
)
async def sturr(system, inhalt, temperatur=0.0):
return '{"felder": {"regeln": {"neu": "- Auch anders.", "grund": "x"}}}'
monkeypatch.setattr(agents, "frage", sturr)
probleme = await pruefung._pruefe({"funktion": "<KATALOG>"}, pruefung.aufgaben(f)[1])
assert probleme == [] # lieber nichts als ein Vorschlag, der wieder auffällt
def test_gemessene_befunde_haengen_am_ausschnitt(datenordner):