update
This commit is contained in:
@@ -122,6 +122,69 @@ TOML ausführlich.""")[0]
|
||||
assert "TOML ausführlich." in sec["md"] and "YAML kompakt." in sec["compact"]
|
||||
|
||||
|
||||
async def test_card_examples_filters_and_formats(testdb):
|
||||
"""_card_examples: Norm-Matching auf die übergebenen Subs; unmatchte Beispiele nur
|
||||
beim Voll-Writer/Teil 1 (include_unmatched) — nie stillschweigend weg."""
|
||||
import json as _json
|
||||
import guide_board as gb
|
||||
from types import SimpleNamespace
|
||||
db = testdb
|
||||
await db.put_sub_artifact("t", "gross", "sub eins", "example",
|
||||
_json.dumps({"problem": "P1", "steps": ["a", "b"], "result": "R1"}),
|
||||
"Gross", "Sub Eins")
|
||||
await db.put_sub_artifact("t", "gross", "verwaist", "example",
|
||||
_json.dumps({"problem": "P2", "steps": ["x"], "result": "R2"}),
|
||||
"Gross", "Verwaister Sub")
|
||||
env = SimpleNamespace(topic="t")
|
||||
subs = [{"title": "Sub Eins", "level": "beginner"}]
|
||||
full = await gb._card_examples(env, "gross", subs)
|
||||
assert "Sub Eins" in full and "P1" in full and "1) a 2) b" in full and "R1" in full
|
||||
assert "Subbaustein unklar" in full and "P2" in full # orphan attached with hint
|
||||
half = await gb._card_examples(env, "gross", subs, include_unmatched=False)
|
||||
assert "P1" in half and "P2" not in half # split half: only its own subs
|
||||
assert await gb._card_examples(env, "leer", subs) == ""
|
||||
|
||||
|
||||
def test_writer_template_has_examples_placeholder():
|
||||
"""Smoke: alle Platzhalter versorgt — ein fehlender Kwarg stürbe als KeyError."""
|
||||
from pipeline import _prompt
|
||||
text = _prompt("Guide-Writer-Board", topic="t", format_name="Guide", chapter="K1",
|
||||
assignment="- B", ziele="- z", facts="F", examples="", gaps="",
|
||||
spec="", out_path="/tmp/x.md", extra="")
|
||||
assert "VERIFIED FACTS" in text
|
||||
|
||||
|
||||
async def test_fakten_gate_counts_examples_as_facts(testdb, monkeypatch, tmp_path):
|
||||
"""Gate-Prompt enthält die Beispiele als verifizierte Fakten — sonst fliegen
|
||||
gerechnete Beispielwerte als „nicht belegt" raus."""
|
||||
import json as _json
|
||||
import guide_board as gb
|
||||
from types import SimpleNamespace
|
||||
db = testdb
|
||||
await db.upsert_guide_card("t", "Guide", "gross", "Gross")
|
||||
await db.put_sub_artifact("t", "gross", "sub eins", "example",
|
||||
_json.dumps({"problem": "P1", "steps": ["a"], "result": "R1"}),
|
||||
"Gross", "Sub Eins")
|
||||
captured = {}
|
||||
|
||||
async def fake_slot(ctx, label, *, key, prompt, role, capabilities, payload, timeout, on_line=None):
|
||||
captured["prompt"] = prompt
|
||||
return "ok", []
|
||||
|
||||
monkeypatch.setattr(gb, "run_single_slot", fake_slot)
|
||||
monkeypatch.setattr(gb, "_card_facts", lambda e, b: "FAKT X")
|
||||
env = SimpleNamespace(ctx=SimpleNamespace(topic="t", provider="p", is_cancelled=lambda: False),
|
||||
guide_id="g", topic="t", format="Guide", instructions="",
|
||||
subs_by_title={"Gross": [{"title": "Sub Eins", "level": "beginner"}]},
|
||||
spec="", slot=lambda name: tmp_path / name)
|
||||
card = {"block_norm": "gross", "block": "Gross", "stage": "fakten_gate", "status": "open",
|
||||
"writer_rounds": 0, "gate_info": "",
|
||||
"md": "<!-- section: Gross -->\n<!-- ausführlich -->\nText."}
|
||||
ok = await gb._stage_fakten_gate(env, card)
|
||||
assert ok is True
|
||||
assert "VERIFIED WORKED EXAMPLES" in captured["prompt"] and "P1" in captured["prompt"]
|
||||
|
||||
|
||||
async def test_writer_splits_oversized_first_draft(testdb, monkeypatch, tmp_path):
|
||||
import guide_board as gb
|
||||
from types import SimpleNamespace
|
||||
|
||||
Reference in New Issue
Block a user