"""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("") 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"