from parser import zerlege VOLL = """ Login ---------------------------------------- Nutzer können sich anmelden. ---------------------------------------- Anmeldung mit E-Mail Passwort nie loggen Sperre nach 5 Fehlversuchen Abmeldung ---------------------------------------- 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"] == ( "\nAnmeldung mit E-Mail\n" "\nPasswort nie loggen\n" "\nSperre nach 5 Fehlversuchen\n" "\nAbmeldung" ) 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_ohne_funktion_landet_in_sonstiges(): s = zerlege("\nverwaist\n") assert s["funktionen"] == [] assert s["sonstiges"] == "verwaist" 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": [], "funktionen_roh": "", "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"