from parser import zerlege VOLL = """ Login ---------------------------------------- kern ---------------------------------------- Nutzer können sich anmelden. ---------------------------------------- Anmeldung mit E-Mail Passwort nie loggen Sperre nach 5 Fehlversuchen - Formular öffnen - Daten eingeben Abmeldung """ def test_alle_sektionen(): s = zerlege(VOLL) assert s["titel"] == "Login" assert s["art"] == "kern" assert s["ziel"] == "Nutzer können sich anmelden." assert s["funktionen"] == [ { "text": "Anmeldung mit E-Mail", "regeln": ["Passwort nie loggen", "Sperre nach 5 Fehlversuchen"], "flow": "- Formular öffnen\n- Daten eingeben", }, {"text": "Abmeldung", "regeln": [], "flow": ""}, ] def test_mehrere_flow_bloecke_werden_verbunden(): s = zerlege("\nX\n\n- a\n\n- b\n") assert s["funktionen"][0]["flow"] == "- a\n- b" def test_trenner_zeilen_werden_ignoriert(): s = zerlege("\nText\n-----\n") assert s["ziel"] == "Text" def test_praeambel_landet_in_sonstiges(): s = zerlege("Vorspann ohne Marker\n\nX\n") assert s["titel"] == "X" assert s["sonstiges"] == "Vorspann ohne Marker" def test_unbekannter_marker_landet_in_sonstiges(): s = zerlege("\nX\n\nGeheim\n") assert s["sonstiges"] == "Geheim" def test_regel_und_flow_ohne_funktion_landen_in_sonstiges(): s = zerlege("\nverwaist\n\n- auch\n") assert s["funktionen"] == [] assert s["sonstiges"] == "verwaist\n\n- auch" def test_doppelter_marker_wird_konkateniert(): s = zerlege("\na\n\nX\n\nb\n") assert s["ziel"] == "a\n\nb" def test_leerer_text(): s = zerlege("") assert s == {"titel": "", "art": "kern", "ziel": "", "funktionen": [], "sonstiges": ""} def test_art_optional(): assert zerlege("\nOptional\n")["art"] == "optional" def test_art_default_und_unbekannter_wert(): assert zerlege("\nX\n")["art"] == "kern" assert zerlege("\nquatsch\n")["art"] == "kern" def test_marker_mit_leerraum(): s = zerlege("\nX\n") assert s["titel"] == "X" def test_titel_erste_nicht_leere_zeile(): s = zerlege("\n\nErste\nZweite\n") assert s["titel"] == "Erste"