Files
Plugin_SN_Plan41/test/test_tab_a.py

113 lines
3.8 KiB
Python

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.gpkg")
# 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()