"""Testet die Logik des Assistenten, soweit sie ohne Terminal pruefbar ist.""" import sys, tempfile from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) from kerio_tui import verwaiste_verzeichnisse, _befehl_text ok = True def check(label, cond): global ok print(f" {'ok ' if cond else 'FEHLER'} {label}") if not cond: ok = False store = Path(tempfile.mkdtemp()) / "store" for name in ("anna.schmidt", "bob", "alt.name", "ex.mitarbeiter", "#public", "anna.schmidt.abgeloest-20260807-120000"): (store / "mail" / "firma.de" / name).mkdir(parents=True) # Mails nur im verwaisten Verzeichnis msgs = store / "mail" / "firma.de" / "alt.name" / "INBOX" / "#msgs" msgs.mkdir(parents=True) for i in range(4): (msgs / f"{i}.eml").write_text("x") # ein Archiv-Verzeichnis ohne Gegenstueck in mail/ (store / "archive" / "firma.de" / "nur.archiv").mkdir(parents=True) # eine zweite Domain, die nicht hineinfunken darf (store / "mail" / "andere.de" / "fremd.user").mkdir(parents=True) print("== Verwaiste Verzeichnisse erkennen ==") bekannt = {"anna.schmidt", "bob"} gefunden = verwaiste_verzeichnisse(store, "firma.de", bekannt) check("findet 'alt.name'", "alt.name" in gefunden) check("findet 'ex.mitarbeiter'", "ex.mitarbeiter" in gefunden) check("findet auch reine Archiv-Verzeichnisse", "nur.archiv" in gefunden) check("uebergeht bestehende Benutzer", "anna.schmidt" not in gefunden and "bob" not in gefunden) check("uebergeht Kerio-Ordner (#public)", "#public" not in gefunden) check("uebergeht bereits abgeloeste Sicherungen", not any(".abgeloest-" in g for g in gefunden)) check("greift nicht in andere Domains", "fremd.user" not in gefunden) check("keine Doppelten", len(gefunden) == len(set(gefunden))) print("\n== Gross-/Kleinschreibung ==") gefunden2 = verwaiste_verzeichnisse(store, "FIRMA.DE", {"ANNA.SCHMIDT", "bob"}) check("Domain unabhaengig von Schreibweise", "alt.name" in gefunden2) check("bekannte Logins unabhaengig von Schreibweise", "anna.schmidt" not in gefunden2) print("\n== Domain ohne Store-Verzeichnis ==") check("liefert leere Liste statt Fehler", verwaiste_verzeichnisse(store, "gibtsnicht.de", set()) == []) print("\n== Befehlszeile fuer die Anzeige ==") text = _befehl_text(["--domain", "firma.de", "--old-login", "alt.name", "--new-login", "neu.name", "--full-name", "Neue Person"]) check("beginnt mit dem Scriptnamen", text.startswith("sudo ./kerio_rename_user.py")) check("Namen mit Leerzeichen werden gequotet", '"Neue Person"' in text) check("Namen ohne Leerzeichen bleiben blank", " firma.de " in text) print("\n" + ("ALLE TESTS BESTANDEN" if ok else "FEHLGESCHLAGEN")) sys.exit(0 if ok else 1)