Test-Audit sn_basis fortgesetzt: ly_existence_wrapper.py fachlich geprüft (#76)

11 Testfälle fachlich geprüft und markiert: test_ly_existence_wrapper.py komplett
(inkl. 3 neuer Tests für layer_exists). Dabei gefunden und in Plugin_SN_Basis als
Issues vorbereitet (Absenden durch den Menschen): layer_is_valid/layer_is_usable
haben keinen Aufrufer, isValid() wird rund 20-mal direkt aufgerufen (nutzen oder
entfernen); Layerpruefer lässt ungültige Layer im Existenz-Schritt durch.

Testkatalog neu erzeugt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-23 09:08:48 +02:00
co-authored by Claude Opus 5.5
parent 94ab55923d
commit 3a872737a7
3 changed files with 93 additions and 37 deletions
+44
View File
@@ -547,6 +547,50 @@
"datum": "2026-09-17", "datum": "2026-09-17",
"hash": "67e86095b7ad" "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": { "sn_basis.tests.test_pruefmanager.TestPruefmanager.test_datei_existiert_append": {
"datum": "2026-09-17", "datum": "2026-09-17",
"hash": "25e169c45423" "hash": "25e169c45423"
+28 -20
View File
@@ -123,24 +123,24 @@
<div class="topbar"><div class="brand"><h1>Prüfstand</h1> <div class="topbar"><div class="brand"><h1>Prüfstand</h1>
<span class="tagline">Testkatalog der sn_*-Plugins — was die Suite heute prüft, auf einen Blick.</span></div> <span class="tagline">Testkatalog der sn_*-Plugins — was die Suite heute prüft, auf einen Blick.</span></div>
<div class="meta-line">Quelle: <b>docs/tests/testkatalog.md</b><br>Baseline: <span class="mono">docs/status/testbaseline.json</span> (SHA-256 aeabc946a7f3)<br>Prüf-Audit: <span class="mono">docs/status/testpruefungen.json</span> (SHA-256 2f7e27c76ee7)</div></div> <div class="meta-line">Quelle: <b>docs/tests/testkatalog.md</b><br>Baseline: <span class="mono">docs/status/testbaseline.json</span> (SHA-256 aeabc946a7f3)<br>Prüf-Audit: <span class="mono">docs/status/testpruefungen.json</span> (SHA-256 4d0c4430fa9f)</div></div>
<div class="summary"> <div class="summary">
<div class="stat"><span class="n">592</span><span class="l">Testfälle</span></div> <div class="stat"><span class="n">595</span><span class="l">Testfälle</span></div>
<div class="stat ok"><span class="n">549</span><span class="l">grün</span></div> <div class="stat ok"><span class="n">552</span><span class="l">grün</span></div>
<div class="stat warn"><span class="n">35</span><span class="l">rot (Baseline)</span></div> <div class="stat warn"><span class="n">35</span><span class="l">rot (Baseline)</span></div>
<div class="stat skip"><span class="n">8</span><span class="l">übersprungen</span></div> <div class="stat skip"><span class="n">8</span><span class="l">übersprungen</span></div>
<div class="stat"><span class="n">76%</span><span class="l">mit Docstring</span></div> <div class="stat"><span class="n">76%</span><span class="l">mit Docstring</span></div>
<div class="stat"><span class="n">27%</span><span class="l">aktuell geprüft</span></div> <div class="stat"><span class="n">29%</span><span class="l">aktuell geprüft</span></div>
<div class="stat"><span class="n">49</span><span class="l">Testdateien</span></div> <div class="stat"><span class="n">49</span><span class="l">Testdateien</span></div>
<div class="stat warn"><span class="n">35%</span><span class="l">ohne Testbezug</span></div> <div class="stat warn"><span class="n">35%</span><span class="l">ohne Testbezug</span></div>
</div> </div>
<div class="pkg-bars"><div class="pkg-bars-title">Verteilung je Paket</div> <div class="pkg-bars"><div class="pkg-bars-title">Verteilung je Paket</div>
<div class="pkg-bar-row"><span class="name">sn_basis</span><span class="minibar" role="img" aria-label="340 grün, 0 rot, 0 übersprungen"><span class="seg seg-ok" style="width:100%"></span><span class="seg seg-warn" style="width:0%"></span><span class="seg seg-skip" style="width:0%"></span></span><span class="count">32 Dateien · 340 Testfälle</span></div> <div class="pkg-bar-row"><span class="name">sn_basis</span><span class="minibar" role="img" aria-label="343 grün, 0 rot, 0 übersprungen"><span class="seg seg-ok" style="width:100%"></span><span class="seg seg-warn" style="width:0%"></span><span class="seg seg-skip" style="width:0%"></span></span><span class="count">32 Dateien · 343 Testfälle</span></div>
<div class="pkg-bar-row"><span class="name">sn_verfahrensgebiet</span><span class="minibar" role="img" aria-label="166 grün, 34 rot, 8 übersprungen"><span class="seg seg-ok" style="width:80%"></span><span class="seg seg-warn" style="width:16%"></span><span class="seg seg-skip" style="width:4%"></span></span><span class="count">12 Dateien · 208 Testfälle</span></div> <div class="pkg-bar-row"><span class="name">sn_verfahrensgebiet</span><span class="minibar" role="img" aria-label="166 grün, 34 rot, 8 übersprungen"><span class="seg seg-ok" style="width:80%"></span><span class="seg seg-warn" style="width:16%"></span><span class="seg seg-skip" style="width:4%"></span></span><span class="count">12 Dateien · 208 Testfälle</span></div>
<div class="pkg-bar-row"><span class="name">sn_plan41</span><span class="minibar" role="img" aria-label="43 grün, 1 rot, 0 übersprungen"><span class="seg seg-ok" style="width:98%"></span><span class="seg seg-warn" style="width:2%"></span><span class="seg seg-skip" style="width:0%"></span></span><span class="count">5 Dateien · 44 Testfälle</span></div> <div class="pkg-bar-row"><span class="name">sn_plan41</span><span class="minibar" role="img" aria-label="43 grün, 1 rot, 0 übersprungen"><span class="seg seg-ok" style="width:98%"></span><span class="seg seg-warn" style="width:2%"></span><span class="seg seg-skip" style="width:0%"></span></span><span class="count">5 Dateien · 44 Testfälle</span></div>
</div> </div>
<div class="controls"><nav class="nav-links"> <div class="controls"><nav class="nav-links">
<a href="#pkg-sn_basis">sn_basis <span class="mono">(340)</span></a> <a href="#pkg-sn_basis">sn_basis <span class="mono">(343)</span></a>
<a href="#pkg-sn_verfahrensgebiet">sn_verfahrensgebiet <span class="mono">(208)</span></a> <a href="#pkg-sn_verfahrensgebiet">sn_verfahrensgebiet <span class="mono">(208)</span></a>
<a href="#pkg-sn_plan41">sn_plan41 <span class="mono">(44)</span></a> <a href="#pkg-sn_plan41">sn_plan41 <span class="mono">(44)</span></a>
</nav><div class="filters"> </nav><div class="filters">
@@ -159,11 +159,11 @@
<h2>sn_basis</h2> <h2>sn_basis</h2>
<p class="pkg-sub">Plattform-Plugin · Ordner <span class="mono">Plugin_SN_Basis</span></p> <p class="pkg-sub">Plattform-Plugin · Ordner <span class="mono">Plugin_SN_Basis</span></p>
</div> </div>
<div class="pkg-bar" role="img" aria-label="340 grün, 0 rot, 0 übersprungen"> <div class="pkg-bar" role="img" aria-label="343 grün, 0 rot, 0 übersprungen">
<span class="seg seg-ok" style="width:100%"></span><span class="seg seg-warn" style="width:0%"></span><span class="seg seg-skip" style="width:0%"></span> <span class="seg seg-ok" style="width:100%"></span><span class="seg seg-warn" style="width:0%"></span><span class="seg seg-skip" style="width:0%"></span>
</div> </div>
</div> </div>
<div class="pkg-summary"><div class="stat stat-sm"><span class="n">32</span><span class="l">Testdateien</span></div><div class="stat stat-sm"><span class="n">340</span><span class="l">Testfälle</span></div><div class="stat stat-sm ok"><span class="n">340</span><span class="l">grün</span></div><div class="stat stat-sm warn"><span class="n">0</span><span class="l">rot (Baseline)</span></div><div class="stat stat-sm skip"><span class="n">0</span><span class="l">übersprungen</span></div><div class="stat stat-sm"><span class="n">100%</span><span class="l">mit Docstring</span></div><div class="stat stat-sm"><span class="n">47%</span><span class="l">geprüft</span></div><div class="stat stat-sm"><span class="n">72</span><span class="l">ohne Testbezug</span></div></div> <div class="pkg-summary"><div class="stat stat-sm"><span class="n">32</span><span class="l">Testdateien</span></div><div class="stat stat-sm"><span class="n">343</span><span class="l">Testfälle</span></div><div class="stat stat-sm ok"><span class="n">343</span><span class="l">grün</span></div><div class="stat stat-sm warn"><span class="n">0</span><span class="l">rot (Baseline)</span></div><div class="stat stat-sm skip"><span class="n">0</span><span class="l">übersprungen</span></div><div class="stat stat-sm"><span class="n">100%</span><span class="l">mit Docstring</span></div><div class="stat stat-sm"><span class="n">50%</span><span class="l">geprüft</span></div><div class="stat stat-sm"><span class="n">72</span><span class="l">ohne Testbezug</span></div></div>
<div class="card-grid"><article class="filecard" data-search="plugin_sn_basis/tests/test_base_dockwidget.py closeeventtests test_ruft_cleanup_aller_tabs_auf closeeventtests test_ignoriert_tabs_ohne_cleanup closeeventtests test_fehler_in_cleanup_wird_abgefangen_und_andere_tabs_laufen_weiter closeeventtests test_setzt_toolbar_action_zurueck closeeventtests test_ohne_action_wird_nichts_zurueckgesetzt" data-hasred="0" data-hasskip="0" data-nodoc="0" data-ungeprueft="0" data-veraltet="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-base-dockwidget-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_base_dockwidget.py</span><span class="card-meta"><span class="count-total">5 Testfälle</span><span class="cpill cpill-ok">5</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="auditbadge" title="Anteil fachlich aktuell geprüft">100% geprüft</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-base-dockwidget-py"><p class="filedesc">Tests für sn_basis/ui/base_dockwidget.py::closeEvent (Issue #65).</p><div class="gchips"><span class="gchip" title="">CloseEventTests <b>5</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD <div class="card-grid"><article class="filecard" data-search="plugin_sn_basis/tests/test_base_dockwidget.py closeeventtests test_ruft_cleanup_aller_tabs_auf closeeventtests test_ignoriert_tabs_ohne_cleanup closeeventtests test_fehler_in_cleanup_wird_abgefangen_und_andere_tabs_laufen_weiter closeeventtests test_setzt_toolbar_action_zurueck closeeventtests test_ohne_action_wird_nichts_zurueckgesetzt" data-hasred="0" data-hasskip="0" data-nodoc="0" data-ungeprueft="0" data-veraltet="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-base-dockwidget-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_base_dockwidget.py</span><span class="card-meta"><span class="count-total">5 Testfälle</span><span class="cpill cpill-ok">5</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="auditbadge" title="Anteil fachlich aktuell geprüft">100% geprüft</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-base-dockwidget-py"><p class="filedesc">Tests für sn_basis/ui/base_dockwidget.py::closeEvent (Issue #65).</p><div class="gchips"><span class="gchip" title="">CloseEventTests <b>5</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
root([&quot;test_base_dockwidget.py&quot;]) root([&quot;test_base_dockwidget.py&quot;])
class root rootnode class root rootnode
@@ -592,21 +592,26 @@
classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420; classDef groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20; classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08; classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;</pre></div><table class="test-table"><thead><tr><th>Testfall</th><th>prüft</th><th>Status</th><th>geprüft</th></tr></thead><tbody><tr><td class="mono">TestLinkpruefer<br><span class="testname">test_leere_eingabe</span></td><td>Prüft, dass eine leere Eingabe ohne Netzwerk-/Dateizugriff als &#x27;leer&#x27; abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-17</span></td></tr><tr><td class="mono">TestLinkpruefer<br><span class="testname">test_remote_link_ok</span></td><td>Prüft, dass eine erreichbare Remote-URL (HTTP HEAD ohne Fehler) als &#x27;ok&#x27; bestätigt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-17</span></td></tr><tr><td class="mono">TestLinkpruefer<br><span class="testname">test_remote_link_error</span></td><td>Prüft, dass eine Remote-URL mit Fehlerantwort als &#x27;url_nicht_erreichbar&#x27; abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-17</span></td></tr><tr><td class="mono">TestLinkpruefer<br><span class="testname">test_remote_link_network_error</span></td><td>Prüft, dass eine ausbleibende Netzwerkantwort (None) als &#x27;netzwerkfehler&#x27; gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-17</span></td></tr><tr><td class="mono">TestLinkpruefer<br><span class="testname">test_local_link_not_found</span></td><td>Prüft, dass ein nicht existierender lokaler Pfad als &#x27;pfad_nicht_gefunden&#x27; abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-17</span></td></tr><tr><td class="mono">TestLinkpruefer<br><span class="testname">test_local_link_ok</span></td><td>Prüft, dass ein existierender lokaler Pfad als &#x27;ok&#x27; bestätigt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-17</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_ly_existence_wrapper.py layerisvalidtests test_none_ist_nicht_gueltig layerisvalidtests test_objekt_ohne_isvalid_ist_nicht_gueltig layerisvalidtests test_gueltiger_layer_liefert_true layerisvalidtests test_ungueltiger_layer_liefert_false layerisvalidtests test_ausnahme_bei_isvalid_liefert_false layerisusabletests test_none_ist_nicht_nutzbar layerisusabletests test_gueltiger_layer_ist_nutzbar layerisusabletests test_ungueltiger_layer_ist_nicht_nutzbar" data-hasred="0" data-hasskip="0" data-nodoc="0" data-ungeprueft="1" data-veraltet="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-ly-existence-wrapper-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_ly_existence_wrapper.py</span><span class="card-meta"><span class="count-total">8 Testfälle</span><span class="cpill cpill-ok">8</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="auditbadge" title="Anteil fachlich aktuell geprüft">0% geprüft</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-ly-existence-wrapper-py"><p class="filedesc">Tests für sn_basis/functions/ly_existence_wrapper.py::layer_is_valid/layer_is_usable (Issue #65).</p><div class="gchips"><span class="gchip" title="">LayerIsValidTests <b>5</b></span><span class="gchip" title="">LayerIsUsableTests <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;</pre></div><table class="test-table"><thead><tr><th>Testfall</th><th>prüft</th><th>Status</th><th>geprüft</th></tr></thead><tbody><tr><td class="mono">TestLinkpruefer<br><span class="testname">test_leere_eingabe</span></td><td>Prüft, dass eine leere Eingabe ohne Netzwerk-/Dateizugriff als &#x27;leer&#x27; abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-17</span></td></tr><tr><td class="mono">TestLinkpruefer<br><span class="testname">test_remote_link_ok</span></td><td>Prüft, dass eine erreichbare Remote-URL (HTTP HEAD ohne Fehler) als &#x27;ok&#x27; bestätigt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-17</span></td></tr><tr><td class="mono">TestLinkpruefer<br><span class="testname">test_remote_link_error</span></td><td>Prüft, dass eine Remote-URL mit Fehlerantwort als &#x27;url_nicht_erreichbar&#x27; abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-17</span></td></tr><tr><td class="mono">TestLinkpruefer<br><span class="testname">test_remote_link_network_error</span></td><td>Prüft, dass eine ausbleibende Netzwerkantwort (None) als &#x27;netzwerkfehler&#x27; gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-17</span></td></tr><tr><td class="mono">TestLinkpruefer<br><span class="testname">test_local_link_not_found</span></td><td>Prüft, dass ein nicht existierender lokaler Pfad als &#x27;pfad_nicht_gefunden&#x27; abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-17</span></td></tr><tr><td class="mono">TestLinkpruefer<br><span class="testname">test_local_link_ok</span></td><td>Prüft, dass ein existierender lokaler Pfad als &#x27;ok&#x27; bestätigt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-17</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_ly_existence_wrapper.py layerexiststests test_none_existiert_nicht layerexiststests test_vorhandenes_objekt_existiert layerexiststests test_ungueltiger_layer_existiert_trotzdem layerisvalidtests test_none_ist_nicht_gueltig layerisvalidtests test_objekt_ohne_isvalid_ist_nicht_gueltig layerisvalidtests test_gueltiger_layer_liefert_true layerisvalidtests test_ungueltiger_layer_liefert_false layerisvalidtests test_ausnahme_bei_isvalid_liefert_false layerisusabletests test_none_ist_nicht_nutzbar layerisusabletests test_gueltiger_layer_ist_nutzbar layerisusabletests test_ungueltiger_layer_ist_nicht_nutzbar" data-hasred="0" data-hasskip="0" data-nodoc="0" data-ungeprueft="0" data-veraltet="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-ly-existence-wrapper-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_ly_existence_wrapper.py</span><span class="card-meta"><span class="count-total">11 Testfälle</span><span class="cpill cpill-ok">11</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="auditbadge" title="Anteil fachlich aktuell geprüft">100% geprüft</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-ly-existence-wrapper-py"><p class="filedesc">Tests für sn_basis/functions/ly_existence_wrapper.py::layer_exists/layer_is_valid/layer_is_usable (Issue #65, #76).</p><div class="gchips"><span class="gchip" title="">LayerExistsTests <b>3</b></span><span class="gchip" title="">LayerIsValidTests <b>5</b></span><span class="gchip" title="">LayerIsUsableTests <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
root([&quot;test_ly_existence_wrapper.py&quot;]) root([&quot;test_ly_existence_wrapper.py&quot;])
class root rootnode class root rootnode
root --&gt; g1[&quot;LayerIsValidTests (5)&quot;] root --&gt; g1[&quot;LayerExistsTests (3)&quot;]
class g1 groupnode class g1 groupnode
g1 --&gt; t1(&quot;none_ist_nicht_gueltig&quot;) g1 --&gt; t1(&quot;none_existiert_nicht&quot;)
g1 --&gt; t2(&quot;objekt_ohne_isvalid_ist_nicht_gueltig&quot;) g1 --&gt; t2(&quot;vorhandenes_objekt_existiert&quot;)
g1 --&gt; t3(&quot;gueltiger_layer_liefert_true&quot;) g1 --&gt; t3(&quot;ungueltiger_layer_existiert_trotzdem&quot;)
g1 --&gt; t4(&quot;ungueltiger_layer_liefert_false&quot;) root --&gt; g2[&quot;LayerIsValidTests (5)&quot;]
g1 --&gt; t5(&quot;ausnahme_bei_isvalid_liefert_false&quot;)
root --&gt; g2[&quot;LayerIsUsableTests (3)&quot;]
class g2 groupnode class g2 groupnode
g2 --&gt; t6(&quot;none_ist_nicht_nutzbar&quot;) g2 --&gt; t4(&quot;none_ist_nicht_gueltig&quot;)
g2 --&gt; t7(&quot;gueltiger_layer_ist_nutzbar&quot;) g2 --&gt; t5(&quot;objekt_ohne_isvalid_ist_nicht_gueltig&quot;)
g2 --&gt; t8(&quot;ungueltiger_layer_ist_nicht_nutzbar&quot;) g2 --&gt; t6(&quot;gueltiger_layer_liefert_true&quot;)
g2 --&gt; t7(&quot;ungueltiger_layer_liefert_false&quot;)
g2 --&gt; t8(&quot;ausnahme_bei_isvalid_liefert_false&quot;)
root --&gt; g3[&quot;LayerIsUsableTests (3)&quot;]
class g3 groupnode
g3 --&gt; t9(&quot;none_ist_nicht_nutzbar&quot;)
g3 --&gt; t10(&quot;gueltiger_layer_ist_nutzbar&quot;)
g3 --&gt; t11(&quot;ungueltiger_layer_ist_nicht_nutzbar&quot;)
class t1 ok class t1 ok
class t2 ok class t2 ok
class t3 ok class t3 ok
@@ -615,11 +620,14 @@
class t6 ok class t6 ok
class t7 ok class t7 ok
class t8 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 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 groupnode fill:#cfe0da,stroke:#5c8a7d,stroke-width:1px,color:#152420;
classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20; classDef ok fill:#dcefdc,stroke:#3f7d4a,stroke-width:1px,color:#1c3a20;
classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08; classDef warn fill:#f6ead9,stroke:#b5722a,stroke-width:1px,color:#4a2c08;
classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;</pre></div><table class="test-table"><thead><tr><th>Testfall</th><th>prüft</th><th>Status</th><th>geprüft</th></tr></thead><tbody><tr><td class="mono">LayerIsValidTests<br><span class="testname">test_none_ist_nicht_gueltig</span></td><td>Prüft, dass layer_is_valid für None False liefert.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-skip">nie geprüft</span></td></tr><tr><td class="mono">LayerIsValidTests<br><span class="testname">test_objekt_ohne_isvalid_ist_nicht_gueltig</span></td><td>Prüft, dass ein Objekt ohne isValid()-Methode als ungültig gilt.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-skip">nie geprüft</span></td></tr><tr><td class="mono">LayerIsValidTests<br><span class="testname">test_gueltiger_layer_liefert_true</span></td><td>Prüft, dass ein Layer mit isValid()==True als gültig erkannt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-skip">nie geprüft</span></td></tr><tr><td class="mono">LayerIsValidTests<br><span class="testname">test_ungueltiger_layer_liefert_false</span></td><td>Prüft, dass ein Layer mit isValid()==False als ungültig erkannt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-skip">nie geprüft</span></td></tr><tr><td class="mono">LayerIsValidTests<br><span class="testname">test_ausnahme_bei_isvalid_liefert_false</span></td><td>Prüft, dass eine Ausnahme in isValid() abgefangen wird und False liefert.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-skip">nie geprüft</span></td></tr><tr><td class="mono">LayerIsUsableTests<br><span class="testname">test_none_ist_nicht_nutzbar</span></td><td>Prüft, dass layer_is_usable für None False liefert.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-skip">nie geprüft</span></td></tr><tr><td class="mono">LayerIsUsableTests<br><span class="testname">test_gueltiger_layer_ist_nutzbar</span></td><td>Prüft, dass ein vorhandener, gültiger Layer als nutzbar gilt.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-skip">nie geprüft</span></td></tr><tr><td class="mono">LayerIsUsableTests<br><span class="testname">test_ungueltiger_layer_ist_nicht_nutzbar</span></td><td>Prüft, dass ein vorhandener, aber ungültiger Layer als nicht nutzbar gilt.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-skip">nie geprüft</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_ly_style_wrapper.py applystylefrompathtests test_fehlender_layer_liefert_false applystylefrompathtests test_erfolgreiches_laden_liefert_true_und_triggert_repaint applystylefrompathtests test_fehlgeschlagenes_laden_liefert_false_ohne_repaint applystylefrompathtests test_ausnahme_beim_laden_wird_abgefangen" data-hasred="0" data-hasskip="0" data-nodoc="0" data-ungeprueft="1" data-veraltet="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-ly-style-wrapper-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_ly_style_wrapper.py</span><span class="card-meta"><span class="count-total">4 Testfälle</span><span class="cpill cpill-ok">4</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="auditbadge" title="Anteil fachlich aktuell geprüft">0% geprüft</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-ly-style-wrapper-py"><p class="filedesc">Tests für sn_basis/functions/ly_style_wrapper.py::apply_style_from_path (Issue #65).</p><div class="gchips"><span class="gchip" title="">ApplyStyleFromPathTests <b>4</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD classDef skip fill:#e6e6ee,stroke:#6f7285,stroke-width:1px,color:#2b2d38;</pre></div><table class="test-table"><thead><tr><th>Testfall</th><th>prüft</th><th>Status</th><th>geprüft</th></tr></thead><tbody><tr><td class="mono">LayerExistsTests<br><span class="testname">test_none_existiert_nicht</span></td><td>Prüft, dass layer_exists für None False liefert.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-23</span></td></tr><tr><td class="mono">LayerExistsTests<br><span class="testname">test_vorhandenes_objekt_existiert</span></td><td>Prüft, dass layer_exists für ein vorhandenes Layer-Objekt True liefert.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-23</span></td></tr><tr><td class="mono">LayerExistsTests<br><span class="testname">test_ungueltiger_layer_existiert_trotzdem</span></td><td>Prüft, dass layer_exists die Gültigkeit nicht bewertet: ein ungültiger Layer gilt als vorhanden.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-23</span></td></tr><tr><td class="mono">LayerIsValidTests<br><span class="testname">test_none_ist_nicht_gueltig</span></td><td>Prüft, dass layer_is_valid für None False liefert.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-23</span></td></tr><tr><td class="mono">LayerIsValidTests<br><span class="testname">test_objekt_ohne_isvalid_ist_nicht_gueltig</span></td><td>Prüft, dass ein Objekt ohne isValid()-Methode als ungültig gilt.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-23</span></td></tr><tr><td class="mono">LayerIsValidTests<br><span class="testname">test_gueltiger_layer_liefert_true</span></td><td>Prüft, dass ein Layer mit isValid()==True als gültig erkannt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-23</span></td></tr><tr><td class="mono">LayerIsValidTests<br><span class="testname">test_ungueltiger_layer_liefert_false</span></td><td>Prüft, dass ein Layer mit isValid()==False als ungültig erkannt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-23</span></td></tr><tr><td class="mono">LayerIsValidTests<br><span class="testname">test_ausnahme_bei_isvalid_liefert_false</span></td><td>Prüft, dass eine Ausnahme in isValid() abgefangen wird und False liefert.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-23</span></td></tr><tr><td class="mono">LayerIsUsableTests<br><span class="testname">test_none_ist_nicht_nutzbar</span></td><td>Prüft, dass layer_is_usable für None False liefert.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-23</span></td></tr><tr><td class="mono">LayerIsUsableTests<br><span class="testname">test_gueltiger_layer_ist_nutzbar</span></td><td>Prüft, dass ein vorhandener, gültiger Layer als nutzbar gilt.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-23</span></td></tr><tr><td class="mono">LayerIsUsableTests<br><span class="testname">test_ungueltiger_layer_ist_nicht_nutzbar</span></td><td>Prüft, dass ein vorhandener, aber ungültiger Layer als nicht nutzbar gilt.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-09-23</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_ly_style_wrapper.py applystylefrompathtests test_fehlender_layer_liefert_false applystylefrompathtests test_erfolgreiches_laden_liefert_true_und_triggert_repaint applystylefrompathtests test_fehlgeschlagenes_laden_liefert_false_ohne_repaint applystylefrompathtests test_ausnahme_beim_laden_wird_abgefangen" data-hasred="0" data-hasskip="0" data-nodoc="0" data-ungeprueft="1" data-veraltet="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-ly-style-wrapper-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_ly_style_wrapper.py</span><span class="card-meta"><span class="count-total">4 Testfälle</span><span class="cpill cpill-ok">4</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="auditbadge" title="Anteil fachlich aktuell geprüft">0% geprüft</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-ly-style-wrapper-py"><p class="filedesc">Tests für sn_basis/functions/ly_style_wrapper.py::apply_style_from_path (Issue #65).</p><div class="gchips"><span class="gchip" title="">ApplyStyleFromPathTests <b>4</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
root([&quot;test_ly_style_wrapper.py&quot;]) root([&quot;test_ly_style_wrapper.py&quot;])
class root rootnode class root rootnode
root --&gt; g1[&quot;ApplyStyleFromPathTests (4)&quot;] root --&gt; g1[&quot;ApplyStyleFromPathTests (4)&quot;]
+21 -17
View File
@@ -8,21 +8,21 @@ für die fachliche Frage, ob die Abdeckung sinnvoll ist. Die Angaben stammen aus
selbst (Docstrings) und aus der Testbaseline. selbst (Docstrings) und aus der Testbaseline.
Stand der Baseline: `docs/status/testbaseline.json` (SHA-256 `aeabc946a7f3`) 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. Gesamt: 3 Pakete, 49 Testdateien, 595 Testfälle – 552 grün, 35 rot (Baseline), 8 übersprungen.
Mit Beschreibung (Docstring): 447 von 592 (76 %). Mit Beschreibung (Docstring): 450 von 595 (76 %).
Fachlich geprüft: 160 von 592 (27 %) aktuell, 0 veraltet seit Codeänderung, 432 nie geprüft. 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“. Strukturelle Lücken (heuristisch, Namensabgleich): 145 von 413 (35 %) Funktionen/Methoden ohne erkennbaren Testbezug – Abschnitt „Ungetestete Funktionen“.
## Zusammenfassung ## Zusammenfassung
| Paket | Testdateien | Testfälle | grün | rot (Baseline) | übersprungen | mit Beschreibung | fachlich geprüft | ohne Testbezug | | 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_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 %) | | `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 ### Legende
@@ -36,7 +36,7 @@ Strukturelle Lücken (heuristisch, Namensabgleich): 145 von 413 (35 %) Funktione
## Paket `sn_basis` ## 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` ### `Plugin_SN_Basis/tests/test_base_dockwidget.py`
@@ -338,23 +338,27 @@ Testgruppen:
### `Plugin_SN_Basis/tests/test_ly_existence_wrapper.py` ### `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: Testgruppen:
- `LayerExistsTests` (3 Testfälle): — (Docstring fehlt)
- `LayerIsValidTests` (5 Testfälle): — (Docstring fehlt) - `LayerIsValidTests` (5 Testfälle): — (Docstring fehlt)
- `LayerIsUsableTests` (3 Testfälle): — (Docstring fehlt) - `LayerIsUsableTests` (3 Testfälle): — (Docstring fehlt)
| Testfall | prüft | Status | geprüft | | 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 | | `LayerExistsTests.test_none_existiert_nicht` | Prüft, dass layer_exists 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 | nie geprüft | | `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 |
| `LayerIsValidTests.test_gueltiger_layer_liefert_true` | Prüft, dass ein Layer mit isValid()==True als gültig erkannt wird. | grün | nie geprüft | | `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_ungueltiger_layer_liefert_false` | Prüft, dass ein Layer mit isValid()==False als ungültig erkannt wird. | grün | nie geprüft | | `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_ausnahme_bei_isvalid_liefert_false` | Prüft, dass eine Ausnahme in isValid() abgefangen wird und 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 | 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 | nie geprüft | | `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 |
| `LayerIsUsableTests.test_gueltiger_layer_ist_nutzbar` | Prüft, dass ein vorhandener, gültiger Layer als nutzbar gilt. | 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 | 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 | nie geprüft | | `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` ### `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, aus dem Quelltext erschließen. Jeder Eintrag braucht eine einzeilige Beschreibung im Testfall,
dann verschwindet er hier von selbst. 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. Keine Lücken.