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>
This commit is contained in:
@@ -189,6 +189,111 @@ class TestPruefmanager(unittest.TestCase):
|
||||
self.assertFalse(entscheidung.ok)
|
||||
self.assertEqual(entscheidung.aktion, "datei_existiert")
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 11. Verfahrensgebiet-Layer existiert bereits
|
||||
# -----------------------------------------------------
|
||||
@patch("sn_basis.modules.Pruefmanager.ask_ergaenzen_entfernen_ersetzen_abbrechen", return_value="ergaenzen")
|
||||
def test_verfahrensgebiet_layer_existiert_ergaenzen(self, _mock_choice):
|
||||
"""Prüft, dass die Nutzerwahl 'ergänzen' bei bestehendem Verfahrensgebiet zur Aktion 'verfahrensgebiet_ergaenzen' führt."""
|
||||
ergebnis = pruef_ergebnis(False, "VG existiert", "verfahrensgebiet_layer_existiert", None)
|
||||
entscheidung = self.manager.verarbeite(ergebnis)
|
||||
|
||||
self.assertTrue(entscheidung.ok)
|
||||
self.assertEqual(entscheidung.aktion, "verfahrensgebiet_ergaenzen")
|
||||
|
||||
@patch("sn_basis.modules.Pruefmanager.ask_ergaenzen_entfernen_ersetzen_abbrechen", return_value="abbrechen")
|
||||
def test_verfahrensgebiet_layer_existiert_abbrechen(self, _mock_choice):
|
||||
"""Prüft, dass die Nutzerwahl 'abbrechen' bei bestehendem Verfahrensgebiet ok=False mit Aktion 'verfahrensgebiet_abbrechen' liefert."""
|
||||
ergebnis = pruef_ergebnis(False, "VG existiert", "verfahrensgebiet_layer_existiert", None)
|
||||
entscheidung = self.manager.verarbeite(ergebnis)
|
||||
|
||||
self.assertFalse(entscheidung.ok)
|
||||
self.assertEqual(entscheidung.aktion, "verfahrensgebiet_abbrechen")
|
||||
|
||||
def test_verfahrensgebiet_layer_existiert_in_non_qgis_mode_returns_input(self):
|
||||
"""Prüft, dass außerhalb des QGIS-Modus bei bestehendem Verfahrensgebiet keine Rückfrage erfolgt."""
|
||||
manager = Pruefmanager(ui_modus="test")
|
||||
ergebnis = pruef_ergebnis(False, "VG existiert", "verfahrensgebiet_layer_existiert", None)
|
||||
|
||||
entscheidung = manager.verarbeite(ergebnis)
|
||||
|
||||
self.assertFalse(entscheidung.ok)
|
||||
self.assertEqual(entscheidung.aktion, "verfahrensgebiet_layer_existiert")
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 12. report_error: Einstufung nach Aktionscode
|
||||
# -----------------------------------------------------
|
||||
@patch("sn_basis.modules.Pruefmanager.error")
|
||||
@patch("sn_basis.modules.Pruefmanager.warning")
|
||||
def test_report_error_kritische_aktion_ruft_error_auf(self, mock_warning, mock_error):
|
||||
"""Prüft, dass eine kritische Aktion (z. B. 'netzwerkfehler') über error() gemeldet wird, nicht über warning()."""
|
||||
self.manager.report_error("Thema", "Meldung", aktion="netzwerkfehler")
|
||||
|
||||
mock_error.assert_called_once_with("Thema", "Meldung")
|
||||
mock_warning.assert_not_called()
|
||||
|
||||
@patch("sn_basis.modules.Pruefmanager.error")
|
||||
@patch("sn_basis.modules.Pruefmanager.warning")
|
||||
def test_report_error_warn_aktion_ruft_warning_auf(self, mock_warning, mock_error):
|
||||
"""Prüft, dass eine Warn-Aktion (z. B. 'datei_nicht_gefunden') über warning() gemeldet wird, nicht über error()."""
|
||||
self.manager.report_error("Thema", "Meldung", aktion="datei_nicht_gefunden")
|
||||
|
||||
mock_warning.assert_called_once_with("Thema", "Meldung")
|
||||
mock_error.assert_not_called()
|
||||
|
||||
@patch("sn_basis.modules.Pruefmanager.error")
|
||||
@patch("sn_basis.modules.Pruefmanager.warning")
|
||||
def test_report_error_unbekannte_aktion_faellt_auf_warning_zurueck(self, mock_warning, mock_error):
|
||||
"""Prüft, dass eine nicht eingestufte Aktion als Fallback über warning() gemeldet wird."""
|
||||
self.manager.report_error("Thema", "Meldung", aktion="voellig_unbekannt")
|
||||
|
||||
mock_warning.assert_called_once_with("Thema", "Meldung")
|
||||
mock_error.assert_not_called()
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 13. frage_ja_nein
|
||||
# -----------------------------------------------------
|
||||
@patch("sn_basis.modules.Pruefmanager.ask_yes_no", return_value=True)
|
||||
def test_frage_ja_nein_im_qgis_modus_fragt_nutzer(self, mock_ask):
|
||||
"""Prüft, dass frage_ja_nein im QGIS-Modus den Nutzer fragt und dessen Antwort liefert."""
|
||||
ergebnis = self.manager.frage_ja_nein("Titel", "Meldung", default=False)
|
||||
|
||||
self.assertTrue(ergebnis)
|
||||
mock_ask.assert_called_once()
|
||||
|
||||
@patch("sn_basis.modules.Pruefmanager.ask_yes_no")
|
||||
def test_frage_ja_nein_ausserhalb_qgis_liefert_default_ohne_rueckfrage(self, mock_ask):
|
||||
"""Prüft, dass frage_ja_nein außerhalb des QGIS-Modus den Default-Wert liefert, ohne den Nutzer zu fragen."""
|
||||
manager = Pruefmanager(ui_modus="test")
|
||||
|
||||
ergebnis = manager.frage_ja_nein("Titel", "Meldung", default=True)
|
||||
|
||||
self.assertTrue(ergebnis)
|
||||
mock_ask.assert_not_called()
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 14. frage_text
|
||||
# -----------------------------------------------------
|
||||
@patch("sn_basis.functions.dialog_wrapper.ask_text", return_value=("Neuer Text", True))
|
||||
def test_frage_text_im_qgis_modus_fragt_nutzer(self, mock_ask):
|
||||
"""Prüft, dass frage_text im QGIS-Modus den Nutzer fragt und Text plus OK-Status liefert."""
|
||||
text, ok = self.manager.frage_text("Titel", "Meldung", default_text="Alt")
|
||||
|
||||
self.assertEqual(text, "Neuer Text")
|
||||
self.assertTrue(ok)
|
||||
mock_ask.assert_called_once()
|
||||
|
||||
@patch("sn_basis.functions.dialog_wrapper.ask_text")
|
||||
def test_frage_text_ausserhalb_qgis_liefert_default_ohne_rueckfrage(self, mock_ask):
|
||||
"""Prüft, dass frage_text außerhalb des QGIS-Modus den Standardtext mit OK=True liefert, ohne den Nutzer zu fragen."""
|
||||
manager = Pruefmanager(ui_modus="test")
|
||||
|
||||
text, ok = manager.frage_text("Titel", "Meldung", default_text="Standard")
|
||||
|
||||
self.assertEqual(text, "Standard")
|
||||
self.assertTrue(ok)
|
||||
mock_ask.assert_not_called()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user