test überarbeitet
This commit is contained in:
+83
-73
@@ -1,99 +1,109 @@
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
from typing import Any, cast
|
||||
from unittest.mock import patch
|
||||
|
||||
from sn_plan41.ui.tab_a_logic import TabALogic # type: ignore
|
||||
from sn_basis.functions.variable_wrapper import get_variable # type: ignore
|
||||
from sn_basis.functions.sys_wrapper import file_exists # type: ignore
|
||||
from sn_basis.modules.pruef_ergebnis import pruef_ergebnis
|
||||
from sn_basis.functions.variable_wrapper import get_variable
|
||||
from sn_plan41.ui.tab_a_logic import TabALogic
|
||||
|
||||
|
||||
class _DummyPruefmanager:
|
||||
def verarbeite(self, ergebnis):
|
||||
return ergebnis
|
||||
|
||||
|
||||
class TestTabALogic(unittest.TestCase):
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 1. Verfahrens-DB setzen und laden
|
||||
# -----------------------------------------------------
|
||||
def test_verfahrens_db_set_and_load(self):
|
||||
logic = TabALogic()
|
||||
def _make_logic(self) -> TabALogic:
|
||||
return TabALogic(
|
||||
pruefmanager=cast(Any, _DummyPruefmanager()),
|
||||
link_pruefer=cast(Any, object()),
|
||||
stil_pruefer=cast(Any, object()),
|
||||
)
|
||||
|
||||
with TemporaryDirectory() as tmp:
|
||||
db_path = Path(tmp) / "test.gpkg"
|
||||
db_path.write_text("")
|
||||
def test_verfahrens_db_set_and_load_roundtrip(self):
|
||||
logic = self._make_logic()
|
||||
logic.set_verfahrens_db("C:/tmp/v_db.gpkg")
|
||||
self.assertEqual(logic.load_verfahrens_db(), "C:/tmp/v_db.gpkg")
|
||||
|
||||
logic.set_verfahrens_db(str(db_path))
|
||||
|
||||
stored = get_variable("verfahrens_db", scope="project")
|
||||
self.assertEqual(stored, str(db_path))
|
||||
|
||||
loaded = logic.load_verfahrens_db()
|
||||
self.assertEqual(loaded, str(db_path))
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 2. Verfahrens-DB löschen
|
||||
# -----------------------------------------------------
|
||||
def test_verfahrens_db_clear(self):
|
||||
logic = TabALogic()
|
||||
|
||||
logic = self._make_logic()
|
||||
logic.set_verfahrens_db(None)
|
||||
self.assertEqual(get_variable("verfahrens_db", scope="project"), "")
|
||||
|
||||
stored = get_variable("verfahrens_db", scope="project")
|
||||
self.assertEqual(stored, "")
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 3. Neue Verfahrens-DB anlegen
|
||||
# -----------------------------------------------------
|
||||
def test_create_new_verfahrens_db(self):
|
||||
logic = TabALogic()
|
||||
|
||||
with TemporaryDirectory() as tmp:
|
||||
db_path = Path(tmp) / "neu.gpkg"
|
||||
|
||||
result = logic.create_new_verfahrens_db(str(db_path))
|
||||
|
||||
self.assertTrue(result)
|
||||
self.assertTrue(file_exists(db_path))
|
||||
|
||||
stored = get_variable("verfahrens_db", scope="project")
|
||||
self.assertEqual(stored, str(db_path))
|
||||
|
||||
def test_create_new_verfahrens_db_with_none_path(self):
|
||||
logic = TabALogic()
|
||||
result = logic.create_new_verfahrens_db(None)
|
||||
self.assertFalse(result)
|
||||
|
||||
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 4. Linkliste setzen und laden
|
||||
# -----------------------------------------------------
|
||||
def test_linkliste_set_and_load(self):
|
||||
logic = TabALogic()
|
||||
|
||||
def test_linkliste_set_and_load_existing_path(self):
|
||||
logic = self._make_logic()
|
||||
with TemporaryDirectory() as tmp:
|
||||
link_path = Path(tmp) / "links.xlsx"
|
||||
link_path.write_text("dummy")
|
||||
link_path.write_text("x", encoding="utf-8")
|
||||
|
||||
logic.set_linkliste(str(link_path))
|
||||
self.assertEqual(logic.load_linkliste(), str(link_path))
|
||||
|
||||
stored = get_variable("linkliste", scope="project")
|
||||
self.assertEqual(stored, str(link_path))
|
||||
def test_linkliste_load_returns_none_when_file_missing(self):
|
||||
logic = self._make_logic()
|
||||
logic.set_linkliste("C:/tmp/missing.xlsx")
|
||||
self.assertIsNone(logic.load_linkliste())
|
||||
|
||||
loaded = logic.load_linkliste()
|
||||
self.assertEqual(loaded, str(link_path))
|
||||
@patch("sn_plan41.ui.tab_a_logic.get_plugin_root", return_value="C:/plugins")
|
||||
@patch("sn_plan41.ui.tab_a_logic.join_path", return_value="C:/plugins/sn_plan41/assets/Linkliste.xlsx")
|
||||
def test_resolve_linkliste_empty_uses_standard_and_persists(self, _mock_join_path, _mock_root):
|
||||
logic = self._make_logic()
|
||||
resolved = logic._resolve_linkliste(None)
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 5. Linkliste löschen
|
||||
# -----------------------------------------------------
|
||||
def test_linkliste_clear(self):
|
||||
logic = TabALogic()
|
||||
self.assertEqual(resolved, "C:/plugins/sn_plan41/assets/Linkliste.xlsx")
|
||||
self.assertEqual(get_variable("linkliste", scope="project"), "C:/plugins/sn_plan41/assets/Linkliste.xlsx")
|
||||
|
||||
logic.set_linkliste(None)
|
||||
@patch("sn_plan41.ui.tab_a_logic.Dateipruefer")
|
||||
def test_resolve_linkliste_returns_none_when_pruefmanager_rejects(self, mock_dateipruefer):
|
||||
logic = self._make_logic()
|
||||
mock_dateipruefer.return_value.pruefe.return_value = pruef_ergebnis(
|
||||
ok=False,
|
||||
meldung="Ungültig",
|
||||
aktion="datei_nicht_gefunden",
|
||||
kontext=None,
|
||||
)
|
||||
|
||||
stored = get_variable("linkliste", scope="project")
|
||||
self.assertEqual(stored, "")
|
||||
resolved = logic._resolve_linkliste("C:/tmp/missing.xlsx")
|
||||
self.assertIsNone(resolved)
|
||||
|
||||
# -----------------------------------------------------
|
||||
# 6. Layer-ID speichern
|
||||
# -----------------------------------------------------
|
||||
def test_resolve_raumfilter_without_filter_returns_none(self):
|
||||
logic = self._make_logic()
|
||||
result = logic._resolve_raumfilter("ohne", "C:/tmp/v_db.gpkg")
|
||||
self.assertIsNone(result)
|
||||
|
||||
@patch.object(TabALogic, "_get_verfahrensgebiet_layer", return_value="layer_obj")
|
||||
def test_resolve_raumfilter_verfahrensgebiet_uses_layer_lookup(self, mock_get_layer):
|
||||
logic = self._make_logic()
|
||||
result = logic._resolve_raumfilter("Verfahrensgebiet", "C:/tmp/v_db.gpkg")
|
||||
|
||||
self.assertEqual(result, "layer_obj")
|
||||
mock_get_layer.assert_called_once()
|
||||
|
||||
def test_extract_datenabruf_error_maps_merges_reason_maps(self):
|
||||
logic = self._make_logic()
|
||||
results = [
|
||||
pruef_ergebnis(
|
||||
ok=False,
|
||||
meldung="Head failed",
|
||||
aktion="url_nicht_erreichbar",
|
||||
kontext={"ident": "A1", "thema": "Dienst A", "error": "Timeout"},
|
||||
),
|
||||
pruef_ergebnis(
|
||||
ok=False,
|
||||
meldung="Fetch failed",
|
||||
aktion="datenabruf",
|
||||
kontext={"fehler": {"Dienst B": "HTTP 500", "Dienst A": "ignored"}},
|
||||
),
|
||||
]
|
||||
|
||||
merged = logic._extract_datenabruf_error_maps(results)
|
||||
|
||||
self.assertEqual(merged["by_ident"]["A1"], "Timeout")
|
||||
self.assertEqual(merged["by_thema"]["Dienst A"], "Timeout")
|
||||
self.assertEqual(merged["by_thema"]["Dienst B"], "HTTP 500")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user