45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
"""Skill-Komposition: 1+1+n erzwungen, Platzhalter validiert, Hash stabil."""
|
|
import pytest
|
|
|
|
from backend import skills
|
|
|
|
|
|
def test_komposition_reihenfolge():
|
|
prompt, h, paare = skills.komponieren(
|
|
["extraktor", "deutsch-praezise", "atom-extraktion"],
|
|
{"thema": "X", "abschnitte": "Y"})
|
|
assert prompt.startswith("<!-- aufgabe:atom-extraktion -->")
|
|
assert prompt.index("## Rolle") < prompt.index("## Arbeitsweise") \
|
|
< prompt.index("## Aufgabe")
|
|
assert "{{" not in prompt
|
|
assert len(h) == 12 and len(paare) == 3
|
|
|
|
|
|
def test_zwei_rollen_verboten():
|
|
with pytest.raises(skills.SkillFehler, match="genau 1 Rolle"):
|
|
skills.komponieren(["extraktor", "richter", "atom-extraktion"],
|
|
{"thema": "X", "abschnitte": "Y"})
|
|
|
|
|
|
def test_fehlender_platzhalter():
|
|
with pytest.raises(skills.SkillFehler, match="Platzhalter fehlen"):
|
|
skills.komponieren(["extraktor", "atom-extraktion"], {"thema": "X"})
|
|
|
|
|
|
def test_hash_stabil_und_aendert_sich():
|
|
_, h1, _ = skills.komponieren(["extraktor", "atom-extraktion"],
|
|
{"thema": "A", "abschnitte": "B"})
|
|
_, h2, _ = skills.komponieren(["extraktor", "atom-extraktion"],
|
|
{"thema": "ANDERS", "abschnitte": "B"})
|
|
assert h1 == h2 # Hash hängt an den Skill-DATEIEN, nicht am Input
|
|
_, h3, _ = skills.komponieren(["extraktor", "deutsch-praezise",
|
|
"atom-extraktion"],
|
|
{"thema": "A", "abschnitte": "B"})
|
|
assert h3 != h1 # andere Skill-Menge → anderer Hash
|
|
|
|
|
|
def test_aufgaben_name():
|
|
prompt, _, _ = skills.komponieren(["richter", "klaerung"],
|
|
{"befund": "x", "belege": "y"})
|
|
assert skills.aufgaben_name(prompt) == "klaerung"
|