2026-09-18 13:06:06 +02:00
|
|
|
"""Tests für sn_basis/ui/tabs/settings_tab.py::save_data/load_data/_build_input (Issue #65/#67)."""
|
2026-09-18 11:20:10 +02:00
|
|
|
|
|
|
|
|
import unittest
|
|
|
|
|
|
2026-09-18 13:06:06 +02:00
|
|
|
from sn_basis.functions.landkreise import LANDKREISE
|
2026-09-18 11:20:10 +02:00
|
|
|
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(), "")
|
|
|
|
|
|
|
|
|
|
|
2026-09-18 13:06:06 +02:00
|
|
|
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(), "")
|
|
|
|
|
|
|
|
|
|
|
2026-09-18 11:20:10 +02:00
|
|
|
if __name__ == "__main__":
|
|
|
|
|
unittest.main()
|