Files
Plugin_SN_Basis/tests/test_settings_tab.py
T
DanielandClaude Sonnet 5 7ce820581f Tests für restliche priorisierte sn_basis-Funktionen ergänzt (#65)
79 neue Testfälle: Verfahrensgebiet-Zustandsverwaltung (Listener-Setup/
-teardown, Signal-Handler), DockManager/BaseDockWidget, pruef_ergebnis-
Persistenz-Gates, Pruefmanager-Entscheidungswege, restliche Dateipruefer-
Zweige, Fundament-Wrapper (sys_wrapper, ly_existence_wrapper,
ly_style_wrapper.apply_style_from_path, landkreise, message_wrapper,
qgiscore_wrapper.polygon_zu_linie/layer_exists_in_gpkg,
qgisui_wrapper.add_layer_to_project) und SettingsTab.save_data/load_data.

Ausgeklammert: LayerLoader.apply_style/ly_style_wrapper.apply_style
(Bug-Verdacht, hartkodierter Fachplugin-Pfad) und
Pruefmanager._ask_use_or_replace_pufferlayer (bereits als Bug in #60
erfasst: ruft nicht existierendes self.pruefmanager auf).

qt_wrapper._MockQDockWidget um closeEvent() ergänzt (fehlte, ließ jede
BaseDockWidget.closeEvent()-Ausführung im Mock-Modus abstürzen).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 11:20:10 +02:00

118 lines
4.0 KiB
Python

"""Tests für sn_basis/ui/tabs/settings_tab.py::save_data/load_data (Issue #65)."""
import unittest
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(), "")
if __name__ == "__main__":
unittest.main()