110 lines
5.2 KiB
Python
110 lines
5.2 KiB
Python
"""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("<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)
|
|||
|
|
|
|||
|
|
|
|||
|
|
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()
|