import unittest import os import tempfile import sys # Plugin-Ordner in den Python-Pfad aufnehmen sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) from qgis.PyQt.QtWidgets import QApplication from qgis.core import QgsProject, QgsVectorLayer from sn_plan41.ui.tabs import tab_a class TestTabA(unittest.TestCase): @classmethod def setUpClass(cls): """Qt-Anwendung initialisieren.""" cls.app = QApplication([]) def setUp(self): """Vor jedem Test: Projektvariablen löschen und TabA neu erzeugen.""" self.project = QgsProject.instance() self.project.setCustomVariables({}) # TabA erzeugen self.tab = TabA() # Temporäre Testdateien self.tmp_dir = tempfile.gettempdir() self.test_db = os.path.join(self.tmp_dir, "test_db.gpkg") self.test_link = os.path.join(self.tmp_dir, "test_link.xlsx") # Dummy-Dateien anlegen with open(self.test_db, "w") as f: f.write("") with open(self.test_link, "w") as f: f.write("") # --------------------------------------------------------- # Verfahrens-DB speichern & wiederherstellen # --------------------------------------------------------- def test_save_and_restore_verfahrens_db(self): self.tab.on_file_changed(self.test_db) vars = self.project.customVariables() self.assertEqual(vars.get("sn_verfahrens_db"), self.test_db) tab2 = TabA() self.assertEqual(tab2.verfahrens_db, self.test_db) self.assertEqual(tab2.file_widget.filePath(), self.test_db) # --------------------------------------------------------- # Verfahrens-DB löschen # --------------------------------------------------------- def test_delete_verfahrens_db(self): self.tab.on_file_changed(self.test_db) self.tab.on_file_changed("") vars = self.project.customVariables() self.assertNotIn("sn_verfahrens_db", vars) self.assertIsNone(self.tab.verfahrens_db) # --------------------------------------------------------- # Linkliste speichern & löschen # --------------------------------------------------------- def test_save_and_delete_linkliste(self): self.tab.on_linkliste_changed(self.test_link) vars = self.project.customVariables() self.assertEqual(vars.get("sn_linkliste"), self.test_link) self.tab.on_linkliste_changed("") vars = self.project.customVariables() self.assertNotIn("sn_linkliste", vars) # --------------------------------------------------------- # Layer-Vorauswahl # --------------------------------------------------------- def test_preselect_verfahrensgebiet_layer(self): vg_layer = QgsVectorLayer("Polygon?crs=EPSG:4326", "Verfahrensgebiet", "memory") other_layer = QgsVectorLayer("Polygon?crs=EPSG:4326", "AndereDaten", "memory") self.project.addMapLayer(other_layer) self.project.addMapLayer(vg_layer) tab2 = TabA() selected = tab2.layer_combo.currentLayer() self.assertIsNotNone(selected) self.assertEqual(selected.name(), "Verfahrensgebiet") # --------------------------------------------------------- # Gespeicherter Layer wird wiederhergestellt # --------------------------------------------------------- def test_restore_saved_layer(self): vg_layer = QgsVectorLayer("Polygon?crs=EPSG:4326", "Verfahrensgebiet", "memory") self.project.addMapLayer(vg_layer) vars = {"sn_verfahrensgebiet_layer": vg_layer.id()} self.project.setCustomVariables(vars) tab2 = TabA() selected = tab2.layer_combo.currentLayer() self.assertEqual(selected.id(), vg_layer.id()) if __name__ == "__main__": unittest.main()