Files
Plugin_SN_Basis/tests/test_settings_tab.py
T
DanielandClaude Sonnet 5 8eb89e92a7 Kategorie "vielleicht testen" in sn_basis abgeschlossen (#67)
37 neue Testfälle für die 31 verbleibenden "vielleicht testen"-
Funktionen: os_wrapper.is_case_sensitive_fs, qgiscore_wrapper.
create_buffer_layer (nur die Wächter, echte Pufferlogik importiert
qgis.core direkt), qgisui_wrapper.find_dock_widgets/add_menu/remove_menu,
DataGrabber._aggregate_results, pruef_ergebnis.dateipfad,
Navigation (add_action, finalize_menu_and_toolbar, set_active_plugin,
remove_action, remove_all), SettingsTab._build_input und PrintTab
(18 Methoden: Zustandslogik, Signal-Handling, Atlas-/Theme-Verwaltung).

PrintTab._build_ui bekommt stattdessen den Vermerk "von Test abgesehen,
weil vernachlässigbar; HD 18.09.2026" - reine Qt-Widget-Konstruktion ohne
eigenständig prüfbare Logik. Damit ist die Kategorie "vielleicht testen"
für sn_basis aufgelöst: jede Funktion ist jetzt getestet oder mit einem
begründeten Vermerk versehen.

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

139 lines
4.8 KiB
Python

"""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()