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