diff --git a/docs/status/testpruefungen.json b/docs/status/testpruefungen.json index 24aefa2..730b3a5 100644 --- a/docs/status/testpruefungen.json +++ b/docs/status/testpruefungen.json @@ -547,6 +547,50 @@ "datum": "2026-09-17", "hash": "67e86095b7ad" }, + "sn_basis.tests.test_ly_existence_wrapper.LayerExistsTests.test_none_existiert_nicht": { + "datum": "2026-09-23", + "hash": "46610a354f52" + }, + "sn_basis.tests.test_ly_existence_wrapper.LayerExistsTests.test_ungueltiger_layer_existiert_trotzdem": { + "datum": "2026-09-23", + "hash": "2723abe4b70a" + }, + "sn_basis.tests.test_ly_existence_wrapper.LayerExistsTests.test_vorhandenes_objekt_existiert": { + "datum": "2026-09-23", + "hash": "36946f5654b9" + }, + "sn_basis.tests.test_ly_existence_wrapper.LayerIsUsableTests.test_gueltiger_layer_ist_nutzbar": { + "datum": "2026-09-23", + "hash": "d023884b88ed" + }, + "sn_basis.tests.test_ly_existence_wrapper.LayerIsUsableTests.test_none_ist_nicht_nutzbar": { + "datum": "2026-09-23", + "hash": "3c3dfa47e10c" + }, + "sn_basis.tests.test_ly_existence_wrapper.LayerIsUsableTests.test_ungueltiger_layer_ist_nicht_nutzbar": { + "datum": "2026-09-23", + "hash": "371afd48088a" + }, + "sn_basis.tests.test_ly_existence_wrapper.LayerIsValidTests.test_ausnahme_bei_isvalid_liefert_false": { + "datum": "2026-09-23", + "hash": "cdea9c039230" + }, + "sn_basis.tests.test_ly_existence_wrapper.LayerIsValidTests.test_gueltiger_layer_liefert_true": { + "datum": "2026-09-23", + "hash": "b59492eacf41" + }, + "sn_basis.tests.test_ly_existence_wrapper.LayerIsValidTests.test_none_ist_nicht_gueltig": { + "datum": "2026-09-23", + "hash": "fe9e75b0dd64" + }, + "sn_basis.tests.test_ly_existence_wrapper.LayerIsValidTests.test_objekt_ohne_isvalid_ist_nicht_gueltig": { + "datum": "2026-09-23", + "hash": "a9ac192cbaea" + }, + "sn_basis.tests.test_ly_existence_wrapper.LayerIsValidTests.test_ungueltiger_layer_liefert_false": { + "datum": "2026-09-23", + "hash": "8c70103cdd59" + }, "sn_basis.tests.test_pruefmanager.TestPruefmanager.test_datei_existiert_append": { "datum": "2026-09-17", "hash": "25e169c45423" diff --git a/docs/tests/testkatalog.html b/docs/tests/testkatalog.html index 3316343..e9458cc 100644 --- a/docs/tests/testkatalog.html +++ b/docs/tests/testkatalog.html @@ -123,24 +123,24 @@

Prüfstand

Testkatalog der sn_*-Plugins — was die Suite heute prüft, auf einen Blick.
-
Quelle: docs/tests/testkatalog.md
Baseline: docs/status/testbaseline.json (SHA-256 aeabc946a7f3)
Prüf-Audit: docs/status/testpruefungen.json (SHA-256 2f7e27c76ee7)
+
Quelle: docs/tests/testkatalog.md
Baseline: docs/status/testbaseline.json (SHA-256 aeabc946a7f3)
Prüf-Audit: docs/status/testpruefungen.json (SHA-256 4d0c4430fa9f)
-
592Testfälle
-
549grün
+
595Testfälle
+
552grün
35rot (Baseline)
76%mit Docstring
-
27%aktuell geprüft
+
29%aktuell geprüft
49Testdateien
35%ohne Testbezug
Verteilung je Paket
-
sn_basis32 Dateien · 340 Testfälle
+
sn_basis32 Dateien · 343 Testfälle
sn_verfahrensgebiet12 Dateien · 208 Testfälle
sn_plan415 Dateien · 44 Testfälle
@@ -159,11 +159,11 @@

sn_basis

Plattform-Plugin · Ordner Plugin_SN_Basis

- -
32Testdateien
340Testfälle
340grün
0rot (Baseline)
100%mit Docstring
47%geprüft
72ohne Testbezug
+
32Testdateien
343Testfälle
343grün
0rot (Baseline)
100%mit Docstring
50%geprüft
72ohne Testbezug

Tests für sn_basis/ui/base_dockwidget.py::closeEvent (Issue #65).

CloseEventTests 5
flowchart TD
   root(["test_base_dockwidget.py"])
   class root rootnode
@@ -592,21 +592,26 @@
   classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
   classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
   classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
-  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestLinkpruefer
test_leere_eingabe
Prüft, dass eine leere Eingabe ohne Netzwerk-/Dateizugriff als 'leer' abgelehnt wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_remote_link_ok
Prüft, dass eine erreichbare Remote-URL (HTTP HEAD ohne Fehler) als 'ok' bestätigt wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_remote_link_error
Prüft, dass eine Remote-URL mit Fehlerantwort als 'url_nicht_erreichbar' abgelehnt wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_remote_link_network_error
Prüft, dass eine ausbleibende Netzwerkantwort (None) als 'netzwerkfehler' gemeldet wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_local_link_not_found
Prüft, dass ein nicht existierender lokaler Pfad als 'pfad_nicht_gefunden' abgelehnt wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_local_link_ok
Prüft, dass ein existierender lokaler Pfad als 'ok' bestätigt wird.grüngeprüft am 2026-09-17

Tests für sn_basis/functions/ly_existence_wrapper.py::layer_is_valid/layer_is_usable (Issue #65).

LayerIsValidTests 5LayerIsUsableTests 3
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
TestLinkpruefer
test_leere_eingabe
Prüft, dass eine leere Eingabe ohne Netzwerk-/Dateizugriff als 'leer' abgelehnt wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_remote_link_ok
Prüft, dass eine erreichbare Remote-URL (HTTP HEAD ohne Fehler) als 'ok' bestätigt wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_remote_link_error
Prüft, dass eine Remote-URL mit Fehlerantwort als 'url_nicht_erreichbar' abgelehnt wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_remote_link_network_error
Prüft, dass eine ausbleibende Netzwerkantwort (None) als 'netzwerkfehler' gemeldet wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_local_link_not_found
Prüft, dass ein nicht existierender lokaler Pfad als 'pfad_nicht_gefunden' abgelehnt wird.grüngeprüft am 2026-09-17
TestLinkpruefer
test_local_link_ok
Prüft, dass ein existierender lokaler Pfad als 'ok' bestätigt wird.grüngeprüft am 2026-09-17

Tests für sn_basis/functions/ly_existence_wrapper.py::layer_exists/layer_is_valid/layer_is_usable (Issue #65, #76).

LayerExistsTests 3LayerIsValidTests 5LayerIsUsableTests 3
flowchart TD
   root(["test_ly_existence_wrapper.py"])
   class root rootnode
-  root --> g1["LayerIsValidTests (5)"]
+  root --> g1["LayerExistsTests (3)"]
   class g1 groupnode
-  g1 --> t1("none_ist_nicht_gueltig")
-  g1 --> t2("objekt_ohne_isvalid_ist_nicht_gueltig")
-  g1 --> t3("gueltiger_layer_liefert_true")
-  g1 --> t4("ungueltiger_layer_liefert_false")
-  g1 --> t5("ausnahme_bei_isvalid_liefert_false")
-  root --> g2["LayerIsUsableTests (3)"]
+  g1 --> t1("none_existiert_nicht")
+  g1 --> t2("vorhandenes_objekt_existiert")
+  g1 --> t3("ungueltiger_layer_existiert_trotzdem")
+  root --> g2["LayerIsValidTests (5)"]
   class g2 groupnode
-  g2 --> t6("none_ist_nicht_nutzbar")
-  g2 --> t7("gueltiger_layer_ist_nutzbar")
-  g2 --> t8("ungueltiger_layer_ist_nicht_nutzbar")
+  g2 --> t4("none_ist_nicht_gueltig")
+  g2 --> t5("objekt_ohne_isvalid_ist_nicht_gueltig")
+  g2 --> t6("gueltiger_layer_liefert_true")
+  g2 --> t7("ungueltiger_layer_liefert_false")
+  g2 --> t8("ausnahme_bei_isvalid_liefert_false")
+  root --> g3["LayerIsUsableTests (3)"]
+  class g3 groupnode
+  g3 --> t9("none_ist_nicht_nutzbar")
+  g3 --> t10("gueltiger_layer_ist_nutzbar")
+  g3 --> t11("ungueltiger_layer_ist_nicht_nutzbar")
   class t1 ok
   class t2 ok
   class t3 ok
@@ -615,11 +620,14 @@
   class t6 ok
   class t7 ok
   class t8 ok
+  class t9 ok
+  class t10 ok
+  class t11 ok
   classDef rootnode fill:#1f4038,stroke:#16302a,stroke-width:1px,color:#f4f1e8,font-weight:600;
   classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
   classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
   classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
-  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
LayerIsValidTests
test_none_ist_nicht_gueltig
Prüft, dass layer_is_valid für None False liefert.grünnie geprüft
LayerIsValidTests
test_objekt_ohne_isvalid_ist_nicht_gueltig
Prüft, dass ein Objekt ohne isValid()-Methode als ungültig gilt.grünnie geprüft
LayerIsValidTests
test_gueltiger_layer_liefert_true
Prüft, dass ein Layer mit isValid()==True als gültig erkannt wird.grünnie geprüft
LayerIsValidTests
test_ungueltiger_layer_liefert_false
Prüft, dass ein Layer mit isValid()==False als ungültig erkannt wird.grünnie geprüft
LayerIsValidTests
test_ausnahme_bei_isvalid_liefert_false
Prüft, dass eine Ausnahme in isValid() abgefangen wird und False liefert.grünnie geprüft
LayerIsUsableTests
test_none_ist_nicht_nutzbar
Prüft, dass layer_is_usable für None False liefert.grünnie geprüft
LayerIsUsableTests
test_gueltiger_layer_ist_nutzbar
Prüft, dass ein vorhandener, gültiger Layer als nutzbar gilt.grünnie geprüft
LayerIsUsableTests
test_ungueltiger_layer_ist_nicht_nutzbar
Prüft, dass ein vorhandener, aber ungültiger Layer als nicht nutzbar gilt.grünnie geprüft

Tests für sn_basis/functions/ly_style_wrapper.py::apply_style_from_path (Issue #65).

ApplyStyleFromPathTests 4
flowchart TD
+  classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;
TestfallprüftStatusgeprüft
LayerExistsTests
test_none_existiert_nicht
Prüft, dass layer_exists für None False liefert.grüngeprüft am 2026-09-23
LayerExistsTests
test_vorhandenes_objekt_existiert
Prüft, dass layer_exists für ein vorhandenes Layer-Objekt True liefert.grüngeprüft am 2026-09-23
LayerExistsTests
test_ungueltiger_layer_existiert_trotzdem
Prüft, dass layer_exists die Gültigkeit nicht bewertet: ein ungültiger Layer gilt als vorhanden.grüngeprüft am 2026-09-23
LayerIsValidTests
test_none_ist_nicht_gueltig
Prüft, dass layer_is_valid für None False liefert.grüngeprüft am 2026-09-23
LayerIsValidTests
test_objekt_ohne_isvalid_ist_nicht_gueltig
Prüft, dass ein Objekt ohne isValid()-Methode als ungültig gilt.grüngeprüft am 2026-09-23
LayerIsValidTests
test_gueltiger_layer_liefert_true
Prüft, dass ein Layer mit isValid()==True als gültig erkannt wird.grüngeprüft am 2026-09-23
LayerIsValidTests
test_ungueltiger_layer_liefert_false
Prüft, dass ein Layer mit isValid()==False als ungültig erkannt wird.grüngeprüft am 2026-09-23
LayerIsValidTests
test_ausnahme_bei_isvalid_liefert_false
Prüft, dass eine Ausnahme in isValid() abgefangen wird und False liefert.grüngeprüft am 2026-09-23
LayerIsUsableTests
test_none_ist_nicht_nutzbar
Prüft, dass layer_is_usable für None False liefert.grüngeprüft am 2026-09-23
LayerIsUsableTests
test_gueltiger_layer_ist_nutzbar
Prüft, dass ein vorhandener, gültiger Layer als nutzbar gilt.grüngeprüft am 2026-09-23
LayerIsUsableTests
test_ungueltiger_layer_ist_nicht_nutzbar
Prüft, dass ein vorhandener, aber ungültiger Layer als nicht nutzbar gilt.grüngeprüft am 2026-09-23

Tests für sn_basis/functions/ly_style_wrapper.py::apply_style_from_path (Issue #65).

ApplyStyleFromPathTests 4
flowchart TD
   root(["test_ly_style_wrapper.py"])
   class root rootnode
   root --> g1["ApplyStyleFromPathTests (4)"]
diff --git a/docs/tests/testkatalog.md b/docs/tests/testkatalog.md
index 29b3256..bf6bafc 100644
--- a/docs/tests/testkatalog.md
+++ b/docs/tests/testkatalog.md
@@ -8,21 +8,21 @@ für die fachliche Frage, ob die Abdeckung sinnvoll ist. Die Angaben stammen aus
 selbst (Docstrings) und aus der Testbaseline.
 
 Stand der Baseline: `docs/status/testbaseline.json` (SHA-256 `aeabc946a7f3`)
-Stand des Prüf-Audits: `docs/status/testpruefungen.json` (SHA-256 `2f7e27c76ee7`)
+Stand des Prüf-Audits: `docs/status/testpruefungen.json` (SHA-256 `4d0c4430fa9f`)
 
-Gesamt: 3 Pakete, 49 Testdateien, 592 Testfälle – 549 grün, 35 rot (Baseline), 8 übersprungen.
-Mit Beschreibung (Docstring): 447 von 592 (76 %).
-Fachlich geprüft: 160 von 592 (27 %) aktuell, 0 veraltet seit Codeänderung, 432 nie geprüft.
+Gesamt: 3 Pakete, 49 Testdateien, 595 Testfälle – 552 grün, 35 rot (Baseline), 8 übersprungen.
+Mit Beschreibung (Docstring): 450 von 595 (76 %).
+Fachlich geprüft: 171 von 595 (29 %) aktuell, 0 veraltet seit Codeänderung, 424 nie geprüft.
 Strukturelle Lücken (heuristisch, Namensabgleich): 145 von 413 (35 %) Funktionen/Methoden ohne erkennbaren Testbezug – Abschnitt „Ungetestete Funktionen“.
 
 ## Zusammenfassung
 
 | Paket | Testdateien | Testfälle | grün | rot (Baseline) | übersprungen | mit Beschreibung | fachlich geprüft | ohne Testbezug |
 | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
-| `sn_basis` | 32 | 340 | 340 | 0 | 0 | 340 von 340 (100 %) | 160 von 340 (47 %) | 72 von 229 (31 %) |
+| `sn_basis` | 32 | 343 | 343 | 0 | 0 | 343 von 343 (100 %) | 171 von 343 (50 %) | 72 von 229 (31 %) |
 | `sn_verfahrensgebiet` | 12 | 208 | 166 | 34 | 8 | 106 von 208 (51 %) | 0 von 208 (0 %) | 34 von 104 (33 %) |
 | `sn_plan41` | 5 | 44 | 43 | 1 | 0 | 1 von 44 (2 %) | 0 von 44 (0 %) | 39 von 80 (49 %) |
-| **Summe** | **49** | **592** | **549** | **35** | **8** | **447 von 592 (76 %)** | **160 von 592 (27 %)** | **145 von 413 (35 %)** |
+| **Summe** | **49** | **595** | **552** | **35** | **8** | **450 von 595 (76 %)** | **171 von 595 (29 %)** | **145 von 413 (35 %)** |
 
 ### Legende
 
@@ -36,7 +36,7 @@ Strukturelle Lücken (heuristisch, Namensabgleich): 145 von 413 (35 %) Funktione
 
 ## Paket `sn_basis`
 
-Plattform-Plugin, Ordner `Plugin_SN_Basis` – 32 Testdateien mit 340 Testfällen (340 grün, 0 rot, 0 übersprungen).
+Plattform-Plugin, Ordner `Plugin_SN_Basis` – 32 Testdateien mit 343 Testfällen (343 grün, 0 rot, 0 übersprungen).
 
 ### `Plugin_SN_Basis/tests/test_base_dockwidget.py`
 
@@ -338,23 +338,27 @@ Testgruppen:
 
 ### `Plugin_SN_Basis/tests/test_ly_existence_wrapper.py`
 
-Worum es in der Datei geht: Tests für sn_basis/functions/ly_existence_wrapper.py::layer_is_valid/layer_is_usable (Issue #65).
+Worum es in der Datei geht: Tests für sn_basis/functions/ly_existence_wrapper.py::layer_exists/layer_is_valid/layer_is_usable (Issue #65, #76).
 
 Testgruppen:
 
+- `LayerExistsTests` (3 Testfälle): — (Docstring fehlt)
 - `LayerIsValidTests` (5 Testfälle): — (Docstring fehlt)
 - `LayerIsUsableTests` (3 Testfälle): — (Docstring fehlt)
 
 | Testfall | prüft | Status | geprüft |
 | --- | --- | --- | --- |
-| `LayerIsValidTests.test_none_ist_nicht_gueltig` | Prüft, dass layer_is_valid für None False liefert. | grün | nie geprüft |
-| `LayerIsValidTests.test_objekt_ohne_isvalid_ist_nicht_gueltig` | Prüft, dass ein Objekt ohne isValid()-Methode als ungültig gilt. | grün | nie geprüft |
-| `LayerIsValidTests.test_gueltiger_layer_liefert_true` | Prüft, dass ein Layer mit isValid()==True als gültig erkannt wird. | grün | nie geprüft |
-| `LayerIsValidTests.test_ungueltiger_layer_liefert_false` | Prüft, dass ein Layer mit isValid()==False als ungültig erkannt wird. | grün | nie geprüft |
-| `LayerIsValidTests.test_ausnahme_bei_isvalid_liefert_false` | Prüft, dass eine Ausnahme in isValid() abgefangen wird und False liefert. | grün | nie geprüft |
-| `LayerIsUsableTests.test_none_ist_nicht_nutzbar` | Prüft, dass layer_is_usable für None False liefert. | grün | nie geprüft |
-| `LayerIsUsableTests.test_gueltiger_layer_ist_nutzbar` | Prüft, dass ein vorhandener, gültiger Layer als nutzbar gilt. | grün | nie geprüft |
-| `LayerIsUsableTests.test_ungueltiger_layer_ist_nicht_nutzbar` | Prüft, dass ein vorhandener, aber ungültiger Layer als nicht nutzbar gilt. | grün | nie geprüft |
+| `LayerExistsTests.test_none_existiert_nicht` | Prüft, dass layer_exists für None False liefert. | grün | geprüft am 2026-09-23 |
+| `LayerExistsTests.test_vorhandenes_objekt_existiert` | Prüft, dass layer_exists für ein vorhandenes Layer-Objekt True liefert. | grün | geprüft am 2026-09-23 |
+| `LayerExistsTests.test_ungueltiger_layer_existiert_trotzdem` | Prüft, dass layer_exists die Gültigkeit nicht bewertet: ein ungültiger Layer gilt als vorhanden. | grün | geprüft am 2026-09-23 |
+| `LayerIsValidTests.test_none_ist_nicht_gueltig` | Prüft, dass layer_is_valid für None False liefert. | grün | geprüft am 2026-09-23 |
+| `LayerIsValidTests.test_objekt_ohne_isvalid_ist_nicht_gueltig` | Prüft, dass ein Objekt ohne isValid()-Methode als ungültig gilt. | grün | geprüft am 2026-09-23 |
+| `LayerIsValidTests.test_gueltiger_layer_liefert_true` | Prüft, dass ein Layer mit isValid()==True als gültig erkannt wird. | grün | geprüft am 2026-09-23 |
+| `LayerIsValidTests.test_ungueltiger_layer_liefert_false` | Prüft, dass ein Layer mit isValid()==False als ungültig erkannt wird. | grün | geprüft am 2026-09-23 |
+| `LayerIsValidTests.test_ausnahme_bei_isvalid_liefert_false` | Prüft, dass eine Ausnahme in isValid() abgefangen wird und False liefert. | grün | geprüft am 2026-09-23 |
+| `LayerIsUsableTests.test_none_ist_nicht_nutzbar` | Prüft, dass layer_is_usable für None False liefert. | grün | geprüft am 2026-09-23 |
+| `LayerIsUsableTests.test_gueltiger_layer_ist_nutzbar` | Prüft, dass ein vorhandener, gültiger Layer als nutzbar gilt. | grün | geprüft am 2026-09-23 |
+| `LayerIsUsableTests.test_ungueltiger_layer_ist_nicht_nutzbar` | Prüft, dass ein vorhandener, aber ungültiger Layer als nicht nutzbar gilt. | grün | geprüft am 2026-09-23 |
 
 ### `Plugin_SN_Basis/tests/test_ly_style_wrapper.py`
 
@@ -1262,7 +1266,7 @@ Arbeitsliste: Diese Testfälle haben keinen Docstring; was sie fachlich prüfen,
 aus dem Quelltext erschließen. Jeder Eintrag braucht eine einzeilige Beschreibung im Testfall,
 dann verschwindet er hier von selbst.
 
-### `sn_basis` – 0 von 340 Testfällen ohne Beschreibung
+### `sn_basis` – 0 von 343 Testfällen ohne Beschreibung
 
 Keine Lücken.