"""Tests für sn_basis/functions/ly_style_wrapper.py::apply_style_from_path (Issue #65). `apply_style` bleibt ausgeklammert: hardcodiert 'sn_verfahrensgebiet' in platformneutralem sn_basis-Code (mutmaßlicher Bug, siehe docs/tests/testkatalog.md und Issue-Historie #63). """ import unittest from sn_basis.functions.ly_style_wrapper import apply_style_from_path class _FakeLayer: def __init__(self, ergebnis=(True, ""), wirft_fehler: bool = False) -> None: self._ergebnis = ergebnis self._wirft_fehler = wirft_fehler self.repaint_aufgerufen = False def loadNamedStyle(self, path: str): if self._wirft_fehler: raise RuntimeError("kaputt") return self._ergebnis def triggerRepaint(self) -> None: self.repaint_aufgerufen = True class ApplyStyleFromPathTests(unittest.TestCase): def test_fehlender_layer_liefert_false(self): """Prüft, dass ein fehlender Layer (None) False liefert, ohne einen Stil zu laden.""" self.assertFalse(apply_style_from_path(None, "stil.qml")) def test_erfolgreiches_laden_liefert_true_und_triggert_repaint(self): """Prüft, dass ein erfolgreich geladener Stil True liefert und den Layer neu zeichnet.""" layer = _FakeLayer(ergebnis=(True, "")) self.assertTrue(apply_style_from_path(layer, "stil.qml")) self.assertTrue(layer.repaint_aufgerufen) def test_fehlgeschlagenes_laden_liefert_false_ohne_repaint(self): """Prüft, dass ein fehlgeschlagenes Laden False liefert, ohne den Layer neu zu zeichnen.""" layer = _FakeLayer(ergebnis=(False, "ungültiges QML")) self.assertFalse(apply_style_from_path(layer, "stil.qml")) self.assertFalse(layer.repaint_aufgerufen) def test_ausnahme_beim_laden_wird_abgefangen(self): """Prüft, dass eine Ausnahme beim Laden des Stils abgefangen wird und False liefert.""" layer = _FakeLayer(wirft_fehler=True) self.assertFalse(apply_style_from_path(layer, "stil.qml")) if __name__ == "__main__": unittest.main()