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