49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
"""Guide-Ebene der Auto-Sequenz: generieren → QA → Repair-Loop bis 100 %/Stillstand."""
|
|
import blocks
|
|
import guide
|
|
import guide_qa
|
|
import guide_board
|
|
|
|
|
|
def _patch(monkeypatch, noten, calls):
|
|
async def fake_gen(*a, **k):
|
|
calls["gen"] += 1
|
|
|
|
async def fake_rep(topic, fmt):
|
|
calls["rep"] += 1
|
|
return []
|
|
|
|
async def fake_qa(topic, llm=False):
|
|
return {"note_guide": noten.pop(0) if len(noten) > 1 else noten[0]}
|
|
|
|
monkeypatch.setattr(guide, "generate_guide", fake_gen)
|
|
monkeypatch.setattr(guide_board, "repair_karten", fake_rep)
|
|
monkeypatch.setattr(guide_qa, "guide_qa_report", fake_qa)
|
|
|
|
|
|
async def test_guide_fertig_ohne_repair(testdb, monkeypatch):
|
|
blocks._blocks_errors.pop("G1", None)
|
|
calls = {"gen": 0, "rep": 0}
|
|
_patch(monkeypatch, [10.0], calls)
|
|
await blocks._guide_ebene("G1", "", "claude", lambda: False, lambda *a, **k: None)
|
|
assert calls["gen"] == 1 and calls["rep"] == 0 # nur initial gebaut
|
|
assert "G1" not in blocks._blocks_errors
|
|
|
|
|
|
async def test_guide_repariert_bis_100(testdb, monkeypatch):
|
|
blocks._blocks_errors.pop("G2", None)
|
|
calls = {"gen": 0, "rep": 0}
|
|
_patch(monkeypatch, [7.0, 10.0], calls) # erst 7.0, nach einem Repair 10.0
|
|
await blocks._guide_ebene("G2", "", "claude", lambda: False, lambda *a, **k: None)
|
|
assert calls["rep"] == 1
|
|
assert "G2" not in blocks._blocks_errors
|
|
|
|
|
|
async def test_guide_stillstand_meldet_systemfehler(testdb, monkeypatch):
|
|
blocks._blocks_errors.pop("G3", None)
|
|
calls = {"gen": 0, "rep": 0}
|
|
_patch(monkeypatch, [6.0], calls) # Repair bewegt die Note nie
|
|
await blocks._guide_ebene("G3", "", "claude", lambda: False, lambda *a, **k: None)
|
|
assert "G3" in blocks._blocks_errors
|
|
assert "Guide" in blocks._blocks_errors["G3"]
|