Files
Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_anzeige.py
T

110 lines
5.2 KiB
Python
Raw Normal View History

"""Tests für das Anzeigefenster des Eigentümer-Datenabgleichs (#56).
Alle Namen und Anschriften sind erfunden.
"""
import types
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",))
def _rechteck(x, y, b, h):
return types.SimpleNamespace(x=lambda: x, y=lambda: y, width=lambda: b, height=lambda: h)
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("&lt;b&gt;Muster&lt;/b&gt; &amp; 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)
class TestBildschirme(unittest.TestCase):
def test_vorgabe_ist_nicht_der_qgis_bildschirm(self):
"""Prüft, dass als Vorgabe der erste Bildschirm ohne QGIS gewählt wird, bei nur einem Bildschirm dieser."""
a, b, c = object(), object(), object()
self.assertEqual(ea.standard_index([a, b, c], a), 1)
self.assertEqual(ea.standard_index([a, b], b), 0)
self.assertEqual(ea.standard_index([a], a), 0)
self.assertEqual(ea.standard_index([], None), 0)
def test_bildschirm_text(self):
"""Prüft, dass ein Bildschirm mit Nummer und Auflösung beschriftet wird."""
bildschirm = types.SimpleNamespace(geometry=lambda: _rechteck(0, 0, 1920, 1080))
self.assertEqual(ea.bildschirm_text(bildschirm, 2), "Bildschirm 2 (1920 × 1080)")
self.assertEqual(ea.bildschirm_text(object(), 3), "Bildschirm 3")
def test_ohne_qt_anwendung_keine_bildschirme(self):
"""Prüft, dass ohne Qt-Anwendung (Mock-Modus) eine leere Bildschirmliste kommt statt eines Fehlers."""
self.assertEqual(ea.bildschirme(), [])
def test_vollbild_auf_gewaehltem_bildschirm(self):
"""Prüft, dass das Fenster im Vollbild dem gewählten Bildschirm zugeordnet und auf dessen Fläche gelegt wird."""
geo = _rechteck(1920, 0, 1920, 1080)
bildschirm = types.SimpleNamespace(geometry=lambda: geo)
fenster = MagicMock()
ea.zeige_auf_bildschirm(fenster, bildschirm, vollbild=True)
fenster.windowHandle.return_value.setScreen.assert_called_once_with(bildschirm)
fenster.setGeometry.assert_called_once_with(geo)
fenster.showFullScreen.assert_called_once()
fenster.showNormal.assert_not_called()
def test_normales_fenster_mittig(self):
"""Prüft, dass auf dem QGIS-Bildschirm ein normales Fenster mittig im freien Bereich öffnet."""
bildschirm = types.SimpleNamespace(availableGeometry=lambda: _rechteck(0, 40, 1600, 1000))
fenster = MagicMock()
ea.zeige_auf_bildschirm(fenster, bildschirm, vollbild=False)
fenster.setGeometry.assert_called_once_with(350, 215, 900, 650)
fenster.showNormal.assert_called_once()
fenster.showFullScreen.assert_not_called()
def test_ohne_bildschirm_einfach_zeigen(self):
"""Prüft, dass ohne bekannten Bildschirm das Fenster einfach gezeigt wird."""
fenster = MagicMock()
ea.zeige_auf_bildschirm(fenster, None, vollbild=True)
fenster.show.assert_called_once()
fenster.showFullScreen.assert_not_called()
if __name__ == "__main__":
unittest.main()