2026-10-06 13:27:15 +02:00
|
|
|
"""Tests für das Anzeigefenster des Eigentümer-Datenabgleichs (#56).
|
|
|
|
|
|
|
|
|
|
Alle Namen und Anschriften sind erfunden.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
import unittest
|
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
|
|
|
|
|
|
from sn_verfahrensgebiet.ui import eigentuemer_anzeige as ea
|
|
|
|
|
from sn_verfahrensgebiet.functions.eigentuemer_suche import Eigentuemer
|
|
|
|
|
|
|
|
|
|
ANNA = Eigentuemer(anrede="Frau", titel="Dr.", vorname="Anna", nachname="Beispiel", strasse="Hauptstraße 1",
|
|
|
|
|
plz="01234", wohnort="Musterstadt", ortsteil="Unterdorf", emails=("anna@example.org",),
|
|
|
|
|
verstorben=True, rechtsperson=("0",), per_ids=("4711",), konten=("98765",))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestAnzeigetext(unittest.TestCase):
|
|
|
|
|
|
|
|
|
|
def test_name_anschrift_email(self):
|
|
|
|
|
"""Prüft, dass die Anzeige Name mit Anrede und Titel, die mehrzeilige Anschrift mit Ortsteil und die E-Mail zeigt."""
|
|
|
|
|
text = ea.anzeige_html([ANNA])
|
|
|
|
|
self.assertIn("Frau Dr. Anna Beispiel", text)
|
|
|
|
|
self.assertIn("Hauptstraße 1<br/>01234 Musterstadt<br/>OT Unterdorf", text)
|
|
|
|
|
self.assertIn("anna@example.org", text)
|
|
|
|
|
|
|
|
|
|
def test_keine_internen_angaben(self):
|
|
|
|
|
"""Prüft, dass der Eigentümer weder Konten, Personen-IDs, Rechtsperson-Wert noch das Kennzeichen „verstorben“ sieht."""
|
|
|
|
|
text = ea.anzeige_html([ANNA])
|
|
|
|
|
for intern in ("98765", "4711", "verstorben", "Rechtsperson"):
|
|
|
|
|
self.assertNotIn(intern, text)
|
|
|
|
|
|
|
|
|
|
def test_fehlende_email_wird_genannt(self):
|
|
|
|
|
"""Prüft, dass eine fehlende E-Mail ausdrücklich als „keine angegeben“ erscheint."""
|
|
|
|
|
self.assertIn(ea.OHNE_EMAIL, ea.anzeige_html([Eigentuemer(nachname="Muster")]))
|
|
|
|
|
|
|
|
|
|
def test_werte_werden_maskiert(self):
|
|
|
|
|
"""Prüft, dass Sonderzeichen aus den Daten maskiert werden und kein HTML einschleusen."""
|
|
|
|
|
text = ea.anzeige_html([Eigentuemer(nachname="<b>Muster</b> & Co")])
|
|
|
|
|
self.assertIn("<b>Muster</b> & Co", text)
|
|
|
|
|
self.assertNotIn("<b>Muster", text)
|
|
|
|
|
|
|
|
|
|
def test_mehrere_eintraege_getrennt(self):
|
|
|
|
|
"""Prüft, dass mehrere Einträge untereinander, durch eine Linie getrennt, erscheinen."""
|
|
|
|
|
text = ea.anzeige_html([ANNA, Eigentuemer(vorname="Bernd", nachname="Muster")])
|
|
|
|
|
self.assertEqual(text.count("<hr/>"), 1)
|
|
|
|
|
self.assertIn("Bernd Muster", text)
|
|
|
|
|
|
|
|
|
|
def test_leer_nur_platzhalter(self):
|
|
|
|
|
"""Prüft, dass die leere Anzeige nur den neutralen Platzhalter zeigt."""
|
|
|
|
|
text = ea.anzeige_html([])
|
|
|
|
|
self.assertIn(ea.PLATZHALTER, text)
|
|
|
|
|
self.assertNotIn("Name", text)
|
|
|
|
|
|
|
|
|
|
|
2026-10-06 13:44:18 +02:00
|
|
|
class TestFensterOeffnen(unittest.TestCase):
|
2026-10-06 13:27:15 +02:00
|
|
|
|
2026-10-06 13:44:18 +02:00
|
|
|
def test_normales_fenster_in_standardgroesse(self):
|
|
|
|
|
"""Prüft, dass das Anzeigefenster ohne gemerkte Lage als normales Fenster mit Rahmen in Standardgröße öffnet, nie im Vollbild."""
|
2026-10-06 13:27:15 +02:00
|
|
|
fenster = MagicMock()
|
2026-10-06 13:44:18 +02:00
|
|
|
ea.zeige_anzeigefenster(fenster)
|
|
|
|
|
fenster.resize.assert_called_once_with(*ea.STANDARDGROESSE)
|
2026-10-06 13:27:15 +02:00
|
|
|
fenster.show.assert_called_once()
|
|
|
|
|
fenster.showFullScreen.assert_not_called()
|
2026-10-06 13:44:18 +02:00
|
|
|
fenster.setWindowFlags.assert_not_called()
|
|
|
|
|
|
|
|
|
|
def test_gemerkte_lage_wird_wiederhergestellt(self):
|
|
|
|
|
"""Prüft, dass eine gemerkte Größe und Lage der letzten Sitzung wiederhergestellt wird."""
|
|
|
|
|
fenster = MagicMock()
|
|
|
|
|
fenster.restoreGeometry.return_value = True
|
|
|
|
|
ea.zeige_anzeigefenster(fenster, b"geometrie")
|
|
|
|
|
fenster.restoreGeometry.assert_called_once_with(b"geometrie")
|
|
|
|
|
fenster.resize.assert_not_called()
|
|
|
|
|
fenster.show.assert_called_once()
|
|
|
|
|
fenster.showFullScreen.assert_not_called()
|
|
|
|
|
|
|
|
|
|
def test_unbrauchbare_lage_ergibt_standardgroesse(self):
|
|
|
|
|
"""Prüft, dass eine nicht wiederherstellbare Lage auf die Standardgröße zurückfällt."""
|
|
|
|
|
for ergebnis in (False, RuntimeError("kaputt")):
|
|
|
|
|
with self.subTest(ergebnis=ergebnis):
|
|
|
|
|
fenster = MagicMock()
|
|
|
|
|
if isinstance(ergebnis, Exception):
|
|
|
|
|
fenster.restoreGeometry.side_effect = ergebnis
|
|
|
|
|
else:
|
|
|
|
|
fenster.restoreGeometry.return_value = ergebnis
|
|
|
|
|
ea.zeige_anzeigefenster(fenster, b"alt")
|
|
|
|
|
fenster.resize.assert_called_once_with(*ea.STANDARDGROESSE)
|
|
|
|
|
fenster.show.assert_called_once()
|
2026-10-06 13:27:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
unittest.main()
|