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

7 Testfälle nach Freigabe als geprüft markiert: test_variable_wrapper.py komplett
(6 bestehende, davon 3 über das geschärfte Test-Double und 1 zusätzlich im Rückfall
geschärft, und 1 neuer für get_variable im Projekt-Scope). Keine Nebenbefunde.

Testkatalog neu erzeugt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 20:40:24 +01:00
co-authored by Claude Opus 5.5
parent 292863e5e7
commit 851287a0e1
3 changed files with 59 additions and 28 deletions
+15 -13
View File
@@ -123,24 +123,24 @@
<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>
<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 92b94e7ed46e)</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 b5c66dc5bdb2)</div></div>
<div class="summary">
<div class="stat"><span class="n">696</span><span class="l">Testfälle</span></div>
<div class="stat ok"><span class="n">653</span><span class="l">grün</span></div>
<div class="stat"><span class="n">697</span><span class="l">Testfälle</span></div>
<div class="stat ok"><span class="n">654</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 skip"><span class="n">8</span><span class="l">übersprungen</span></div>
<div class="stat"><span class="n">79%</span><span class="l">mit Docstring</span></div>
<div class="stat"><span class="n">41%</span><span class="l">aktuell geprüft</span></div>
<div class="stat"><span class="n">42%</span><span class="l">aktuell geprüft</span></div>
<div class="stat"><span class="n">55</span><span class="l">Testdateien</span></div>
<div class="stat warn"><span class="n">34%</span><span class="l">ohne Testbezug</span></div>
</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="363 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 · 363 Testfälle</span></div>
<div class="pkg-bar-row"><span class="name">sn_basis</span><span class="minibar" role="img" aria-label="364 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 · 364 Testfälle</span></div>
<div class="pkg-bar-row"><span class="name">sn_verfahrensgebiet</span><span class="minibar" role="img" aria-label="247 grün, 34 rot, 8 übersprungen"><span class="seg seg-ok" style="width:85%"></span><span class="seg seg-warn" style="width:12%"></span><span class="seg seg-skip" style="width:3%"></span></span><span class="count">18 Dateien · 289 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 class="controls"><nav class="nav-links">
<a href="#pkg-sn_basis">sn_basis <span class="mono">(363)</span></a>
<a href="#pkg-sn_basis">sn_basis <span class="mono">(364)</span></a>
<a href="#pkg-sn_verfahrensgebiet">sn_verfahrensgebiet <span class="mono">(289)</span></a>
<a href="#pkg-sn_plan41">sn_plan41 <span class="mono">(44)</span></a>
</nav><div class="filters">
@@ -159,11 +159,11 @@
<h2>sn_basis</h2>
<p class="pkg-sub">Plattform-Plugin · Ordner <span class="mono">Plugin_SN_Basis</span></p>
</div>
<div class="pkg-bar" role="img" aria-label="363 grün, 0 rot, 0 übersprungen">
<div class="pkg-bar" role="img" aria-label="364 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>
</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">363</span><span class="l">Testfälle</span></div><div class="stat stat-sm ok"><span class="n">363</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">78%</span><span class="l">geprüft</span></div><div class="stat stat-sm"><span class="n">70</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">364</span><span class="l">Testfälle</span></div><div class="stat stat-sm ok"><span class="n">364</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">80%</span><span class="l">geprüft</span></div><div class="stat stat-sm"><span class="n">70</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
root([&quot;test_base_dockwidget.py&quot;])
class root rootnode
@@ -1215,28 +1215,30 @@
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">TestSanitizeBezeichner<br><span class="testname">test_umlaute_bleiben_erhalten</span></td><td>Prüft, dass alle Umlaute (klein und groß) und ß nicht durch den Ersatz entfernt werden.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_bindestrich_bleibt_erhalten</span></td><td>Prüft, dass ein Bindestrich im Bezeichner erhalten bleibt (Issue #42).</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_unterstrich_bleibt_erhalten</span></td><td>Prüft, dass ein Unterstrich im Bezeichner erhalten bleibt.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_leerzeichen_wird_durch_ersatz_zusammengefasst</span></td><td>Prüft, dass eine Folge unzulässiger Zeichen (hier zwei Leerzeichen) zu genau einem Ersatzzeichen zusammengefasst wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_fuehrender_und_folgender_ersatz_wird_entfernt</span></td><td>Prüft, dass ein Ersatzzeichen am Anfang oder Ende des Ergebnisses entfernt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_eigenes_ersatzzeichen_wird_verwendet</span></td><td>Prüft, dass ein abweichendes Ersatzzeichen anstelle von Unterstrich genutzt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_nur_unzulaessige_zeichen_ergibt_leeren_string</span></td><td>Prüft, dass ein Bezeichner ganz aus unzulässigen Zeichen zu einem leeren String wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_variable_wrapper.py testvariablewrapper test_set_variable_project_noop_write_is_skipped testvariablewrapper test_set_variable_project_changed_value_is_written testvariablewrapper test_set_variable_global_writes_prefixed_name testvariablewrapper test_get_variable_global_returns_empty_string_fallback testvariablewrapper test_get_variable_invalid_scope_raises testvariablewrapper test_set_variable_invalid_scope_raises" 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-variable-wrapper-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_variable_wrapper.py</span><span class="card-meta"><span class="count-total">6 Testfälle</span><span class="cpill cpill-ok">6</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-variable-wrapper-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestVariableWrapper <b>6</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">TestSanitizeBezeichner<br><span class="testname">test_umlaute_bleiben_erhalten</span></td><td>Prüft, dass alle Umlaute (klein und groß) und ß nicht durch den Ersatz entfernt werden.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_bindestrich_bleibt_erhalten</span></td><td>Prüft, dass ein Bindestrich im Bezeichner erhalten bleibt (Issue #42).</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_unterstrich_bleibt_erhalten</span></td><td>Prüft, dass ein Unterstrich im Bezeichner erhalten bleibt.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_leerzeichen_wird_durch_ersatz_zusammengefasst</span></td><td>Prüft, dass eine Folge unzulässiger Zeichen (hier zwei Leerzeichen) zu genau einem Ersatzzeichen zusammengefasst wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_fuehrender_und_folgender_ersatz_wird_entfernt</span></td><td>Prüft, dass ein Ersatzzeichen am Anfang oder Ende des Ergebnisses entfernt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_eigenes_ersatzzeichen_wird_verwendet</span></td><td>Prüft, dass ein abweichendes Ersatzzeichen anstelle von Unterstrich genutzt wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_nur_unzulaessige_zeichen_ergibt_leeren_string</span></td><td>Prüft, dass ein Bezeichner ganz aus unzulässigen Zeichen zu einem leeren String wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_variable_wrapper.py testvariablewrapper test_set_variable_project_noop_write_is_skipped testvariablewrapper test_set_variable_project_changed_value_is_written testvariablewrapper test_set_variable_global_writes_prefixed_name testvariablewrapper test_get_variable_global_returns_empty_string_fallback testvariablewrapper test_get_variable_project_liest_praefixierten_namen testvariablewrapper test_get_variable_invalid_scope_raises testvariablewrapper test_set_variable_invalid_scope_raises" 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-variable-wrapper-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_variable_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">100% geprüft</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-variable-wrapper-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestVariableWrapper <b>7</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
root([&quot;test_variable_wrapper.py&quot;])
class root rootnode
root --&gt; g1[&quot;TestVariableWrapper (6)&quot;]
root --&gt; g1[&quot;TestVariableWrapper (7)&quot;]
class g1 groupnode
g1 --&gt; t1(&quot;set_variable_project_noop_write_is_skipped&quot;)
g1 --&gt; t2(&quot;set_variable_project_changed_value_is_written&quot;)
g1 --&gt; t3(&quot;set_variable_global_writes_prefixed_name&quot;)
g1 --&gt; t4(&quot;get_variable_global_returns_empty_string_fallback&quot;)
g1 --&gt; t5(&quot;get_variable_invalid_scope_raises&quot;)
g1 --&gt; t6(&quot;set_variable_invalid_scope_raises&quot;)
g1 --&gt; t5(&quot;get_variable_project_liest_praefixierten_namen&quot;)
g1 --&gt; t6(&quot;get_variable_invalid_scope_raises&quot;)
g1 --&gt; t7(&quot;set_variable_invalid_scope_raises&quot;)
class t1 ok
class t2 ok
class t3 ok
class t4 ok
class t5 ok
class t6 ok
class t7 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">TestVariableWrapper<br><span class="testname">test_set_variable_project_noop_write_is_skipped</span></td><td>Prüft, dass set_variable() im Projekt-Scope nicht schreibt, wenn der neue Wert dem bestehenden entspricht.</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">TestVariableWrapper<br><span class="testname">test_set_variable_project_changed_value_is_written</span></td><td>Prüft, dass set_variable() im Projekt-Scope bei geändertem Wert mit dem Präfix &#x27;sn_&#x27; geschrieben 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">TestVariableWrapper<br><span class="testname">test_set_variable_global_writes_prefixed_name</span></td><td>Prüft, dass set_variable() im globalen Scope den Variablennamen mit &#x27;sn_&#x27; vorangestellt schreibt.</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">TestVariableWrapper<br><span class="testname">test_get_variable_global_returns_empty_string_fallback</span></td><td>Prüft, dass get_variable() im globalen Scope für eine nicht gesetzte Variable einen leeren String 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">TestVariableWrapper<br><span class="testname">test_get_variable_invalid_scope_raises</span></td><td>Prüft, dass get_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst.</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">TestVariableWrapper<br><span class="testname">test_set_variable_invalid_scope_raises</span></td><td>Prüft, dass set_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst.</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_verfahrensgebiet_manager.py testverfahrensgebietmanager test_get_verfahrensgebiet_layer_id_returns_value testverfahrensgebietmanager test_get_verfahrensgebiet_layer_id_returns_none_for_empty_value testverfahrensgebietmanager test_set_verfahrensgebiet_layer_id_writes_project_variable testverfahrensgebietmanager test_update_without_layer_does_not_write_when_already_empty testverfahrensgebietmanager test_update_with_layer_writes_variable onhandlertests test_on_project_changed_ohne_layer_setzt_variable_leer onhandlertests test_on_project_changed_mit_layer_setzt_variable onhandlertests test_on_layers_added_findet_neuen_layer onhandlertests test_on_layer_removed_bei_aktuellem_layer_sucht_neu onhandlertests test_on_layer_removed_bei_anderem_layer_aendert_nichts listenersetuptests test_setup_ohne_qgis_tut_nichts listenersetuptests test_setup_verbindet_signale_und_ist_idempotent listenersetuptests test_teardown_trennt_alle_signale_und_ist_idempotent" 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-verfahrensgebiet-manager-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_verfahrensgebiet_manager.py</span><span class="card-meta"><span class="count-total">13 Testfälle</span><span class="cpill cpill-ok">13</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-verfahrensgebiet-manager-py"><p class="filedesc">Tests für sn_basis/functions/verfahrensgebiet_manager.py (zentrale Layer-Verfolgung, Issue #65).</p><div class="gchips"><span class="gchip" title="">TestVerfahrensgebietManager <b>5</b></span><span class="gchip" title="">OnHandlerTests <b>5</b></span><span class="gchip" title="">ListenerSetupTests <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">TestVariableWrapper<br><span class="testname">test_set_variable_project_noop_write_is_skipped</span></td><td>Prüft, dass set_variable() im Projekt-Scope nicht schreibt, wenn der neue Wert dem bestehenden entspricht.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestVariableWrapper<br><span class="testname">test_set_variable_project_changed_value_is_written</span></td><td>Prüft, dass set_variable() im Projekt-Scope bei geändertem Wert mit dem Präfix &#x27;sn_&#x27; geschrieben wird.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestVariableWrapper<br><span class="testname">test_set_variable_global_writes_prefixed_name</span></td><td>Prüft, dass set_variable() im globalen Scope den Variablennamen mit &#x27;sn_&#x27; vorangestellt schreibt.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestVariableWrapper<br><span class="testname">test_get_variable_global_returns_empty_string_fallback</span></td><td>Prüft, dass get_variable() im globalen Scope für eine nicht gesetzte Variable einen leeren String statt None liefert.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestVariableWrapper<br><span class="testname">test_get_variable_project_liest_praefixierten_namen</span></td><td>Prüft, dass get_variable() im Projekt-Scope den Namen mit &#x27;sn_&#x27; aus dem Scope des aktuellen Projekts liest.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestVariableWrapper<br><span class="testname">test_get_variable_invalid_scope_raises</span></td><td>Prüft, dass get_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr><tr><td class="mono">TestVariableWrapper<br><span class="testname">test_set_variable_invalid_scope_raises</span></td><td>Prüft, dass set_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst.</td><td><span class="pill pill-ok">grün</span></td><td><span class="pill pill-pr-ok">geprüft am 2026-10-26</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_verfahrensgebiet_manager.py testverfahrensgebietmanager test_get_verfahrensgebiet_layer_id_returns_value testverfahrensgebietmanager test_get_verfahrensgebiet_layer_id_returns_none_for_empty_value testverfahrensgebietmanager test_set_verfahrensgebiet_layer_id_writes_project_variable testverfahrensgebietmanager test_update_without_layer_does_not_write_when_already_empty testverfahrensgebietmanager test_update_with_layer_writes_variable onhandlertests test_on_project_changed_ohne_layer_setzt_variable_leer onhandlertests test_on_project_changed_mit_layer_setzt_variable onhandlertests test_on_layers_added_findet_neuen_layer onhandlertests test_on_layer_removed_bei_aktuellem_layer_sucht_neu onhandlertests test_on_layer_removed_bei_anderem_layer_aendert_nichts listenersetuptests test_setup_ohne_qgis_tut_nichts listenersetuptests test_setup_verbindet_signale_und_ist_idempotent listenersetuptests test_teardown_trennt_alle_signale_und_ist_idempotent" 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-verfahrensgebiet-manager-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_verfahrensgebiet_manager.py</span><span class="card-meta"><span class="count-total">13 Testfälle</span><span class="cpill cpill-ok">13</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-verfahrensgebiet-manager-py"><p class="filedesc">Tests für sn_basis/functions/verfahrensgebiet_manager.py (zentrale Layer-Verfolgung, Issue #65).</p><div class="gchips"><span class="gchip" title="">TestVerfahrensgebietManager <b>5</b></span><span class="gchip" title="">OnHandlerTests <b>5</b></span><span class="gchip" title="">ListenerSetupTests <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
root([&quot;test_verfahrensgebiet_manager.py&quot;])
class root rootnode
root --&gt; g1[&quot;TestVerfahrensgebietManager (5)&quot;]