"""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
01234 Musterstadt
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="Muster & Co")])
self.assertIn("<b>Muster</b> & Co", text)
self.assertNotIn("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("
"), 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)
class TestFensterOeffnen(unittest.TestCase):
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."""
fenster = MagicMock()
ea.zeige_anzeigefenster(fenster)
fenster.resize.assert_called_once_with(*ea.STANDARDGROESSE)
fenster.show.assert_called_once()
fenster.showFullScreen.assert_not_called()
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()
if __name__ == "__main__":
unittest.main()