Files
Plugin_SN_Basis/tests/test_settings_tab.py
T

139 lines
4.8 KiB
Python
Raw Normal View History

"""Tests für sn_basis/ui/tabs/settings_tab.py::save_data/load_data/_build_input (Issue #65/#67)."""
import unittest
from sn_basis.functions.landkreise import LANDKREISE
from sn_basis.functions.qt_wrapper import QComboBox, QLineEdit
from sn_basis.ui.tabs.settings_tab import SettingsTab
class _FakeLogic:
def __init__(self, daten=None) -> None:
self.gespeichert = None
self._daten = daten or {}
def save(self, fields) -> None:
self.gespeichert = fields
def load(self) -> dict:
return self._daten
def _neuer_tab(logic, user_inputs=None, project_inputs=None) -> SettingsTab:
"""Erzeugt einen SettingsTab ohne den echten __init__ (der Qt-Widgets aufbaut)."""
tab = SettingsTab.__new__(SettingsTab)
tab.logic = logic
tab.user_inputs = user_inputs or {}
tab.project_inputs = project_inputs or {}
return tab
def _combo_mit_landkreisen() -> QComboBox:
combo = QComboBox()
combo.addItem("", None)
combo.addItem("Landkreis A", "01")
combo.addItem("Landkreis B", "02")
return combo
class SaveDataTests(unittest.TestCase):
def test_sammelt_text_und_combobox_werte_inklusive_landkreiskennzahl(self):
"""Prüft, dass save_data Text- und Dropdown-Werte sammelt und die Landkreiskennzahl separat ergänzt."""
amt_feld = QLineEdit()
amt_feld.setText("Meißen")
landkreis_combo = _combo_mit_landkreisen()
landkreis_combo.setCurrentIndex(1) # "Landkreis A" / "01"
name_feld = QLineEdit()
name_feld.setText("Verfahren X")
logic = _FakeLogic()
tab = _neuer_tab(
logic,
user_inputs={"amt": amt_feld, "landkreis_user": landkreis_combo},
project_inputs={"name": name_feld},
)
tab.save_data()
self.assertEqual(
logic.gespeichert,
{"amt": "Meißen", "landkreis_user": "Landkreis A", "name": "Verfahren X", "landkreis_kennzahl": "01"},
)
def test_ohne_landkreis_dropdown_wird_keine_kennzahl_ergaenzt(self):
"""Prüft, dass ohne Landkreis-Dropdown im Formular keine 'landkreis_kennzahl' ergänzt wird."""
logic = _FakeLogic()
tab = _neuer_tab(logic, user_inputs={"amt": QLineEdit()}, project_inputs={})
tab.save_data()
self.assertNotIn("landkreis_kennzahl", logic.gespeichert)
class LoadDataTests(unittest.TestCase):
def test_befuellt_textfelder_aus_gespeicherten_daten(self):
"""Prüft, dass load_data ein Textfeld mit dem gespeicherten Wert befüllt."""
amt_feld = QLineEdit()
tab = _neuer_tab(_FakeLogic({"amt": "Dresden"}), user_inputs={"amt": amt_feld}, project_inputs={})
tab.load_data()
self.assertEqual(amt_feld.text(), "Dresden")
def test_ohne_gespeicherten_wert_bleibt_textfeld_leer(self):
"""Prüft, dass load_data ohne gespeicherten Wert das Textfeld auf einen leeren Text setzt."""
amt_feld = QLineEdit()
tab = _neuer_tab(_FakeLogic({}), user_inputs={"amt": amt_feld}, project_inputs={})
tab.load_data()
self.assertEqual(amt_feld.text(), "")
def test_waehlt_combobox_eintrag_bei_bekanntem_namen(self):
"""Prüft, dass load_data im Landkreis-Dropdown den gespeicherten Landkreisnamen auswählt."""
combo = _combo_mit_landkreisen()
tab = _neuer_tab(
_FakeLogic({"landkreis_user": "Landkreis B"}), user_inputs={"landkreis_user": combo}, project_inputs={}
)
tab.load_data()
self.assertEqual(combo.currentText(), "Landkreis B")
def test_unbekannter_gespeicherter_name_waehlt_ersten_eintrag(self):
"""Prüft, dass load_data bei einem nicht mehr vorhandenen Landkreisnamen auf den ersten Eintrag zurückfällt."""
combo = _combo_mit_landkreisen()
tab = _neuer_tab(
_FakeLogic({"landkreis_user": "Nicht mehr vorhanden"}),
user_inputs={"landkreis_user": combo},
project_inputs={},
)
tab.load_data()
self.assertEqual(combo.currentText(), "")
class BuildInputTests(unittest.TestCase):
def test_landkreis_feld_liefert_combobox_mit_allen_landkreisen(self):
"""Prüft, dass _build_input für das Landkreis-Feld eine ComboBox mit Platzhalter und allen Landkreisen liefert."""
tab = _neuer_tab(_FakeLogic())
widget = tab._build_input("landkreis_user")
self.assertIsInstance(widget, QComboBox)
self.assertEqual(widget.count(), 1 + len(LANDKREISE))
def test_anderes_feld_liefert_lineedit(self):
"""Prüft, dass _build_input für ein normales Feld ein leeres Textfeld liefert."""
tab = _neuer_tab(_FakeLogic())
widget = tab._build_input("amt")
self.assertIsInstance(widget, QLineEdit)
self.assertEqual(widget.text(), "")
if __name__ == "__main__":
unittest.main()