Testkatalog: neuer Test für get_plugin_root()-Fix (Verfahrensgebiet #50)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-17 16:12:17 +02:00
co-authored by Claude Sonnet 5
parent 4f87684224
commit 4d036516a1
3 changed files with 44 additions and 17 deletions
+4
View File
@@ -214,5 +214,9 @@
"sn_basis.tests.test_stilpruefer.TestStilpruefer.test_keine_datei_angegeben": { "sn_basis.tests.test_stilpruefer.TestStilpruefer.test_keine_datei_angegeben": {
"datum": "2026-09-17", "datum": "2026-09-17",
"hash": "7a3d7bd800c3" "hash": "7a3d7bd800c3"
},
"sn_basis.tests.test_sys_wrapper.TestGetPluginRoot.test_get_plugin_root_folgt_keiner_verzeichnisverknuepfung": {
"datum": "2026-09-17",
"hash": "c9b434520d62"
} }
} }
+20 -9
View File
@@ -119,23 +119,23 @@
<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 0d643cd91110)</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 68b590c8feef)</div></div>
<div class="summary"> <div class="summary">
<div class="stat"><span class="n">346</span><span class="l">Testfälle</span></div> <div class="stat"><span class="n">347</span><span class="l">Testfälle</span></div>
<div class="stat ok"><span class="n">303</span><span class="l">grün</span></div> <div class="stat ok"><span class="n">304</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">58%</span><span class="l">mit Docstring</span></div> <div class="stat"><span class="n">58%</span><span class="l">mit Docstring</span></div>
<div class="stat"><span class="n">16%</span><span class="l">aktuell geprüft</span></div> <div class="stat"><span class="n">16%</span><span class="l">aktuell geprüft</span></div>
<div class="stat"><span class="n">31</span><span class="l">Testdateien</span></div> <div class="stat"><span class="n">32</span><span class="l">Testdateien</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="95 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">14 Dateien · 95 Testfälle</span></div> <div class="pkg-bar-row"><span class="name">sn_basis</span><span class="minibar" role="img" aria-label="96 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">15 Dateien · 96 Testfälle</span></div>
<div class="pkg-bar-row"><span class="name">sn_verfahrensgebiet</span><span class="minibar" role="img" aria-label="165 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 · 207 Testfälle</span></div> <div class="pkg-bar-row"><span class="name">sn_verfahrensgebiet</span><span class="minibar" role="img" aria-label="165 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 · 207 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">(95)</span></a> <a href="#pkg-sn_basis">sn_basis <span class="mono">(96)</span></a>
<a href="#pkg-sn_verfahrensgebiet">sn_verfahrensgebiet <span class="mono">(207)</span></a> <a href="#pkg-sn_verfahrensgebiet">sn_verfahrensgebiet <span class="mono">(207)</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">
@@ -152,9 +152,9 @@
<div class="pkg-head"> <div class="pkg-head">
<div> <div>
<h2>sn_basis</h2> <h2>sn_basis</h2>
<p class="pkg-sub">Plattform-Plugin · Ordner <span class="mono">Plugin_SN_Basis</span> · 14 Testdateien · 95 Testfälle</p> <p class="pkg-sub">Plattform-Plugin · Ordner <span class="mono">Plugin_SN_Basis</span> · 15 Testdateien · 96 Testfälle</p>
</div> </div>
<div class="pkg-bar" role="img" aria-label="95 grün, 0 rot, 0 übersprungen"> <div class="pkg-bar" role="img" aria-label="96 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>
@@ -402,7 +402,18 @@
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">TestStilpruefer<br><span class="testname">test_keine_datei_angegeben</span></td><td>Prüft, dass eine leere Pfadangabe als &#x27;ok&#x27; ohne Kontext akzeptiert wird (Stil ist optional).</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">TestStilpruefer<br><span class="testname">test_datei_existiert_mit_qml</span></td><td>Prüft, dass eine existierende .qml-Datei als &#x27;stil_anwendbar&#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">TestStilpruefer<br><span class="testname">test_datei_existiert_falsche_endung</span></td><td>Prüft, dass eine existierende Datei ohne .qml-Endung als &#x27;falsche_endung&#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">TestStilpruefer<br><span class="testname">test_datei_existiert_nicht</span></td><td>Prüft, dass ein nicht existierender .qml-Pfad als &#x27;datei_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></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_text_wrapper.py testsanitizebezeichner test_umlaute_bleiben_erhalten testsanitizebezeichner test_bindestrich_bleibt_erhalten testsanitizebezeichner test_unterstrich_bleibt_erhalten testsanitizebezeichner test_leerzeichen_wird_durch_ersatz_zusammengefasst testsanitizebezeichner test_fuehrender_und_folgender_ersatz_wird_entfernt testsanitizebezeichner test_eigenes_ersatzzeichen_wird_verwendet testsanitizebezeichner test_nur_unzulaessige_zeichen_ergibt_leeren_string" 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-text-wrapper-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_text_wrapper.py</span><span class="card-meta"><span class="count-total">7 Testfälle</span><span class="cpill cpill-ok">7</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-text-wrapper-py"><p class="filedesc">Unit-Tests für `sn_basis.functions.text_wrapper`.</p><div class="gchips"><span class="gchip" title="">TestSanitizeBezeichner <b>7</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">TestStilpruefer<br><span class="testname">test_keine_datei_angegeben</span></td><td>Prüft, dass eine leere Pfadangabe als &#x27;ok&#x27; ohne Kontext akzeptiert wird (Stil ist optional).</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">TestStilpruefer<br><span class="testname">test_datei_existiert_mit_qml</span></td><td>Prüft, dass eine existierende .qml-Datei als &#x27;stil_anwendbar&#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">TestStilpruefer<br><span class="testname">test_datei_existiert_falsche_endung</span></td><td>Prüft, dass eine existierende Datei ohne .qml-Endung als &#x27;falsche_endung&#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">TestStilpruefer<br><span class="testname">test_datei_existiert_nicht</span></td><td>Prüft, dass ein nicht existierender .qml-Pfad als &#x27;datei_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></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_sys_wrapper.py testgetpluginroot test_get_plugin_root_folgt_keiner_verzeichnisverknuepfung" 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-sys-wrapper-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_sys_wrapper.py</span><span class="card-meta"><span class="count-total">1 Testfälle</span><span class="cpill cpill-ok">1</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-sys-wrapper-py"><p class="filedesc">Unit-Tests für sn_basis.functions.sys_wrapper.get_plugin_root().</p><div class="gchips"><span class="gchip" title="">TestGetPluginRoot <b>1</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
root([&quot;test_sys_wrapper.py&quot;])
class root rootnode
root --&gt; g1[&quot;TestGetPluginRoot (1)&quot;]
class g1 groupnode
g1 --&gt; t1(&quot;get_plugin_root_folgt_keiner_verzeichnisverknuepfung&quot;)
class t1 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;</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">TestGetPluginRoot<br><span class="testname">test_get_plugin_root_folgt_keiner_verzeichnisverknuepfung</span></td><td>Prüft, dass get_plugin_root() bei einem über eine Verzeichnisverknüpfung (wie von link_qgis_profile.py angelegt) erreichten Modul den verlinkten Pfad liefert, statt zum echten Zielverzeichnis aufzulösen (Verfahrensgebiet #50).</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_text_wrapper.py testsanitizebezeichner test_umlaute_bleiben_erhalten testsanitizebezeichner test_bindestrich_bleibt_erhalten testsanitizebezeichner test_unterstrich_bleibt_erhalten testsanitizebezeichner test_leerzeichen_wird_durch_ersatz_zusammengefasst testsanitizebezeichner test_fuehrender_und_folgender_ersatz_wird_entfernt testsanitizebezeichner test_eigenes_ersatzzeichen_wird_verwendet testsanitizebezeichner test_nur_unzulaessige_zeichen_ergibt_leeren_string" 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-text-wrapper-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_text_wrapper.py</span><span class="card-meta"><span class="count-total">7 Testfälle</span><span class="cpill cpill-ok">7</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-text-wrapper-py"><p class="filedesc">Unit-Tests für `sn_basis.functions.text_wrapper`.</p><div class="gchips"><span class="gchip" title="">TestSanitizeBezeichner <b>7</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
root([&quot;test_text_wrapper.py&quot;]) root([&quot;test_text_wrapper.py&quot;])
class root rootnode class root rootnode
root --&gt; g1[&quot;TestSanitizeBezeichner (7)&quot;] root --&gt; g1[&quot;TestSanitizeBezeichner (7)&quot;]
+20 -8
View File
@@ -8,20 +8,20 @@ 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 `0d643cd91110`) Stand des Prüf-Audits: `docs/status/testpruefungen.json` (SHA-256 `68b590c8feef`)
Gesamt: 3 Pakete, 31 Testdateien, 346 Testfälle – 303 grün, 35 rot (Baseline), 8 übersprungen. Gesamt: 3 Pakete, 32 Testdateien, 347 Testfälle – 304 grün, 35 rot (Baseline), 8 übersprungen.
Mit Beschreibung (Docstring): 201 von 346 (58 %). Mit Beschreibung (Docstring): 202 von 347 (58 %).
Fachlich geprüft: 54 von 346 (16 %) aktuell, 0 veraltet seit Codeänderung, 292 nie geprüft. Fachlich geprüft: 55 von 347 (16 %) aktuell, 0 veraltet seit Codeänderung, 292 nie geprüft.
## Zusammenfassung ## Zusammenfassung
| Paket | Testdateien | Testfälle | grün | rot (Baseline) | übersprungen | mit Beschreibung | fachlich geprüft | | Paket | Testdateien | Testfälle | grün | rot (Baseline) | übersprungen | mit Beschreibung | fachlich geprüft |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| `sn_basis` | 14 | 95 | 95 | 0 | 0 | 95 von 95 (100 %) | 54 von 95 (57 %) | | `sn_basis` | 15 | 96 | 96 | 0 | 0 | 96 von 96 (100 %) | 55 von 96 (57 %) |
| `sn_verfahrensgebiet` | 12 | 207 | 165 | 34 | 8 | 105 von 207 (51 %) | 0 von 207 (0 %) | | `sn_verfahrensgebiet` | 12 | 207 | 165 | 34 | 8 | 105 von 207 (51 %) | 0 von 207 (0 %) |
| `sn_plan41` | 5 | 44 | 43 | 1 | 0 | 1 von 44 (2 %) | 0 von 44 (0 %) | | `sn_plan41` | 5 | 44 | 43 | 1 | 0 | 1 von 44 (2 %) | 0 von 44 (0 %) |
| **Summe** | **31** | **346** | **303** | **35** | **8** | **201 von 346 (58 %)** | **54 von 346 (16 %)** | | **Summe** | **32** | **347** | **304** | **35** | **8** | **202 von 347 (58 %)** | **55 von 347 (16 %)** |
### Legende ### Legende
@@ -34,7 +34,7 @@ Fachlich geprüft: 54 von 346 (16 %) aktuell, 0 veraltet seit Codeänderung, 292
## Paket `sn_basis` ## Paket `sn_basis`
Plattform-Plugin, Ordner `Plugin_SN_Basis` – 14 Testdateien mit 95 Testfällen (95 grün, 0 rot, 0 übersprungen). Plattform-Plugin, Ordner `Plugin_SN_Basis` – 15 Testdateien mit 96 Testfällen (96 grün, 0 rot, 0 übersprungen).
### `Plugin_SN_Basis/tests/test_bootstrap.py` ### `Plugin_SN_Basis/tests/test_bootstrap.py`
@@ -229,6 +229,18 @@ Testgruppen:
| `TestStilpruefer.test_datei_existiert_falsche_endung` | Prüft, dass eine existierende Datei ohne .qml-Endung als 'falsche_endung' abgelehnt wird. | grün | geprüft am 2026-09-17 | | `TestStilpruefer.test_datei_existiert_falsche_endung` | Prüft, dass eine existierende Datei ohne .qml-Endung als 'falsche_endung' abgelehnt wird. | grün | geprüft am 2026-09-17 |
| `TestStilpruefer.test_datei_existiert_nicht` | Prüft, dass ein nicht existierender .qml-Pfad als 'datei_nicht_gefunden' abgelehnt wird. | grün | geprüft am 2026-09-17 | | `TestStilpruefer.test_datei_existiert_nicht` | Prüft, dass ein nicht existierender .qml-Pfad als 'datei_nicht_gefunden' abgelehnt wird. | grün | geprüft am 2026-09-17 |
### `Plugin_SN_Basis/tests/test_sys_wrapper.py`
Worum es in der Datei geht: Unit-Tests für sn_basis.functions.sys_wrapper.get_plugin_root().
Testgruppen:
- `TestGetPluginRoot` (1 Testfälle): — (Docstring fehlt)
| Testfall | prüft | Status | geprüft |
| --- | --- | --- | --- |
| `TestGetPluginRoot.test_get_plugin_root_folgt_keiner_verzeichnisverknuepfung` | Prüft, dass get_plugin_root() bei einem über eine Verzeichnisverknüpfung (wie von link_qgis_profile.py angelegt) erreichten Modul den verlinkten Pfad liefert, statt zum echten Zielverzeichnis aufzulösen (Verfahrensgebiet #50). | grün | geprüft am 2026-09-17 |
### `Plugin_SN_Basis/tests/test_text_wrapper.py` ### `Plugin_SN_Basis/tests/test_text_wrapper.py`
Worum es in der Datei geht: Unit-Tests für `sn_basis.functions.text_wrapper`. Worum es in der Datei geht: Unit-Tests für `sn_basis.functions.text_wrapper`.
@@ -765,7 +777,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 95 Testfällen ohne Beschreibung ### `sn_basis` – 0 von 96 Testfällen ohne Beschreibung
Keine Lücken. Keine Lücken.