tests überarbeitet
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
import unittest
|
||||
from typing import Any, cast
|
||||
from unittest.mock import patch
|
||||
|
||||
from sn_basis.modules.DataGrabber import DataGrabber
|
||||
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis
|
||||
|
||||
|
||||
class _DummyPruefmanager:
|
||||
def verarbeite(self, ergebnis: Any):
|
||||
return ergebnis
|
||||
|
||||
|
||||
class TestDataGrabber(unittest.TestCase):
|
||||
|
||||
def _make_grabber(self) -> DataGrabber:
|
||||
return DataGrabber(pruefmanager=cast(Any, _DummyPruefmanager()))
|
||||
|
||||
@patch("sn_basis.modules.DataGrabber.Dateipruefer")
|
||||
def test_analyze_source_type_detects_excel(self, mock_dateipruefer):
|
||||
mock_dateipruefer.return_value.pruefe.return_value = pruef_ergebnis(
|
||||
ok=True,
|
||||
meldung="ok",
|
||||
aktion="ok",
|
||||
kontext="C:/tmp/list.xlsx",
|
||||
)
|
||||
grabber = self._make_grabber()
|
||||
|
||||
source_type, result = grabber.analyze_source_type("C:/tmp/list.xlsx")
|
||||
|
||||
self.assertEqual(source_type, "excel")
|
||||
self.assertTrue(result.ok)
|
||||
|
||||
@patch("sn_basis.modules.DataGrabber.Dateipruefer")
|
||||
def test_analyze_source_type_returns_unknown_filetype(self, mock_dateipruefer):
|
||||
mock_dateipruefer.return_value.pruefe.return_value = pruef_ergebnis(
|
||||
ok=True,
|
||||
meldung="ok",
|
||||
aktion="ok",
|
||||
kontext="C:/tmp/file.txt",
|
||||
)
|
||||
grabber = self._make_grabber()
|
||||
|
||||
source_type, _result = grabber.analyze_source_type("C:/tmp/file.txt")
|
||||
|
||||
self.assertEqual(source_type, "unbekannter_dateityp")
|
||||
|
||||
@patch("sn_basis.modules.DataGrabber.Linkpruefer")
|
||||
@patch("sn_basis.modules.DataGrabber.Dateipruefer")
|
||||
def test_analyze_source_type_detects_service_when_file_check_fails(self, mock_dateipruefer, mock_linkpruefer):
|
||||
mock_dateipruefer.return_value.pruefe.return_value = pruef_ergebnis(
|
||||
ok=False,
|
||||
meldung="missing",
|
||||
aktion="datei_nicht_gefunden",
|
||||
kontext=None,
|
||||
)
|
||||
mock_linkpruefer.return_value.pruefe.return_value = pruef_ergebnis(
|
||||
ok=True,
|
||||
meldung="ok",
|
||||
aktion="url_ok",
|
||||
kontext="https://example.test",
|
||||
)
|
||||
grabber = self._make_grabber()
|
||||
|
||||
source_type, result = grabber.analyze_source_type("https://example.test")
|
||||
|
||||
self.assertEqual(source_type, "dienst")
|
||||
self.assertTrue(result.ok)
|
||||
|
||||
@patch("sn_basis.modules.DataGrabber.Linkpruefer")
|
||||
@patch("sn_basis.modules.DataGrabber.Dateipruefer")
|
||||
def test_analyze_source_type_returns_unbekannte_quelle_on_full_failure(self, mock_dateipruefer, mock_linkpruefer):
|
||||
mock_dateipruefer.return_value.pruefe.return_value = pruef_ergebnis(
|
||||
ok=False,
|
||||
meldung="missing",
|
||||
aktion="datei_nicht_gefunden",
|
||||
kontext=None,
|
||||
)
|
||||
mock_linkpruefer.return_value.pruefe.return_value = pruef_ergebnis(
|
||||
ok=False,
|
||||
meldung="bad",
|
||||
aktion="url_nicht_erreichbar",
|
||||
kontext=None,
|
||||
)
|
||||
grabber = self._make_grabber()
|
||||
|
||||
source_type, result = grabber.analyze_source_type("broken-input")
|
||||
|
||||
self.assertEqual(source_type, "unbekannte_quelle")
|
||||
self.assertFalse(result.ok)
|
||||
|
||||
@patch.object(DataGrabber, "analyze_source_type")
|
||||
@patch.object(DataGrabber, "_process_excel_source")
|
||||
def test_run_returns_success_summary_with_valid_rows(self, mock_process_excel, mock_analyze):
|
||||
mock_analyze.return_value = (
|
||||
"excel",
|
||||
pruef_ergebnis(ok=True, meldung="ok", aktion="ok", kontext=None),
|
||||
)
|
||||
mock_process_excel.return_value = (
|
||||
{"rows": [{"ident": "A1"}]},
|
||||
[],
|
||||
)
|
||||
|
||||
grabber = self._make_grabber()
|
||||
source_dict, summary = grabber.run("C:/tmp/list.xlsx")
|
||||
|
||||
self.assertEqual(len(source_dict["rows"]), 1)
|
||||
self.assertTrue(summary.ok)
|
||||
self.assertEqual(summary.aktion, "ok")
|
||||
|
||||
@patch.object(DataGrabber, "analyze_source_type")
|
||||
def test_run_returns_failure_summary_without_rows(self, mock_analyze):
|
||||
mock_analyze.return_value = (
|
||||
"unbekannte_quelle",
|
||||
pruef_ergebnis(ok=False, meldung="bad", aktion="unbekannte_quelle", kontext=None),
|
||||
)
|
||||
|
||||
grabber = self._make_grabber()
|
||||
source_dict, summary = grabber.run("???")
|
||||
|
||||
self.assertEqual(source_dict, {})
|
||||
self.assertFalse(summary.ok)
|
||||
self.assertEqual(summary.aktion, "keine_validen_eintraege")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -141,6 +141,40 @@ class TestPruefmanager(unittest.TestCase):
|
||||
self.assertFalse(entscheidung.ok)
|
||||
self.assertEqual(entscheidung.aktion, "unbekannt")
|
||||
|
||||
@patch("sn_basis.modules.Pruefmanager.ask_overwrite_append_cancel_custom", return_value="overwrite")
|
||||
def test_datei_existiert_overwrite(self, _mock_choice):
|
||||
ergebnis = pruef_ergebnis(False, "Datei existiert", "datei_existiert", "C:/tmp/v.gpkg")
|
||||
entscheidung = self.manager.verarbeite(ergebnis)
|
||||
|
||||
self.assertTrue(entscheidung.ok)
|
||||
self.assertEqual(entscheidung.aktion, "datei_existiert_ueberschreiben")
|
||||
self.assertEqual(entscheidung.kontext, "C:/tmp/v.gpkg")
|
||||
|
||||
@patch("sn_basis.modules.Pruefmanager.ask_overwrite_append_cancel_custom", return_value="append")
|
||||
def test_datei_existiert_append(self, _mock_choice):
|
||||
ergebnis = pruef_ergebnis(False, "Datei existiert", "datei_existiert", "C:/tmp/v.gpkg")
|
||||
entscheidung = self.manager.verarbeite(ergebnis)
|
||||
|
||||
self.assertTrue(entscheidung.ok)
|
||||
self.assertEqual(entscheidung.aktion, "datei_existiert_anhaengen")
|
||||
|
||||
@patch("sn_basis.modules.Pruefmanager.ask_overwrite_append_cancel_custom", return_value="cancel")
|
||||
def test_datei_existiert_cancel(self, _mock_choice):
|
||||
ergebnis = pruef_ergebnis(False, "Datei existiert", "datei_existiert", "C:/tmp/v.gpkg")
|
||||
entscheidung = self.manager.verarbeite(ergebnis)
|
||||
|
||||
self.assertTrue(entscheidung.ok)
|
||||
self.assertEqual(entscheidung.aktion, "datei_existiert_ueberspringen")
|
||||
|
||||
def test_datei_existiert_in_non_qgis_mode_returns_input(self):
|
||||
manager = Pruefmanager(ui_modus="test")
|
||||
ergebnis = pruef_ergebnis(False, "Datei existiert", "datei_existiert", "C:/tmp/v.gpkg")
|
||||
|
||||
entscheidung = manager.verarbeite(ergebnis)
|
||||
|
||||
self.assertFalse(entscheidung.ok)
|
||||
self.assertEqual(entscheidung.aktion, "datei_existiert")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -55,6 +55,32 @@ class TestSettingsLogic(unittest.TestCase):
|
||||
self.assertIn("gemeinden", saved_keys)
|
||||
self.assertNotIn("unbekannt", saved_keys)
|
||||
|
||||
@patch("sn_basis.functions.settings_logic.get_variable")
|
||||
def test_load_handles_partial_values_with_empty_fallback(self, mock_get):
|
||||
values = {
|
||||
"amt": "A1",
|
||||
"behoerde": "",
|
||||
"landkreis_user": "L1",
|
||||
}
|
||||
mock_get.side_effect = lambda key, scope="project": values.get(key, "")
|
||||
|
||||
logic = SettingsLogic()
|
||||
daten = logic.load()
|
||||
|
||||
self.assertEqual(daten["amt"], "A1")
|
||||
self.assertEqual(daten["behoerde"], "")
|
||||
self.assertEqual(daten["landkreis_user"], "L1")
|
||||
self.assertEqual(daten["sachgebiet"], "")
|
||||
|
||||
@patch("sn_basis.functions.settings_logic.set_variable")
|
||||
def test_save_empty_string_value_is_persisted(self, mock_set):
|
||||
logic = SettingsLogic()
|
||||
|
||||
logic.save({"amt": "", "behoerde": "B2"})
|
||||
|
||||
mock_set.assert_any_call("amt", "", scope="project")
|
||||
mock_set.assert_any_call("behoerde", "B2", scope="project")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -51,6 +51,28 @@ class TestVariableWrapper(unittest.TestCase):
|
||||
"new_value",
|
||||
)
|
||||
|
||||
@patch("sn_basis.functions.variable_wrapper.QgsExpressionContextUtils.setGlobalVariable")
|
||||
def test_set_variable_global_writes_prefixed_name(self, mock_set_global):
|
||||
variable_wrapper.set_variable("verfahrensnummer", "123", scope="global")
|
||||
|
||||
mock_set_global.assert_called_once_with("sn_verfahrensnummer", "123")
|
||||
|
||||
@patch("sn_basis.functions.variable_wrapper.QgsExpressionContextUtils.globalScope")
|
||||
def test_get_variable_global_returns_empty_string_fallback(self, mock_global_scope):
|
||||
mock_global_scope.return_value = _Scope("")
|
||||
|
||||
value = variable_wrapper.get_variable("nicht_vorhanden", scope="global")
|
||||
|
||||
self.assertEqual(value, "")
|
||||
|
||||
def test_get_variable_invalid_scope_raises(self):
|
||||
with self.assertRaises(ValueError):
|
||||
variable_wrapper.get_variable("foo", scope="invalid")
|
||||
|
||||
def test_set_variable_invalid_scope_raises(self):
|
||||
with self.assertRaises(ValueError):
|
||||
variable_wrapper.set_variable("foo", "bar", scope="invalid")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user