forked from AG_QGIS/Plugin_SN_Plan41
154 lines
4.9 KiB
Python
154 lines
4.9 KiB
Python
|
|
import unittest
|
||
|
|
from pathlib import Path
|
||
|
|
from tempfile import TemporaryDirectory
|
||
|
|
|
||
|
|
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
|
||
|
|
|
||
|
|
|
||
|
|
class TestTabALogic(unittest.TestCase):
|
||
|
|
|
||
|
|
# -----------------------------------------------------
|
||
|
|
# 1. Verfahrens-DB setzen und laden
|
||
|
|
# -----------------------------------------------------
|
||
|
|
def test_verfahrens_db_set_and_load(self):
|
||
|
|
logic = TabALogic()
|
||
|
|
|
||
|
|
with TemporaryDirectory() as tmp:
|
||
|
|
db_path = Path(tmp) / "test.gpkg"
|
||
|
|
db_path.write_text("")
|
||
|
|
|
||
|
|
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.set_verfahrens_db(None)
|
||
|
|
|
||
|
|
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()
|
||
|
|
|
||
|
|
with TemporaryDirectory() as tmp:
|
||
|
|
link_path = Path(tmp) / "links.xlsx"
|
||
|
|
link_path.write_text("dummy")
|
||
|
|
|
||
|
|
logic.set_linkliste(str(link_path))
|
||
|
|
|
||
|
|
stored = get_variable("linkliste", scope="project")
|
||
|
|
self.assertEqual(stored, str(link_path))
|
||
|
|
|
||
|
|
loaded = logic.load_linkliste()
|
||
|
|
self.assertEqual(loaded, str(link_path))
|
||
|
|
|
||
|
|
# -----------------------------------------------------
|
||
|
|
# 5. Linkliste löschen
|
||
|
|
# -----------------------------------------------------
|
||
|
|
def test_linkliste_clear(self):
|
||
|
|
logic = TabALogic()
|
||
|
|
|
||
|
|
logic.set_linkliste(None)
|
||
|
|
|
||
|
|
stored = get_variable("linkliste", scope="project")
|
||
|
|
self.assertEqual(stored, "")
|
||
|
|
|
||
|
|
# -----------------------------------------------------
|
||
|
|
# 6. Layer-ID speichern
|
||
|
|
# -----------------------------------------------------
|
||
|
|
def test_verfahrensgebiet_layer_id_storage(self):
|
||
|
|
logic = TabALogic()
|
||
|
|
|
||
|
|
class MockLayer:
|
||
|
|
def id(self):
|
||
|
|
return "layer-123"
|
||
|
|
|
||
|
|
logic.save_verfahrensgebiet_layer(MockLayer())
|
||
|
|
|
||
|
|
stored = get_variable("verfahrensgebiet_layer", scope="project")
|
||
|
|
self.assertEqual(stored, "layer-123")
|
||
|
|
|
||
|
|
# -----------------------------------------------------
|
||
|
|
# 7. Ungültiger Layer wird ignoriert
|
||
|
|
# -----------------------------------------------------
|
||
|
|
def test_invalid_layer_is_rejected(self):
|
||
|
|
logic = TabALogic()
|
||
|
|
|
||
|
|
class InvalidLayer:
|
||
|
|
pass
|
||
|
|
|
||
|
|
logic.save_verfahrensgebiet_layer(InvalidLayer())
|
||
|
|
|
||
|
|
stored = get_variable("verfahrensgebiet_layer", scope="project")
|
||
|
|
self.assertEqual(stored, "")
|
||
|
|
#-----------------------------------------------------
|
||
|
|
# 8. Layer-ID wirft Exception
|
||
|
|
#----------------------------------------------------
|
||
|
|
def test_layer_id_raises_exception(self):
|
||
|
|
logic = TabALogic()
|
||
|
|
|
||
|
|
class BadLayer:
|
||
|
|
def id(self):
|
||
|
|
raise RuntimeError("boom")
|
||
|
|
|
||
|
|
logic.save_verfahrensgebiet_layer(BadLayer())
|
||
|
|
|
||
|
|
stored = get_variable("verfahrensgebiet_layer", scope="project")
|
||
|
|
self.assertEqual(stored, "")
|
||
|
|
# -----------------------------------------------------
|
||
|
|
# 11. Layer ID wird leer zurückgegeben
|
||
|
|
# -----------------------------------------------------
|
||
|
|
def test_layer_id_returns_empty(self):
|
||
|
|
logic = TabALogic()
|
||
|
|
|
||
|
|
class EmptyLayer:
|
||
|
|
def id(self):
|
||
|
|
return ""
|
||
|
|
|
||
|
|
logic.save_verfahrensgebiet_layer(EmptyLayer())
|
||
|
|
|
||
|
|
stored = get_variable("verfahrensgebiet_layer", scope="project")
|
||
|
|
self.assertEqual(stored, "")
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
unittest.main()
|