Files
planer2/backend/tests/test_parser.py
2026-07-24 22:39:23 +02:00

93 lines
2.5 KiB
Python

from parser import zerlege
VOLL = """<!-- titel -->
Login
----------------------------------------
<!-- ziel -->
Nutzer können sich anmelden.
----------------------------------------
<!-- funktion -->
Anmeldung mit E-Mail
<!-- regel -->
Passwort nie loggen
<!-- regel -->
Sperre nach 5 Fehlversuchen
<!-- funktion -->
Abmeldung
----------------------------------------
<!-- sonstiges -->
Offen: 2FA.
"""
def test_alle_sektionen():
s = zerlege(VOLL)
assert s["titel"] == "Login"
assert s["ziel"] == "Nutzer können sich anmelden."
assert s["funktionen"] == [
{"text": "Anmeldung mit E-Mail", "regeln": ["Passwort nie loggen", "Sperre nach 5 Fehlversuchen"]},
{"text": "Abmeldung", "regeln": []},
]
assert s["sonstiges"] == "Offen: 2FA."
def test_funktionen_roh_rekonstruiert_marker():
s = zerlege(VOLL)
assert s["funktionen_roh"] == (
"<!-- funktion -->\nAnmeldung mit E-Mail\n"
"<!-- regel -->\nPasswort nie loggen\n"
"<!-- regel -->\nSperre nach 5 Fehlversuchen\n"
"<!-- funktion -->\nAbmeldung"
)
def test_trenner_zeilen_werden_ignoriert():
s = zerlege("<!-- ziel -->\nText\n-----\n")
assert s["ziel"] == "Text"
def test_praeambel_landet_in_sonstiges():
s = zerlege("Vorspann ohne Marker\n<!-- titel -->\nX\n")
assert s["titel"] == "X"
assert s["sonstiges"] == "Vorspann ohne Marker"
def test_unbekannter_marker_landet_in_sonstiges():
s = zerlege("<!-- titel -->\nX\n<!-- notizen -->\nGeheim\n")
assert s["sonstiges"] == "Geheim"
def test_regel_ohne_funktion_landet_in_sonstiges():
s = zerlege("<!-- regel -->\nverwaist\n")
assert s["funktionen"] == []
assert s["sonstiges"] == "verwaist"
def test_doppelter_marker_wird_konkateniert():
s = zerlege("<!-- ziel -->\na\n<!-- titel -->\nX\n<!-- ziel -->\nb\n")
assert s["ziel"] == "a\n\nb"
def test_leerer_text():
s = zerlege("")
assert s == {"titel": "", "art": "kern", "ziel": "", "funktionen": [], "funktionen_roh": "", "sonstiges": ""}
def test_art_optional():
assert zerlege("<!-- art -->\nOptional\n")["art"] == "optional"
def test_art_default_und_unbekannter_wert():
assert zerlege("<!-- titel -->\nX\n")["art"] == "kern"
assert zerlege("<!-- art -->\nquatsch\n")["art"] == "kern"
def test_marker_mit_leerraum():
s = zerlege("<!-- titel -->\nX\n")
assert s["titel"] == "X"
def test_titel_erste_nicht_leere_zeile():
s = zerlege("<!-- titel -->\n\nErste\nZweite\n")
assert s["titel"] == "Erste"