"""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()