Befund aus dem QGIS-Test (Fenster immer auf dem Hauptbildschirm, im Vollbild nicht zu verlassen) in fallstricke.md festgehalten; Testkonzept, Modulkarte und Testkatalog an das Fenster mit Rahmen und die Pfadanzeige der Korrektur-Datei angepasst. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2726 lines
475 KiB
HTML
2726 lines
475 KiB
HTML
<title>Prüfstand</title>
|
||
<meta charset="utf-8">
|
||
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Ctext y='.9em' font-size='90'%3E%F0%9F%93%90%3C/text%3E%3C/svg%3E">
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Archivo:wght@500;600;700;800&family=Source+Sans+3:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500;600&display=swap">
|
||
<style>
|
||
:root{
|
||
--bg: #f3f0e6; --bg-plan: #f6f4ea; --surface: #fffdf7; --surface-2: #ece7d8;
|
||
--ink: #211f18; --ink-soft: #4a4739; --muted: #7a7460; --line: #dcd5c0; --line-strong: #c7bea3;
|
||
--accent: #2f5b52; --accent-strong: #1c3b34; --accent-tint: #e2ece7;
|
||
--ok: #3f7d4a; --ok-bg: #e5f1e2; --warn: #a8641f; --warn-bg: #f7ead6; --skip: #5d6072; --skip-bg: #e8e8ee;
|
||
--shadow: 0 1px 2px rgba(33,31,24,.06), 0 4px 14px rgba(33,31,24,.05); --focus: #1c3b34;
|
||
color-scheme: light dark;
|
||
}
|
||
@media (prefers-color-scheme: dark){
|
||
:root:not([data-theme="light"]){
|
||
--bg:#1a1a16; --bg-plan:#211f18; --surface:#232019; --surface-2:#2b2820; --ink:#efe9d8; --ink-soft:#cdc6b0;
|
||
--muted:#97917c; --line:#3a3628; --line-strong:#4c4732; --accent:#7fb3a2; --accent-strong:#9cc9ba;
|
||
--accent-tint:#263530; --ok:#7fb386; --ok-bg:#223226; --warn:#d6a05e; --warn-bg:#3a2d1c; --skip:#a8abbd;
|
||
--skip-bg:#2a2b35; --shadow:0 1px 2px rgba(0,0,0,.3),0 6px 18px rgba(0,0,0,.35); --focus:#cfe6dc;
|
||
}
|
||
}
|
||
:root[data-theme="dark"]{
|
||
--bg:#1a1a16; --bg-plan:#211f18; --surface:#232019; --surface-2:#2b2820; --ink:#efe9d8; --ink-soft:#cdc6b0;
|
||
--muted:#97917c; --line:#3a3628; --line-strong:#4c4732; --accent:#7fb3a2; --accent-strong:#9cc9ba;
|
||
--accent-tint:#263530; --ok:#7fb386; --ok-bg:#223226; --warn:#d6a05e; --warn-bg:#3a2d1c; --skip:#a8abbd;
|
||
--skip-bg:#2a2b35; --shadow:0 1px 2px rgba(0,0,0,.3),0 6px 18px rgba(0,0,0,.35); --focus:#cfe6dc;
|
||
}
|
||
*{ box-sizing:border-box; }
|
||
html,body{ margin:0; }
|
||
body{ background:var(--bg); color:var(--ink); font-family:"Source Sans 3",system-ui,-apple-system,sans-serif;
|
||
font-size:15px; line-height:1.5; padding-inline:20px; }
|
||
h1,h2,h3{ font-family:"Archivo",system-ui,sans-serif; text-wrap:balance; margin:0; }
|
||
.mono{ font-family:"IBM Plex Mono",ui-monospace,monospace; }
|
||
a{ color:var(--accent-strong); }
|
||
.topbar{ max-width:1180px; margin:0 auto; padding-block:28px 18px; display:flex; flex-wrap:wrap; gap:16px 28px;
|
||
align-items:flex-end; justify-content:space-between; border-bottom:2px solid var(--line-strong); }
|
||
.brand{ display:flex; align-items:baseline; gap:14px; flex-wrap:wrap; }
|
||
.brand h1{ font-size:clamp(28px,4vw,38px); font-weight:800; letter-spacing:-0.01em; color:var(--accent-strong); }
|
||
.brand .tagline{ color:var(--muted); font-size:14.5px; max-width:46ch; }
|
||
.meta-line{ color:var(--muted); font-size:12.5px; text-align:right; }
|
||
.meta-line b{ color:var(--ink-soft); font-weight:600; }
|
||
.summary{ max-width:1180px; margin:22px auto 0; display:grid; gap:14px; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); }
|
||
.stat{ background:var(--surface); border:1px solid var(--line); border-radius:10px; padding:14px 16px; box-shadow:var(--shadow); }
|
||
.stat .n{ font-family:"IBM Plex Mono",monospace; font-variant-numeric:tabular-nums; font-size:26px; font-weight:600; color:var(--ink); display:block; }
|
||
.stat .l{ font-size:12px; text-transform:uppercase; letter-spacing:.06em; color:var(--muted); }
|
||
.stat.ok .n{ color:var(--ok); } .stat.warn .n{ color:var(--warn); } .stat.skip .n{ color:var(--skip); }
|
||
.pkg-bars{ max-width:1180px; margin:16px auto 0; background:var(--surface); border:1px solid var(--line);
|
||
border-radius:10px; padding:14px 18px; box-shadow:var(--shadow); display:grid; gap:10px; }
|
||
.pkg-bars-title{ font-size:12px; text-transform:uppercase; letter-spacing:.06em; color:var(--muted); margin-bottom:2px; }
|
||
.pkg-bar-row{ display:grid; grid-template-columns:170px 1fr auto; gap:12px; align-items:center; }
|
||
.pkg-bar-row .name{ font-family:"IBM Plex Mono",monospace; font-size:13px; }
|
||
.pkg-bar-row .count{ font-family:"IBM Plex Mono",monospace; font-variant-numeric:tabular-nums; font-size:12.5px; color:var(--muted); white-space:nowrap; }
|
||
.minibar{ height:9px; border-radius:6px; overflow:hidden; display:flex; background:var(--surface-2); border:1px solid var(--line); }
|
||
.minibar .seg{ height:100%; display:block; }
|
||
.controls{ max-width:1180px; margin:20px auto 0; display:flex; flex-wrap:wrap; gap:10px 14px; align-items:center;
|
||
position:sticky; top:env(safe-area-inset-top,0px); z-index:5; background:var(--bg); padding-block:10px; }
|
||
.nav-links{ display:flex; gap:6px; flex-wrap:wrap; }
|
||
.nav-links a{ font-size:13px; text-decoration:none; padding:6px 11px; border-radius:999px; border:1px solid var(--line-strong);
|
||
color:var(--ink-soft); background:var(--surface); }
|
||
.nav-links a:hover{ border-color:var(--accent); color:var(--accent-strong); }
|
||
.filters{ display:flex; gap:6px; flex-wrap:wrap; margin-left:auto; }
|
||
.chip{ font-size:12.5px; padding:6px 11px; border-radius:999px; border:1px solid var(--line-strong);
|
||
background:var(--surface); color:var(--ink-soft); cursor:pointer; font-family:inherit; }
|
||
.chip[aria-pressed="true"]{ background:var(--accent-strong); border-color:var(--accent-strong); color:var(--bg-plan); }
|
||
.searchbox{ display:flex; align-items:center; gap:6px; border:1px solid var(--line-strong); border-radius:999px;
|
||
background:var(--surface); padding:5px 12px; min-width:190px; }
|
||
.searchbox input{ border:none; background:none; outline:none; font-family:inherit; font-size:13px; color:var(--ink); width:100%; }
|
||
.searchbox input::placeholder{ color:var(--muted); }
|
||
.pkg-section{ max-width:1180px; margin:34px auto 0; scroll-margin-top:64px; }
|
||
.pkg-head{ display:flex; flex-wrap:wrap; gap:12px 24px; align-items:flex-end; justify-content:space-between; margin-bottom:16px; }
|
||
.pkg-head h2{ font-family:"IBM Plex Mono",monospace; font-size:21px; font-weight:600; color:var(--accent-strong); }
|
||
.pkg-sub{ color:var(--muted); font-size:13px; margin-top:3px; }
|
||
.pkg-bar{ width:220px; height:9px; border-radius:6px; overflow:hidden; display:flex; background:var(--surface-2); border:1px solid var(--line); }
|
||
.pkg-bar .seg{ height:100%; display:block; }
|
||
.seg-ok{ background:var(--ok); } .seg-warn{ background:var(--warn); } .seg-skip{ background:var(--skip); }
|
||
.card-grid{ display:grid; gap:12px; }
|
||
.filecard{ background:var(--surface); border:1px solid var(--line); border-radius:12px; box-shadow:var(--shadow); overflow:hidden; }
|
||
.card-toggle{ width:100%; display:flex; flex-wrap:wrap; align-items:center; gap:8px 14px; justify-content:space-between;
|
||
padding:13px 16px; background:none; border:none; cursor:pointer; text-align:left; font-family:inherit; color:var(--ink); }
|
||
.card-toggle:hover{ background:var(--accent-tint); }
|
||
.card-toggle:focus-visible{ outline:2px solid var(--focus); outline-offset:-2px; }
|
||
.card-path{ font-size:13.5px; font-weight:500; color:var(--ink); }
|
||
.card-meta{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; font-size:12px; }
|
||
.count-total{ color:var(--muted); font-variant-numeric:tabular-nums; }
|
||
.cpill{ font-family:"IBM Plex Mono",monospace; font-variant-numeric:tabular-nums; font-size:11.5px; padding:2px 7px; border-radius:999px; font-weight:600; }
|
||
.cpill-ok{ background:var(--ok-bg); color:var(--ok); } .cpill-warn{ background:var(--warn-bg); color:var(--warn); } .cpill-skip{ background:var(--skip-bg); color:var(--skip); }
|
||
.docbadge{ color:var(--muted); border:1px solid var(--line-strong); border-radius:999px; padding:2px 8px; }
|
||
.chev{ color:var(--muted); transition:transform .15s ease; }
|
||
.filecard.open .chev{ transform:rotate(180deg); }
|
||
.card-body{ max-height:0; overflow:hidden; transition:max-height .22s ease; border-top:0 solid var(--line); }
|
||
.filecard.open .card-body{ border-top-width:1px; }
|
||
.card-body-inner{ padding:16px; }
|
||
.filedesc{ color:var(--ink-soft); margin:0 0 12px; max-width:70ch; }
|
||
.empty-note{ color:var(--muted); font-size:13.5px; margin:0; }
|
||
.gchips{ display:flex; flex-wrap:wrap; gap:6px; margin-bottom:14px; }
|
||
.gchip{ font-size:12px; background:var(--accent-tint); color:var(--accent-strong); border:1px solid var(--line); border-radius:7px; padding:3px 9px; }
|
||
.gchip b{ font-family:"IBM Plex Mono",monospace; font-weight:600; }
|
||
.diagram-wrap{ background:var(--bg-plan); border:1px solid var(--line-strong);
|
||
border-image: repeating-linear-gradient(45deg, var(--line-strong) 0 2px, transparent 2px 6px) 1;
|
||
border-radius:8px; padding:14px; margin-bottom:16px; overflow-x:auto; }
|
||
.diagram-wrap svg{ display:block; margin:0 auto; }
|
||
.test-table{ width:100%; border-collapse:collapse; font-size:13px; }
|
||
.test-table th{ text-align:left; font-size:11px; text-transform:uppercase; letter-spacing:.05em; color:var(--muted);
|
||
border-bottom:1px solid var(--line-strong); padding:6px 8px; }
|
||
.test-table td{ border-bottom:1px solid var(--line); padding:8px 8px; vertical-align:top; }
|
||
.test-table tr:last-child td{ border-bottom:none; }
|
||
.testname{ color:var(--muted); font-size:12px; }
|
||
.nodoc{ color:var(--muted); font-style:italic; }
|
||
.pill{ font-size:11.5px; padding:2px 8px; border-radius:999px; font-weight:600; white-space:nowrap; }
|
||
.pill-ok{ background:var(--ok-bg); color:var(--ok); } .pill-warn{ background:var(--warn-bg); color:var(--warn); } .pill-skip{ background:var(--skip-bg); color:var(--skip); }
|
||
footer{ max-width:1180px; margin:40px auto 30px; color:var(--muted); font-size:12px; border-top:1px solid var(--line); padding-top:14px; }
|
||
[hidden]{ display:none !important; }
|
||
@media (max-width:640px){ .pkg-bar{ width:130px; } .controls{ position:static; } }
|
||
</style>
|
||
|
||
<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)</div></div>
|
||
<div class="summary">
|
||
<div class="stat"><span class="n">823</span><span class="l">Testfälle</span></div>
|
||
<div class="stat ok"><span class="n">780</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">82%</span><span class="l">mit Docstring</span></div>
|
||
<div class="stat"><span class="n">66</span><span class="l">Testdateien</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="490 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">43 Dateien · 490 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">(490)</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">
|
||
<button class="chip" data-filter="all" aria-pressed="true">Alle</button>
|
||
<button class="chip" data-filter="hasred" aria-pressed="false">Mit rot</button>
|
||
<button class="chip" data-filter="hasskip" aria-pressed="false">Mit übersprungen</button>
|
||
<button class="chip" data-filter="nodoc" aria-pressed="false">Schwach beschrieben (<50%)</button>
|
||
</div>
|
||
<div class="searchbox"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" aria-hidden="true"><circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg><input type="search" id="searchInput" placeholder="Testfall oder Datei suchen…" aria-label="Testfall oder Datei suchen"></div></div>
|
||
|
||
<section class="pkg-section" id="pkg-sn_basis">
|
||
<div class="pkg-head">
|
||
<div>
|
||
<h2>sn_basis</h2>
|
||
<p class="pkg-sub">Plattform-Plugin · Ordner <span class="mono">Plugin_SN_Basis</span> · 43 Testdateien · 490 Testfälle</p>
|
||
</div>
|
||
<div class="pkg-bar" role="img" aria-label="490 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="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 scrollbereichtests test_jeder_tab_liegt_in_einem_scrollbereich scrollbereichtests test_fachplugin_mit_eigenem_tabaufbau_bekommt_scrollbereich scrollbereichtests test_scrollbereich_wird_nicht_doppelt_angelegt scrollbereichtests test_setwidget_none_und_andere_widgets_bleiben_unveraendert scrollbereichtests test_cleanup_erreicht_tabs_im_scrollbereich" data-hasred="0" data-hasskip="0" data-nodoc="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">10 Testfälle</span><span class="cpill cpill-ok">10</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</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) und Scroll-Bereich je Tab (Basis #104).</p><div class="gchips"><span class="gchip" title="">CloseEventTests <b>5</b></span><span class="gchip" title="Lange Tabs dürfen das QGIS-Fenster nicht über den Bildschirmrand schieben (Basis #104).">ScrollbereichTests <b>5</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_base_dockwidget.py"])
|
||
class root rootnode
|
||
root --> g1["CloseEventTests (5)"]
|
||
class g1 groupnode
|
||
g1 --> t1("ruft_cleanup_aller_tabs_auf")
|
||
g1 --> t2("ignoriert_tabs_ohne_cleanup")
|
||
g1 --> t3("fehler_in_cleanup_wird_abgefangen_und_andere_tabs_laufen_weiter")
|
||
g1 --> t4("setzt_toolbar_action_zurueck")
|
||
g1 --> t5("ohne_action_wird_nichts_zurueckgesetzt")
|
||
root --> g2["ScrollbereichTests (5)"]
|
||
class g2 groupnode
|
||
g2 --> t6("jeder_tab_liegt_in_einem_scrollbereich")
|
||
g2 --> t7("fachplugin_mit_eigenem_tabaufbau_bekommt_scrollbereich")
|
||
g2 --> t8("scrollbereich_wird_nicht_doppelt_angelegt")
|
||
g2 --> t9("setwidget_none_und_andere_widgets_bleiben_unveraendert")
|
||
g2 --> t10("cleanup_erreicht_tabs_im_scrollbereich")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 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></tr></thead><tbody><tr><td class="mono">CloseEventTests<br><span class="testname">test_ruft_cleanup_aller_tabs_auf</span></td><td>Prüft, dass closeEvent cleanup() auf allen Tabs des Dock-Widgets aufruft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CloseEventTests<br><span class="testname">test_ignoriert_tabs_ohne_cleanup</span></td><td>Prüft, dass ein Tab ohne cleanup()-Methode nicht zu einem Fehler führt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CloseEventTests<br><span class="testname">test_fehler_in_cleanup_wird_abgefangen_und_andere_tabs_laufen_weiter</span></td><td>Prüft, dass ein Fehler in cleanup() eines Tabs nicht die übrigen Tabs verhindert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CloseEventTests<br><span class="testname">test_setzt_toolbar_action_zurueck</span></td><td>Prüft, dass closeEvent die verknüpfte Toolbar-Action auf 'nicht gedrückt' zurücksetzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CloseEventTests<br><span class="testname">test_ohne_action_wird_nichts_zurueckgesetzt</span></td><td>Prüft, dass closeEvent ohne verknüpfte Toolbar-Action keine Ausnahme wirft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ScrollbereichTests<br><span class="testname">test_jeder_tab_liegt_in_einem_scrollbereich</span></td><td>Prüft, dass BaseDockWidget jeden Tab in einen mitwachsenden Scroll-Bereich packt, damit ein langer Tab scrollt, statt das Fenster zu verlängern.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ScrollbereichTests<br><span class="testname">test_fachplugin_mit_eigenem_tabaufbau_bekommt_scrollbereich</span></td><td>Prüft, dass auch ein Fachplugin, das seine Tabs selbst aufbaut und per setWidget einsetzt (wie Plan41, Verfahrensgebiet), Scroll-Bereiche bekommt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ScrollbereichTests<br><span class="testname">test_scrollbereich_wird_nicht_doppelt_angelegt</span></td><td>Prüft, dass ein Tab, der schon in einem Scroll-Bereich liegt, beim erneuten Einsetzen nicht ein zweites Mal verpackt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ScrollbereichTests<br><span class="testname">test_setwidget_none_und_andere_widgets_bleiben_unveraendert</span></td><td>Prüft, dass setWidget(None) und Widgets ohne Tabs ohne Fehler und unverändert eingesetzt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ScrollbereichTests<br><span class="testname">test_cleanup_erreicht_tabs_im_scrollbereich</span></td><td>Prüft, dass closeEvent cleanup() auch für Tabs aufruft, die in einem Scroll-Bereich liegen.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_basemap_anbindung.py testmehrfachauswahl test_mock_modus_liefert_vorauswahl_in_listenreihenfolge testdruckanbindung test_basemap_legende_nur_fuer_38_und_41_und_bei_eingeschaltetem_schalter testdruckanbindung test_layout_wird_markiert_und_legende_erzeugt testdruckanbindung test_fehler_der_basemap_legende_verhindert_die_vorlage_nicht testdruckanbindung test_druck_tab_aktualisiert_basemap_bereich_falls_vorhanden testbasemapbereich test_auswertebereich_wird_gespeichert testbasemapbereich test_aktualisieren_ohne_vorlage_warnt testbasemapbereich test_aktualisieren_wertet_gewaehlte_vorlage_aus testbasemapbereich test_stil_laden_uebernimmt_legendenauswahl testbasemapbereich test_stil_laden_bricht_bei_fremder_vorlage_ab testbasemapbereich test_vorhandene_vorlage_wird_nur_nach_rueckfrage_ersetzt testbasemapbereich test_speichern_mit_aktueller_legendenauswahl testbasemapbereich test_punktlinien_korrigieren_meldet_anzahl testbasemapbereich test_punktlinien_ohne_basemap_layer_warnt testbasemapbereich test_stil_speichern_ohne_basemap_layer_warnt testbasemapbereich test_stil_laden_bricht_bei_fremdem_thema_ab teststilvorlagenaustausch test_export_schreibt_gewaehlte_vorlage teststilvorlagenaustausch test_export_abgebrochen_oder_ohne_vorlage teststilvorlagenaustausch test_import_uebernimmt_datei_unter_gewaehltem_namen teststilvorlagenaustausch test_import_ersetzt_vorhandene_nur_nach_rueckfrage teststilvorlagenaustausch test_import_ungeeigneter_datei_warnt" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-basemap-anbindung-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_basemap_anbindung.py</span><span class="card-meta"><span class="count-total">21 Testfälle</span><span class="cpill cpill-ok">21</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-basemap-anbindung-py"><p class="filedesc">Tests für die Anbindung der Basemap-Legende an Druckablauf, Dialog und Druck-Tab (Basis #88):</p><div class="gchips"><span class="gchip" title="">TestMehrfachauswahl <b>1</b></span><span class="gchip" title="">TestDruckanbindung <b>4</b></span><span class="gchip" title="">TestBasemapBereich <b>11</b></span><span class="gchip" title="">TestStilvorlagenAustausch <b>5</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_basemap_anbindung.py"])
|
||
class root rootnode
|
||
root --> g1["TestMehrfachauswahl (1)"]
|
||
class g1 groupnode
|
||
g1 --> t1("mock_modus_liefert_vorauswahl_in_listenreihenfolge")
|
||
root --> g2["TestDruckanbindung (4)"]
|
||
class g2 groupnode
|
||
g2 --> t2("basemap_legende_nur_fuer_38_und_41_und_bei_eingeschaltetem_schalter")
|
||
g2 --> t3("layout_wird_markiert_und_legende_erzeugt")
|
||
g2 --> t4("fehler_der_basemap_legende_verhindert_die_vorlage_nicht")
|
||
g2 --> t5("druck_tab_aktualisiert_basemap_bereich_falls_vorhanden")
|
||
root --> g3["TestBasemapBereich (11)"]
|
||
class g3 groupnode
|
||
g3 --> t6("auswertebereich_wird_gespeichert")
|
||
g3 --> t7("aktualisieren_ohne_vorlage_warnt")
|
||
g3 --> t8("aktualisieren_wertet_gewaehlte_vorlage_aus")
|
||
g3 --> t9("stil_laden_uebernimmt_legendenauswahl")
|
||
g3 --> t10("stil_laden_bricht_bei_fremder_vorlage_ab")
|
||
g3 --> t11("vorhandene_vorlage_wird_nur_nach_rueckfrage_ersetzt")
|
||
g3 --> t12("speichern_mit_aktueller_legendenauswahl")
|
||
g3 --> t13("punktlinien_korrigieren_meldet_anzahl")
|
||
g3 --> t14("punktlinien_ohne_basemap_layer_warnt")
|
||
g3 --> t15("stil_speichern_ohne_basemap_layer_warnt")
|
||
g3 --> t16("stil_laden_bricht_bei_fremdem_thema_ab")
|
||
root --> g4["TestStilvorlagenAustausch (5)"]
|
||
class g4 groupnode
|
||
g4 --> t17("export_schreibt_gewaehlte_vorlage")
|
||
g4 --> t18("export_abgebrochen_oder_ohne_vorlage")
|
||
g4 --> t19("import_uebernimmt_datei_unter_gewaehltem_namen")
|
||
g4 --> t20("import_ersetzt_vorhandene_nur_nach_rueckfrage")
|
||
g4 --> t21("import_ungeeigneter_datei_warnt")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 ok
|
||
class t21 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></tr></thead><tbody><tr><td class="mono">TestMehrfachauswahl<br><span class="testname">test_mock_modus_liefert_vorauswahl_in_listenreihenfolge</span></td><td>Prüft, dass der Mehrfachauswahl-Dialog im Mock-Modus die vorausgewählten Schlüssel in Listenreihenfolge liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDruckanbindung<br><span class="testname">test_basemap_legende_nur_fuer_38_und_41_und_bei_eingeschaltetem_schalter</span></td><td>Prüft, dass nur §-38- und §-41-Vorlagen eine Basemap-Legende bekommen und nur, wenn der Schalter im Druck-Tab an ist.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDruckanbindung<br><span class="testname">test_layout_wird_markiert_und_legende_erzeugt</span></td><td>Prüft, dass PrintLayout das Layout als Basemap-Nutzer kennzeichnet und die Basemap-Legende erzeugen lässt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDruckanbindung<br><span class="testname">test_fehler_der_basemap_legende_verhindert_die_vorlage_nicht</span></td><td>Prüft, dass ein Fehler beim Erzeugen der Basemap-Legende nur als Warnung gemeldet wird und keine Ausnahme durchreicht.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDruckanbindung<br><span class="testname">test_druck_tab_aktualisiert_basemap_bereich_falls_vorhanden</span></td><td>Prüft, dass der Druck-Tab den Basemap-Bereich neu einliest und ohne Bereich nichts tut.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapBereich<br><span class="testname">test_auswertebereich_wird_gespeichert</span></td><td>Prüft, dass die Wahl des Auswertebereichs in der Projektvariable landet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapBereich<br><span class="testname">test_aktualisieren_ohne_vorlage_warnt</span></td><td>Prüft, dass „Basemap-Legende aktualisieren“ ohne vorhandene Vorlage warnt und nichts auswertet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapBereich<br><span class="testname">test_aktualisieren_wertet_gewaehlte_vorlage_aus</span></td><td>Prüft, dass „Basemap-Legende aktualisieren“ die gewählte Vorlage auswertet und den Erfolg meldet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapBereich<br><span class="testname">test_stil_laden_uebernimmt_legendenauswahl</span></td><td>Prüft, dass das Laden einer Stilvorlage den Layerstil ersetzt und ihre Legendenauswahl in das Projekt übernimmt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapBereich<br><span class="testname">test_stil_laden_bricht_bei_fremder_vorlage_ab</span></td><td>Prüft, dass eine Vorlage mit unbekannten Styles nur nach Bestätigung geladen wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapBereich<br><span class="testname">test_vorhandene_vorlage_wird_nur_nach_rueckfrage_ersetzt</span></td><td>Prüft, dass eine gleichnamige Stilvorlage ohne Bestätigung nicht überschrieben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapBereich<br><span class="testname">test_speichern_mit_aktueller_legendenauswahl</span></td><td>Prüft, dass eine neue Stilvorlage zusammen mit der aktuellen Legendenauswahl gespeichert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapBereich<br><span class="testname">test_punktlinien_korrigieren_meldet_anzahl</span></td><td>Prüft, dass „Punktlinien korrigieren“ den Basemap-Layer korrigiert und die Anzahl korrigierter Styles meldet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapBereich<br><span class="testname">test_punktlinien_ohne_basemap_layer_warnt</span></td><td>Prüft, dass ohne Basemap-Layer nichts korrigiert, sondern gewarnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapBereich<br><span class="testname">test_stil_speichern_ohne_basemap_layer_warnt</span></td><td>Prüft, dass ohne Basemap-Layer keine Stilvorlage gespeichert, sondern gewarnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapBereich<br><span class="testname">test_stil_laden_bricht_bei_fremdem_thema_ab</span></td><td>Prüft, dass eine Vorlage eines anderen Themas (Grau auf Farbe) nur nach Bestätigung geladen wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlagenAustausch<br><span class="testname">test_export_schreibt_gewaehlte_vorlage</span></td><td>Prüft, dass „Exportieren …“ die gewählte Vorlage in die im Dateidialog gewählte Datei schreibt und den Pfad meldet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlagenAustausch<br><span class="testname">test_export_abgebrochen_oder_ohne_vorlage</span></td><td>Prüft, dass ohne gewählte Vorlage oder bei abgebrochenem Dateidialog nichts exportiert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlagenAustausch<br><span class="testname">test_import_uebernimmt_datei_unter_gewaehltem_namen</span></td><td>Prüft, dass „Importieren …“ den Namen aus der Datei vorschlägt, unter dem gewählten Namen importiert und die neue Vorlage auswählt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlagenAustausch<br><span class="testname">test_import_ersetzt_vorhandene_nur_nach_rueckfrage</span></td><td>Prüft, dass ein Import eine gleichnamige Vorlage ohne Bestätigung nicht überschreibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlagenAustausch<br><span class="testname">test_import_ungeeigneter_datei_warnt</span></td><td>Prüft, dass eine ungeeignete Importdatei gemeldet wird, ohne nach einem Namen zu fragen oder etwas zu importieren.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_basemap_kacheln.py testsammleobjekte test_gleiche_objekte_aus_mehreren_kacheln_werden_entdoppelt testsammleobjekte test_kacheln_ausserhalb_der_geometrie_werden_uebersprungen testsammleobjekte test_abbruch_liefert_none_und_hebt_auswahl_auf testsammleobjekte test_anzahl_kacheln_aus_kachelbereich testzoomundstile test_zoomstufen_wie_im_qgis_renderer testzoomundstile test_stile_aus_layer_liest_renderer_styles" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-basemap-kacheln-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_basemap_kacheln.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-basemap-kacheln-py"><p class="filedesc">Tests für modules/basemap_kacheln.py – kachelweise Auswertung des Basemap-Layers (Basis #88).</p><div class="gchips"><span class="gchip" title="">TestSammleObjekte <b>4</b></span><span class="gchip" title="">TestZoomUndStile <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_basemap_kacheln.py"])
|
||
class root rootnode
|
||
root --> g1["TestSammleObjekte (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("gleiche_objekte_aus_mehreren_kacheln_werden_entdoppelt")
|
||
g1 --> t2("kacheln_ausserhalb_der_geometrie_werden_uebersprungen")
|
||
g1 --> t3("abbruch_liefert_none_und_hebt_auswahl_auf")
|
||
g1 --> t4("anzahl_kacheln_aus_kachelbereich")
|
||
root --> g2["TestZoomUndStile (2)"]
|
||
class g2 groupnode
|
||
g2 --> t5("zoomstufen_wie_im_qgis_renderer")
|
||
g2 --> t6("stile_aus_layer_liest_renderer_styles")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 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></tr></thead><tbody><tr><td class="mono">TestSammleObjekte<br><span class="testname">test_gleiche_objekte_aus_mehreren_kacheln_werden_entdoppelt</span></td><td>Prüft, dass Objekte mit gleichem Quell-Layer, Geometrietyp und Attributen über Kachelgrenzen hinweg nur einmal gezählt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSammleObjekte<br><span class="testname">test_kacheln_ausserhalb_der_geometrie_werden_uebersprungen</span></td><td>Prüft, dass Kacheln ohne Schnitt mit dem Auswertebereich nicht abgefragt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSammleObjekte<br><span class="testname">test_abbruch_liefert_none_und_hebt_auswahl_auf</span></td><td>Prüft, dass ein Abbruch über den Fortschritt None liefert und die Auswahl auf dem Basemap-Layer trotzdem aufgehoben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSammleObjekte<br><span class="testname">test_anzahl_kacheln_aus_kachelbereich</span></td><td>Prüft, dass die Kachelzahl aus dem Kachelbereich der Geometrie berechnet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestZoomUndStile<br><span class="testname">test_zoomstufen_wie_im_qgis_renderer</span></td><td>Prüft, dass Kachelzoom begrenzt, Darstellungszoom unbegrenzt und der gebrochene Zoom aus dem Maßstab bestimmt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestZoomUndStile<br><span class="testname">test_stile_aus_layer_liest_renderer_styles</span></td><td>Prüft, dass Name, Quell-Layer, Geometrietyp, Zoombereich, Schalter und Filter der Renderer-Styles übernommen werden.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_basemap_katalog.py testrendererstil test_beschriftung_und_3d_sind_keine_renderer_stile testrendererstil test_ausschluss_ueber_liste_und_praefix testrendererstil test_normalisierung_entfernt_variantenkennungen testerzeugekatalog test_kontur_decker_und_bruecke_bilden_einen_eintrag testerzeugekatalog test_zustand_im_bau_wird_eigener_eintrag testerzeugekatalog test_punkt_und_flaeche_derselben_objektart_werden_zusammengefasst testerzeugekatalog test_ausgeschlossene_stile_fehlen_im_katalog testerzeugekatalog test_fachliche_nachbearbeitung_bleibt_beim_erneuten_lauf_erhalten testerzeugekatalog test_entfallene_style_ids_werden_gemeldet testsymbolwahlundpruefung test_symbol_stile_je_rolle_nur_grundvariante testsymbolwahlundpruefung test_pruefung_findet_doppelte_zuordnung_und_unbekannte_symbole testsymbolwahlundpruefung test_ausgelieferter_katalog_ist_konsistent" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-basemap-katalog-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_basemap_katalog.py</span><span class="card-meta"><span class="count-total">12 Testfälle</span><span class="cpill cpill-ok">12</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-basemap-katalog-py"><p class="filedesc">Tests für modules/basemap_katalog.py – Legendenkatalog aus der basemap.de-Style-JSON (Basis #88).</p><div class="gchips"><span class="gchip" title="">TestRendererStil <b>3</b></span><span class="gchip" title="">TestErzeugeKatalog <b>6</b></span><span class="gchip" title="">TestSymbolwahlUndPruefung <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_basemap_katalog.py"])
|
||
class root rootnode
|
||
root --> g1["TestRendererStil (3)"]
|
||
class g1 groupnode
|
||
g1 --> t1("beschriftung_und_3d_sind_keine_renderer_stile")
|
||
g1 --> t2("ausschluss_ueber_liste_und_praefix")
|
||
g1 --> t3("normalisierung_entfernt_variantenkennungen")
|
||
root --> g2["TestErzeugeKatalog (6)"]
|
||
class g2 groupnode
|
||
g2 --> t4("kontur_decker_und_bruecke_bilden_einen_eintrag")
|
||
g2 --> t5("zustand_im_bau_wird_eigener_eintrag")
|
||
g2 --> t6("punkt_und_flaeche_derselben_objektart_werden_zusammengefasst")
|
||
g2 --> t7("ausgeschlossene_stile_fehlen_im_katalog")
|
||
g2 --> t8("fachliche_nachbearbeitung_bleibt_beim_erneuten_lauf_erhalten")
|
||
g2 --> t9("entfallene_style_ids_werden_gemeldet")
|
||
root --> g3["TestSymbolwahlUndPruefung (3)"]
|
||
class g3 groupnode
|
||
g3 --> t10("symbol_stile_je_rolle_nur_grundvariante")
|
||
g3 --> t11("pruefung_findet_doppelte_zuordnung_und_unbekannte_symbole")
|
||
g3 --> t12("ausgelieferter_katalog_ist_konsistent")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 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></tr></thead><tbody><tr><td class="mono">TestRendererStil<br><span class="testname">test_beschriftung_und_3d_sind_keine_renderer_stile</span></td><td>Prüft, dass reine Beschriftungen und 3D-Gebäude nicht als Renderer-Style gelten, Icon-Symbole und Flächen schon.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestRendererStil<br><span class="testname">test_ausschluss_ueber_liste_und_praefix</span></td><td>Prüft, dass Style-IDs über die Ausschlussliste und über Präfixe (Nummernschilder) ausgeschlossen werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestRendererStil<br><span class="testname">test_normalisierung_entfernt_variantenkennungen</span></td><td>Prüft, dass Variantenkennungen wie Kontur, Brücke oder Breitenangaben beim Normalisieren einer Style-ID entfallen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErzeugeKatalog<br><span class="testname">test_kontur_decker_und_bruecke_bilden_einen_eintrag</span></td><td>Prüft, dass Kontur-, Decker-, Fahrbahn- und Brückenvarianten derselben Straßenklasse genau einen Legendeneintrag bilden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErzeugeKatalog<br><span class="testname">test_zustand_im_bau_wird_eigener_eintrag</span></td><td>Prüft, dass „im Bau“ einen eigenen Legendeneintrag mit Zustandsangabe in der Bezeichnung bekommt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErzeugeKatalog<br><span class="testname">test_punkt_und_flaeche_derselben_objektart_werden_zusammengefasst</span></td><td>Prüft, dass das Kran-Symbol aus Bauwerkspunkt und Bauwerksfläche in einem Eintrag landet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErzeugeKatalog<br><span class="testname">test_ausgeschlossene_stile_fehlen_im_katalog</span></td><td>Prüft, dass Hintergrund, Beschriftungen, Nummernschilder und 3D-Gebäude keinem Eintrag zugeordnet werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErzeugeKatalog<br><span class="testname">test_fachliche_nachbearbeitung_bleibt_beim_erneuten_lauf_erhalten</span></td><td>Prüft, dass Bezeichnung, Gruppe, Zusammenführung und Symbolwahl eines bestehenden Katalogs bei einem erneuten Lauf erhalten bleiben.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErzeugeKatalog<br><span class="testname">test_entfallene_style_ids_werden_gemeldet</span></td><td>Prüft, dass eine Style-ID, die in der neuen Style-JSON fehlt, als entfallen gemeldet und aus dem Katalog entfernt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSymbolwahlUndPruefung<br><span class="testname">test_symbol_stile_je_rolle_nur_grundvariante</span></td><td>Prüft, dass für das Legendensymbol je Rolle (Kontur, Decker) nur die erste Grundvariante gewählt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSymbolwahlUndPruefung<br><span class="testname">test_pruefung_findet_doppelte_zuordnung_und_unbekannte_symbole</span></td><td>Prüft, dass die Katalogprüfung doppelt zugeordnete Style-IDs und Symbol-Styles außerhalb des Katalogs meldet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSymbolwahlUndPruefung<br><span class="testname">test_ausgelieferter_katalog_ist_konsistent</span></td><td>Prüft, dass der ausgelieferte Katalog data/basemap_legende.json ohne Fehler geprüft wird und Kreisstraße mit Kontur und Decker enthält.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_basemap_legende.py teststileundeintraege test_stil_aktiv_nur_eingeschaltet_und_im_zoombereich teststileundeintraege test_getroffene_stile_pruefen_layer_geometrie_zoom_und_filter teststileundeintraege test_eintraege_fassen_styles_zusammen_und_sortieren_nach_gruppe teststileundeintraege test_ausgeschlossene_und_unbekannte_styles testauswahlundeinstellungen test_vorauswahl_bekannte_an_unbekannte_aus testauswahlundeinstellungen test_auswahl_wird_gemerkt_und_vorbelegt testauswahlundeinstellungen test_merken_ergaenzt_die_bisherige_auswahl testauswahlundeinstellungen test_kaputte_projektvariable_ergibt_leere_auswahl testauswahlundeinstellungen test_auswertebereich_standard_und_umstellung testauswahlundeinstellungen test_legende_erzeugen_standard_an testlayererkennung test_erkennung_ueber_quelle_und_namen testlayererkennung test_sichtbare_layer_aus_thema_feste_liste_oder_layerbaum testablauf test_ohne_basemap_layer_passiert_nichts testablauf test_gewaehlte_eintraege_werden_geschrieben_und_gemerkt testablauf test_abbruch_im_dialog_aendert_nichts testablauf test_rueckfall_auf_druckbereich_wird_gemeldet testablauf test_ohne_objekte_keine_legende testablauf test_viele_kacheln_werden_vorher_bestaetigt" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-basemap-legende-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_basemap_legende.py</span><span class="card-meta"><span class="count-total">18 Testfälle</span><span class="cpill cpill-ok">18</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-basemap-legende-py"><p class="filedesc">Tests für modules/basemap_legende.py – Zuordnung, Auswahl und Ablauf der Basemap-Legende (Basis #88).</p><div class="gchips"><span class="gchip" title="">TestStileUndEintraege <b>4</b></span><span class="gchip" title="">TestAuswahlUndEinstellungen <b>6</b></span><span class="gchip" title="">TestLayerErkennung <b>2</b></span><span class="gchip" title="">TestAblauf <b>6</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_basemap_legende.py"])
|
||
class root rootnode
|
||
root --> g1["TestStileUndEintraege (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("stil_aktiv_nur_eingeschaltet_und_im_zoombereich")
|
||
g1 --> t2("getroffene_stile_pruefen_layer_geometrie_zoom_und_filter")
|
||
g1 --> t3("eintraege_fassen_styles_zusammen_und_sortieren_nach_gruppe")
|
||
g1 --> t4("ausgeschlossene_und_unbekannte_styles")
|
||
root --> g2["TestAuswahlUndEinstellungen (6)"]
|
||
class g2 groupnode
|
||
g2 --> t5("vorauswahl_bekannte_an_unbekannte_aus")
|
||
g2 --> t6("auswahl_wird_gemerkt_und_vorbelegt")
|
||
g2 --> t7("merken_ergaenzt_die_bisherige_auswahl")
|
||
g2 --> t8("kaputte_projektvariable_ergibt_leere_auswahl")
|
||
g2 --> t9("auswertebereich_standard_und_umstellung")
|
||
g2 --> t10("legende_erzeugen_standard_an")
|
||
root --> g3["TestLayerErkennung (2)"]
|
||
class g3 groupnode
|
||
g3 --> t11("erkennung_ueber_quelle_und_namen")
|
||
g3 --> t12("sichtbare_layer_aus_thema_feste_liste_oder_layerbaum")
|
||
root --> g4["TestAblauf (6)"]
|
||
class g4 groupnode
|
||
g4 --> t13("ohne_basemap_layer_passiert_nichts")
|
||
g4 --> t14("gewaehlte_eintraege_werden_geschrieben_und_gemerkt")
|
||
g4 --> t15("abbruch_im_dialog_aendert_nichts")
|
||
g4 --> t16("rueckfall_auf_druckbereich_wird_gemeldet")
|
||
g4 --> t17("ohne_objekte_keine_legende")
|
||
g4 --> t18("viele_kacheln_werden_vorher_bestaetigt")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 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></tr></thead><tbody><tr><td class="mono">TestStileUndEintraege<br><span class="testname">test_stil_aktiv_nur_eingeschaltet_und_im_zoombereich</span></td><td>Prüft, dass ein Style nur aktiv ist, wenn er eingeschaltet ist und die Zoomstufe im Bereich liegt (-1 = unbegrenzt).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStileUndEintraege<br><span class="testname">test_getroffene_stile_pruefen_layer_geometrie_zoom_und_filter</span></td><td>Prüft, dass ein Style nur Objekte seines Quell-Layers und Geometrietyps zählt, deren Filter zutrifft, und nur bei passender Zoomstufe.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStileUndEintraege<br><span class="testname">test_eintraege_fassen_styles_zusammen_und_sortieren_nach_gruppe</span></td><td>Prüft, dass mehrere Styles eines Katalogeintrags einen Eintrag ergeben und die Einträge nach Gruppen- und Katalogreihenfolge sortiert sind.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStileUndEintraege<br><span class="testname">test_ausgeschlossene_und_unbekannte_styles</span></td><td>Prüft, dass ausgeschlossene Styles entfallen und unbekannte Styles als nicht bekannter Eintrag in „Sonstiges“ landen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAuswahlUndEinstellungen<br><span class="testname">test_vorauswahl_bekannte_an_unbekannte_aus</span></td><td>Prüft, dass ohne gespeicherte Auswahl Katalogeinträge vorausgewählt und unbekannte Styles abgewählt sind.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAuswahlUndEinstellungen<br><span class="testname">test_auswahl_wird_gemerkt_und_vorbelegt</span></td><td>Prüft, dass ab- und angewählte Einträge in der Projektvariable gespeichert und beim nächsten Mal so vorbelegt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAuswahlUndEinstellungen<br><span class="testname">test_merken_ergaenzt_die_bisherige_auswahl</span></td><td>Prüft, dass das Merken die Auswahl nicht angezeigter Einträge aus früheren Läufen behält.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAuswahlUndEinstellungen<br><span class="testname">test_kaputte_projektvariable_ergibt_leere_auswahl</span></td><td>Prüft, dass eine nicht lesbare Projektvariable als leere Auswahl gilt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAuswahlUndEinstellungen<br><span class="testname">test_auswertebereich_standard_und_umstellung</span></td><td>Prüft, dass der Auswertebereich standardmäßig das Verfahrensgebiet ist, umgestellt werden kann und unbekannte Werte abgewiesen werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAuswahlUndEinstellungen<br><span class="testname">test_legende_erzeugen_standard_an</span></td><td>Prüft, dass das Erzeugen der Basemap-Legende standardmäßig eingeschaltet ist und abgeschaltet werden kann.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerErkennung<br><span class="testname">test_erkennung_ueber_quelle_und_namen</span></td><td>Prüft, dass der Basemap-Layer an Vektorkacheln mit basemap.de-Quelle erkannt wird, der Name nur als Rückfall dient und andere Layertypen nicht zählen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerErkennung<br><span class="testname">test_sichtbare_layer_aus_thema_feste_liste_oder_layerbaum</span></td><td>Prüft, dass die Layer der Karte aus dem Kartenthema, sonst aus der festen Layerliste, sonst aus dem sichtbaren Layerbaum kommen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAblauf<br><span class="testname">test_ohne_basemap_layer_passiert_nichts</span></td><td>Prüft, dass ohne sichtbaren Basemap-Layer weder Dialog noch Legende entstehen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAblauf<br><span class="testname">test_gewaehlte_eintraege_werden_geschrieben_und_gemerkt</span></td><td>Prüft, dass nur die im Dialog gewählten Einträge in die Legende geschrieben und die Auswahl gespeichert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAblauf<br><span class="testname">test_abbruch_im_dialog_aendert_nichts</span></td><td>Prüft, dass ein Abbruch im Auswahldialog die Legende nicht verändert und keine Auswahl speichert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAblauf<br><span class="testname">test_rueckfall_auf_druckbereich_wird_gemeldet</span></td><td>Prüft, dass ohne Verfahrensgebiet auf den Druckbereich zurückgefallen und das gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAblauf<br><span class="testname">test_ohne_objekte_keine_legende</span></td><td>Prüft, dass ohne Basemap-Objekte im Auswertebereich weder Dialog noch Legende entstehen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAblauf<br><span class="testname">test_viele_kacheln_werden_vorher_bestaetigt</span></td><td>Prüft, dass vor einer Auswertung mit sehr vielen Kacheln nachgefragt wird und eine Ablehnung die Auswertung abbricht.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_basemap_legende_layout.py testkennzeichenundkarte test_layout_kennzeichen_setzen_und_erkennen testkennzeichenundkarte test_hauptkarte_ueber_id testsymbolwahl test_symbolnamen_aus_aktiven_symbol_stilen_in_renderer_reihenfolge testsymbolwahl test_ohne_aktive_symbol_stile_erster_getroffener_style testautobahnsymbol test_druckmassstab_ab_zoom_14_blauer_decker_auf_grauer_kontur testautobahnsymbol test_zoom_11_bis_13_bisherige_kontur_und_decker testautobahnsymbol test_unter_zoom_11_blauer_decker testhilfslayer test_je_gruppe_und_geometrietyp_ein_leerer_hilfslayer testhilfslayer test_alte_hilfslayer_werden_entfernt testhilfslayer test_ohne_eintraege_wird_vorhandene_basemap_legende_entfernt testplatzierung test_einspaltig_ueber_der_quellenangabe testplatzierung test_mehrspaltig_wenn_hoehe_nicht_reicht testplatzierung test_spalten_ungleich_breit testplatzierung test_mindestgroesse_mit_ungleichen_spalten_und_umbruch testplatzierung test_neue_basemap_legende_mindestens_so_breit_wie_kartenschild testplatzierung test_titel_zweizeilig testplatzierung test_nie_breiter_als_der_seitenrand_mit_hinweis" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-basemap-legende-layout-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_basemap_legende_layout.py</span><span class="card-meta"><span class="count-total">17 Testfälle</span><span class="cpill cpill-ok">17</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-basemap-legende-layout-py"><p class="filedesc">Tests für modules/basemap_legende_layout.py – Basemap-Legende im Drucklayout (Basis #88).</p><div class="gchips"><span class="gchip" title="">TestKennzeichenUndKarte <b>2</b></span><span class="gchip" title="">TestSymbolwahl <b>2</b></span><span class="gchip" title="Autobahn-Symbol aus dem ausgelieferten Katalog (Basis #98).">TestAutobahnSymbol <b>3</b></span><span class="gchip" title="">TestHilfslayer <b>3</b></span><span class="gchip" title="">TestPlatzierung <b>7</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_basemap_legende_layout.py"])
|
||
class root rootnode
|
||
root --> g1["TestKennzeichenUndKarte (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("layout_kennzeichen_setzen_und_erkennen")
|
||
g1 --> t2("hauptkarte_ueber_id")
|
||
root --> g2["TestSymbolwahl (2)"]
|
||
class g2 groupnode
|
||
g2 --> t3("symbolnamen_aus_aktiven_symbol_stilen_in_renderer_reihenfolge")
|
||
g2 --> t4("ohne_aktive_symbol_stile_erster_getroffener_style")
|
||
root --> g3["TestAutobahnSymbol (3)"]
|
||
class g3 groupnode
|
||
g3 --> t5("druckmassstab_ab_zoom_14_blauer_decker_auf_grauer_kontur")
|
||
g3 --> t6("zoom_11_bis_13_bisherige_kontur_und_decker")
|
||
g3 --> t7("unter_zoom_11_blauer_decker")
|
||
root --> g4["TestHilfslayer (3)"]
|
||
class g4 groupnode
|
||
g4 --> t8("je_gruppe_und_geometrietyp_ein_leerer_hilfslayer")
|
||
g4 --> t9("alte_hilfslayer_werden_entfernt")
|
||
g4 --> t10("ohne_eintraege_wird_vorhandene_basemap_legende_entfernt")
|
||
root --> g5["TestPlatzierung (7)"]
|
||
class g5 groupnode
|
||
g5 --> t11("einspaltig_ueber_der_quellenangabe")
|
||
g5 --> t12("mehrspaltig_wenn_hoehe_nicht_reicht")
|
||
g5 --> t13("spalten_ungleich_breit")
|
||
g5 --> t14("mindestgroesse_mit_ungleichen_spalten_und_umbruch")
|
||
g5 --> t15("neue_basemap_legende_mindestens_so_breit_wie_kartenschild")
|
||
g5 --> t16("titel_zweizeilig")
|
||
g5 --> t17("nie_breiter_als_der_seitenrand_mit_hinweis")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 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></tr></thead><tbody><tr><td class="mono">TestKennzeichenUndKarte<br><span class="testname">test_layout_kennzeichen_setzen_und_erkennen</span></td><td>Prüft, dass ein markiertes Layout als Nutzer der Basemap-Legende erkannt und in der Projektliste geführt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKennzeichenUndKarte<br><span class="testname">test_hauptkarte_ueber_id</span></td><td>Prüft, dass die Karte mit der ID „Hauptkarte“ gefunden wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSymbolwahl<br><span class="testname">test_symbolnamen_aus_aktiven_symbol_stilen_in_renderer_reihenfolge</span></td><td>Prüft, dass die Symbol-Styles des Katalogs in Zeichenreihenfolge genommen und inaktive übergangen werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSymbolwahl<br><span class="testname">test_ohne_aktive_symbol_stile_erster_getroffener_style</span></td><td>Prüft, dass ohne aktiven Symbol-Style der erste tatsächlich getroffene Style das Legendensymbol liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAutobahnSymbol<br><span class="testname">test_druckmassstab_ab_zoom_14_blauer_decker_auf_grauer_kontur</span></td><td>Prüft, dass das Autobahn-Symbol ab Zoom 14 aus grauer Kontur und blauem Decker der Fahrbahnachse besteht statt nur aus einem grauen Style.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAutobahnSymbol<br><span class="testname">test_zoom_11_bis_13_bisherige_kontur_und_decker</span></td><td>Prüft, dass das Autobahn-Symbol bei Zoom 11 bis 13 weiterhin aus Kontur und Decker der getrennten Fahrbahn besteht.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAutobahnSymbol<br><span class="testname">test_unter_zoom_11_blauer_decker</span></td><td>Prüft, dass das Autobahn-Symbol unter Zoom 11 den blauen Decker der Übersichtsdarstellung nutzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHilfslayer<br><span class="testname">test_je_gruppe_und_geometrietyp_ein_leerer_hilfslayer</span></td><td>Prüft, dass je Gruppe und Geometrietyp ein Hilfslayer außerhalb des Layerbaums entsteht, Flächen vor Linien, ohne Rückfrage beim Schließen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHilfslayer<br><span class="testname">test_alte_hilfslayer_werden_entfernt</span></td><td>Prüft, dass die Hilfslayer einer früheren Basemap-Legende des Layouts aus dem Projekt entfernt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHilfslayer<br><span class="testname">test_ohne_eintraege_wird_vorhandene_basemap_legende_entfernt</span></td><td>Prüft, dass ohne gewählte Einträge eine vorhandene Basemap-Legende entfernt und die Auswahl am Layout vermerkt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPlatzierung<br><span class="testname">test_einspaltig_ueber_der_quellenangabe</span></td><td>Prüft, dass die Basemap-Legende einspaltig unten an der Quellenangabe verankert wird, wenn der Platz reicht.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPlatzierung<br><span class="testname">test_mehrspaltig_wenn_hoehe_nicht_reicht</span></td><td>Prüft, dass die Legende zwei- oder dreispaltig wird, wenn sie einspaltig nicht zwischen Hauptlegende und Quellenangabe passt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPlatzierung<br><span class="testname">test_spalten_ungleich_breit</span></td><td>Prüft, dass die Basemap-Legende ungleich breite Spalten bekommt (#96).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPlatzierung<br><span class="testname">test_mindestgroesse_mit_ungleichen_spalten_und_umbruch</span></td><td>Prüft, dass der Platzbedarf mit ungleich breiten Spalten und Textumbruch berechnet wird (#96).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPlatzierung<br><span class="testname">test_neue_basemap_legende_mindestens_so_breit_wie_kartenschild</span></td><td>Prüft, dass eine neu angelegte Basemap-Legende die Breite des Kartenschilds als Mindestbreite bekommt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPlatzierung<br><span class="testname">test_titel_zweizeilig</span></td><td>Prüft, dass der Titel der Basemap-Legende zweizeilig ist, damit er die Mindestbreite nicht bestimmt (#96).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPlatzierung<br><span class="testname">test_nie_breiter_als_der_seitenrand_mit_hinweis</span></td><td>Prüft, dass keine Spaltenzahl gewählt wird, die über den Seitenrand ragt, und dann ein Hinweis kommt.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_basemap_legende_rand.py testbrauchtlegendenrand test_weisse_flaeche_ohne_rand testbrauchtlegendenrand test_farbige_flaeche_oder_flaeche_mit_kontur testbrauchtlegendenrand test_heller_rand_und_fast_weiss_zaehlen_als_unsichtbar testbrauchtlegendenrand test_andere_ebenen_und_leeres_symbol testergaenzelegendenrand test_weisse_flaeche_bekommt_grauen_rand testergaenzelegendenrand test_farbige_flaeche_und_linien_bleiben_unveraendert" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-basemap-legende-rand-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_basemap_legende_rand.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-basemap-legende-rand-py"><p class="filedesc">Tests für den Legendenrand weißer Basemap-Flächen (Basis #92).</p><div class="gchips"><span class="gchip" title="">TestBrauchtLegendenrand <b>4</b></span><span class="gchip" title="">TestErgaenzeLegendenrand <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_basemap_legende_rand.py"])
|
||
class root rootnode
|
||
root --> g1["TestBrauchtLegendenrand (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("weisse_flaeche_ohne_rand")
|
||
g1 --> t2("farbige_flaeche_oder_flaeche_mit_kontur")
|
||
g1 --> t3("heller_rand_und_fast_weiss_zaehlen_als_unsichtbar")
|
||
g1 --> t4("andere_ebenen_und_leeres_symbol")
|
||
root --> g2["TestErgaenzeLegendenrand (2)"]
|
||
class g2 groupnode
|
||
g2 --> t5("weisse_flaeche_bekommt_grauen_rand")
|
||
g2 --> t6("farbige_flaeche_und_linien_bleiben_unveraendert")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 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></tr></thead><tbody><tr><td class="mono">TestBrauchtLegendenrand<br><span class="testname">test_weisse_flaeche_ohne_rand</span></td><td>Prüft, dass eine weiße Fläche ohne Umrandung einen Legendenrand braucht.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBrauchtLegendenrand<br><span class="testname">test_farbige_flaeche_oder_flaeche_mit_kontur</span></td><td>Prüft, dass farbige Flächen und weiße Flächen mit dunkler Kontur oder eigener Konturlinie keinen Rand bekommen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBrauchtLegendenrand<br><span class="testname">test_heller_rand_und_fast_weiss_zaehlen_als_unsichtbar</span></td><td>Prüft, dass fast weiße Füllungen und helle oder durchsichtige Ränder als unsichtbar gelten.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBrauchtLegendenrand<br><span class="testname">test_andere_ebenen_und_leeres_symbol</span></td><td>Prüft, dass Symbole mit anderen Ebenen (Muster, Punkte) und leere Symbole keinen Rand bekommen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErgaenzeLegendenrand<br><span class="testname">test_weisse_flaeche_bekommt_grauen_rand</span></td><td>Prüft, dass eine weiße Fläche ohne Kontur eine graue Randlinie als oberste Ebene bekommt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErgaenzeLegendenrand<br><span class="testname">test_farbige_flaeche_und_linien_bleiben_unveraendert</span></td><td>Prüft, dass farbige Flächen, Flächen mit Kontur und Liniensymbole keinen Rand bekommen.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_basemap_stilkorrektur.py testmusterundausdruck test_strichlaenge_null_im_festen_muster testmusterundausdruck test_strichlaenge_null_im_zoomabhaengigen_ausdruck testlayerkorrektur test_punktlinien_werden_korrigiert_andere_styles_nicht testlayerkorrektur test_zweiter_lauf_korrigiert_nichts testlayerkorrektur test_nur_ausdruck_ohne_festes_muster testlayerkorrektur test_layer_ohne_renderer" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-basemap-stilkorrektur-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_basemap_stilkorrektur.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-basemap-stilkorrektur-py"><p class="filedesc">Tests für modules/basemap_stilkorrektur.py – Punktlinien des Basemap-Layers sichtbar machen (Basis #90).</p><div class="gchips"><span class="gchip" title="">TestMusterUndAusdruck <b>2</b></span><span class="gchip" title="">TestLayerkorrektur <b>4</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_basemap_stilkorrektur.py"])
|
||
class root rootnode
|
||
root --> g1["TestMusterUndAusdruck (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("strichlaenge_null_im_festen_muster")
|
||
g1 --> t2("strichlaenge_null_im_zoomabhaengigen_ausdruck")
|
||
root --> g2["TestLayerkorrektur (4)"]
|
||
class g2 groupnode
|
||
g2 --> t3("punktlinien_werden_korrigiert_andere_styles_nicht")
|
||
g2 --> t4("zweiter_lauf_korrigiert_nichts")
|
||
g2 --> t5("nur_ausdruck_ohne_festes_muster")
|
||
g2 --> t6("layer_ohne_renderer")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 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></tr></thead><tbody><tr><td class="mono">TestMusterUndAusdruck<br><span class="testname">test_strichlaenge_null_im_festen_muster</span></td><td>Prüft, dass Strichlängen 0 (gerade Positionen) im Strichmuster ersetzt und Lücken der Länge 0 nicht verändert werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestMusterUndAusdruck<br><span class="testname">test_strichlaenge_null_im_zoomabhaengigen_ausdruck</span></td><td>Prüft, dass jede Strichlänge 0 in den array(...)-Mustern des Konverter-Ausdrucks ersetzt wird und der übrige Ausdruck gleich bleibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerkorrektur<br><span class="testname">test_punktlinien_werden_korrigiert_andere_styles_nicht</span></td><td>Prüft, dass nur Styles mit Strichlänge 0 korrigiert werden – Muster und Ausdruck – und die Anzahl zurückkommt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerkorrektur<br><span class="testname">test_zweiter_lauf_korrigiert_nichts</span></td><td>Prüft, dass ein zweiter Lauf keine Styles mehr korrigiert und nicht neu zeichnen lässt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerkorrektur<br><span class="testname">test_nur_ausdruck_ohne_festes_muster</span></td><td>Prüft, dass auch ein Style korrigiert wird, dessen Strichlänge 0 nur im zoomabhängigen Ausdruck steht.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerkorrektur<br><span class="testname">test_layer_ohne_renderer</span></td><td>Prüft, dass ein Layer ohne Renderer 0 korrigierte Styles liefert.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_basemap_stilvorlagen.py teststilvorlagen test_speichern_und_auflisten teststilvorlagen test_mehrere_varianten_alphabetisch teststilvorlagen test_leerer_name_oder_fehler_beim_schreiben teststilvorlagen test_laden_setzt_stil_und_zeichnet_neu teststilvorlagen test_passung_meldet_fremde_styles teststilvorlagen test_standard_setzen_und_beim_loeschen_entfernen teststilvorlagen test_fehlende_begleitdatei_wird_toleriert teststilvorlagen test_ohne_ordner_leere_liste testexportimport test_export_und_import_uebertragen_vorlage_mit_begleitdaten testexportimport test_export_einer_fehlenden_vorlage testexportimport test_import_einer_reinen_qml_datei testexportimport test_import_lehnt_ungeeignete_dateien_ab testexportimport test_import_uebernimmt_nur_bekannte_begleitdaten testexportimport test_thema_der_vorlage_passt_nicht_zum_layer" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-basemap-stilvorlagen-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_basemap_stilvorlagen.py</span><span class="card-meta"><span class="count-total">14 Testfälle</span><span class="cpill cpill-ok">14</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-basemap-stilvorlagen-py"><p class="filedesc">Tests für modules/basemap_stilvorlagen.py – lokale Stilvorlagen des Basemap-Layers (Basis #88),</p><div class="gchips"><span class="gchip" title="">TestStilvorlagen <b>8</b></span><span class="gchip" title="">TestExportImport <b>6</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_basemap_stilvorlagen.py"])
|
||
class root rootnode
|
||
root --> g1["TestStilvorlagen (8)"]
|
||
class g1 groupnode
|
||
g1 --> t1("speichern_und_auflisten")
|
||
g1 --> t2("mehrere_varianten_alphabetisch")
|
||
g1 --> t3("leerer_name_oder_fehler_beim_schreiben")
|
||
g1 --> t4("laden_setzt_stil_und_zeichnet_neu")
|
||
g1 --> t5("passung_meldet_fremde_styles")
|
||
g1 --> t6("standard_setzen_und_beim_loeschen_entfernen")
|
||
g1 --> t7("fehlende_begleitdatei_wird_toleriert")
|
||
g1 --> t8("ohne_ordner_leere_liste")
|
||
root --> g2["TestExportImport (6)"]
|
||
class g2 groupnode
|
||
g2 --> t9("export_und_import_uebertragen_vorlage_mit_begleitdaten")
|
||
g2 --> t10("export_einer_fehlenden_vorlage")
|
||
g2 --> t11("import_einer_reinen_qml_datei")
|
||
g2 --> t12("import_lehnt_ungeeignete_dateien_ab")
|
||
g2 --> t13("import_uebernimmt_nur_bekannte_begleitdaten")
|
||
g2 --> t14("thema_der_vorlage_passt_nicht_zum_layer")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 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></tr></thead><tbody><tr><td class="mono">TestStilvorlagen<br><span class="testname">test_speichern_und_auflisten</span></td><td>Prüft, dass eine gespeicherte Vorlage mit Anzeigenamen, QML-Datei und Begleitdatei aufgelistet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlagen<br><span class="testname">test_mehrere_varianten_alphabetisch</span></td><td>Prüft, dass mehrere Varianten nebeneinander bestehen und alphabetisch nach Anzeigename sortiert werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlagen<br><span class="testname">test_leerer_name_oder_fehler_beim_schreiben</span></td><td>Prüft, dass ein leerer Name und ein Schreibfehler von QGIS als ValueError gemeldet werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlagen<br><span class="testname">test_laden_setzt_stil_und_zeichnet_neu</span></td><td>Prüft, dass das Laden die QML-Datei der Vorlage in den Layer lädt und neu zeichnen lässt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlagen<br><span class="testname">test_passung_meldet_fremde_styles</span></td><td>Prüft, dass Style-Namen der Vorlage gemeldet werden, die der Ziel-Layer nicht kennt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlagen<br><span class="testname">test_standard_setzen_und_beim_loeschen_entfernen</span></td><td>Prüft, dass eine Vorlage als Standard markiert wird und die Markierung beim Löschen der Vorlage entfällt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlagen<br><span class="testname">test_fehlende_begleitdatei_wird_toleriert</span></td><td>Prüft, dass eine QML-Datei ohne Begleitdatei mit ihrem Dateinamen aufgelistet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlagen<br><span class="testname">test_ohne_ordner_leere_liste</span></td><td>Prüft, dass ohne angelegten Vorlagenordner eine leere Liste zurückkommt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExportImport<br><span class="testname">test_export_und_import_uebertragen_vorlage_mit_begleitdaten</span></td><td>Prüft, dass eine exportierte Vorlage auf einem anderen Rechner mit Anzeigename, Thema, Style-Namen und Legendenauswahl ankommt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExportImport<br><span class="testname">test_export_einer_fehlenden_vorlage</span></td><td>Prüft, dass der Export einer nicht vorhandenen Vorlage als ValueError gemeldet wird und keine Datei entsteht.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExportImport<br><span class="testname">test_import_einer_reinen_qml_datei</span></td><td>Prüft, dass eine QML-Datei ohne Begleitdatei mit dem Dateinamen als Namensvorschlag und ohne Thema übernommen wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExportImport<br><span class="testname">test_import_lehnt_ungeeignete_dateien_ab</span></td><td>Prüft, dass Dateien ohne QGIS-Stil und ZIP-Dateien ohne genau eine QML-Datei abgelehnt werden, ohne etwas anzulegen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExportImport<br><span class="testname">test_import_uebernimmt_nur_bekannte_begleitdaten</span></td><td>Prüft, dass ein Import unbekannte oder falsch typisierte Angaben der Begleitdatei verwirft und den gewählten Namen nutzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExportImport<br><span class="testname">test_thema_der_vorlage_passt_nicht_zum_layer</span></td><td>Prüft, dass ein abweichendes Thema der Vorlage gemeldet wird und ohne Thema in Vorlage oder Layer keine Meldung kommt.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_basemap_themen.py testquelleundthema test_quelle_enthaelt_kachel_url_und_style_des_themas testquelleundthema test_unbekannte_style_json_ergibt_kein_thema testquelleundthema test_unbekannter_schluessel_faellt_auf_farbe_zurueck testquelleundthema test_vorhandener_layer_wird_an_der_quell_url_erkannt testpruefwert test_gleiche_darstellung_gleicher_pruefwert_auch_bei_anderer_qgis_version testpruefwert test_ohne_ausgabe_der_darstellung_kein_pruefwert testpruefwert test_aenderungsstand_unbekannt_unveraendert_geaendert testlayerundthemenwechsel test_neuer_layer_hat_thema_namen_und_gemerkten_stand testlayerundthemenwechsel test_ungueltiger_layer_oder_fehlender_themenstil_meldet_fehler testlayerundthemenwechsel test_ohne_vektorkacheln_kein_layer testlayerundthemenwechsel test_layer_kommt_ganz_unten_in_den_layerbaum testlayerundthemenwechsel test_themenwechsel_stellt_quelle_um_und_merkt_neuen_stand testlayerundthemenwechsel test_themenwechsel_behaelt_eigenen_layernamen testlayerundthemenwechsel test_themenwechsel_ohne_umstellbare_quelle_meldet_fehler teststilvorlagemitthema test_stilvorlage_vermerkt_das_thema testauswahldialog test_mock_modus_liefert_vorbelegung testbasemaphinzufuegen test_ohne_vorhandenen_layer_wird_ohne_rueckfrage_hinzugefuegt testbasemaphinzufuegen test_vorhandener_layer_wird_in_der_rueckfrage_genannt_abbrechen testbasemaphinzufuegen test_zusaetzlich_laden_fuegt_zweiten_layer_hinzu testbasemaphinzufuegen test_ersetzen_laedt_vorhandenen_layer_im_gewaehlten_thema testbasemaphinzufuegen test_fehler_beim_anlegen_wird_gemeldet testthemawechseln test_unveraenderter_layer_wechselt_ohne_rueckfrage testthemawechseln test_gleiches_thema_aendert_nichts testthemawechseln test_geaenderte_darstellung_abbrechen_behaelt_thema testthemawechseln test_geaenderte_darstellung_verwerfen_wechselt testthemawechseln test_als_stil_speichern_sichert_vor_dem_wechsel testthemawechseln test_abgebrochenes_speichern_verhindert_den_wechsel testthemawechseln test_unbekannter_stand_fragt_nach testthemawechseln test_ohne_basemap_layer_nur_vorauswahl testziellayer test_ausgewaehlter_basemap_layer_hat_vorrang" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-basemap-themen-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_basemap_themen.py</span><span class="card-meta"><span class="count-total">30 Testfälle</span><span class="cpill cpill-ok">30</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-basemap-themen-py"><p class="filedesc">Tests für modules/basemap_themen.py und den Abschnitt „Basemap-Layer“ im Basemap-Bereich (Basis #100):</p><div class="gchips"><span class="gchip" title="Layerquelle der Themen, Thema eines Layers und Erkennung über die Kachel-URL.">TestQuelleUndThema <b>4</b></span><span class="gchip" title="Prüfwert der Darstellung und Änderungsstand für ungespeicherte Änderungen.">TestPruefwert <b>3</b></span><span class="gchip" title="Basemap-Layer anlegen, in den Layerbaum einfügen und Thema wechseln.">TestLayerUndThemenwechsel <b>7</b></span><span class="gchip" title="Stilvorlagen vermerken das Thema des Layers.">TestStilvorlageMitThema <b>1</b></span><span class="gchip" title="Rückfrage mit frei benannten Knöpfen.">TestAuswahlDialog <b>1</b></span><span class="gchip" title="Knopf „Basemap hinzufügen“ mit Rückfrage bei vorhandenem Layer gleicher Quelle.">TestBasemapHinzufuegen <b>5</b></span><span class="gchip" title="Themenauswahl mit Rückfrage bei geänderter oder unbekannter Darstellung.">TestThemaWechseln <b>8</b></span><span class="gchip" title="Auswahl des Basemap-Layers, auf den Thema und Stil wirken.">TestZielLayer <b>1</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_basemap_themen.py"])
|
||
class root rootnode
|
||
root --> g1["TestQuelleUndThema (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("quelle_enthaelt_kachel_url_und_style_des_themas")
|
||
g1 --> t2("unbekannte_style_json_ergibt_kein_thema")
|
||
g1 --> t3("unbekannter_schluessel_faellt_auf_farbe_zurueck")
|
||
g1 --> t4("vorhandener_layer_wird_an_der_quell_url_erkannt")
|
||
root --> g2["TestPruefwert (3)"]
|
||
class g2 groupnode
|
||
g2 --> t5("gleiche_darstellung_gleicher_pruefwert_auch_bei_anderer_qgis_version")
|
||
g2 --> t6("ohne_ausgabe_der_darstellung_kein_pruefwert")
|
||
g2 --> t7("aenderungsstand_unbekannt_unveraendert_geaendert")
|
||
root --> g3["TestLayerUndThemenwechsel (7)"]
|
||
class g3 groupnode
|
||
g3 --> t8("neuer_layer_hat_thema_namen_und_gemerkten_stand")
|
||
g3 --> t9("ungueltiger_layer_oder_fehlender_themenstil_meldet_fehler")
|
||
g3 --> t10("ohne_vektorkacheln_kein_layer")
|
||
g3 --> t11("layer_kommt_ganz_unten_in_den_layerbaum")
|
||
g3 --> t12("themenwechsel_stellt_quelle_um_und_merkt_neuen_stand")
|
||
g3 --> t13("themenwechsel_behaelt_eigenen_layernamen")
|
||
g3 --> t14("themenwechsel_ohne_umstellbare_quelle_meldet_fehler")
|
||
root --> g4["TestStilvorlageMitThema (1)"]
|
||
class g4 groupnode
|
||
g4 --> t15("stilvorlage_vermerkt_das_thema")
|
||
root --> g5["TestAuswahlDialog (1)"]
|
||
class g5 groupnode
|
||
g5 --> t16("mock_modus_liefert_vorbelegung")
|
||
root --> g6["TestBasemapHinzufuegen (5)"]
|
||
class g6 groupnode
|
||
g6 --> t17("ohne_vorhandenen_layer_wird_ohne_rueckfrage_hinzugefuegt")
|
||
g6 --> t18("vorhandener_layer_wird_in_der_rueckfrage_genannt_abbrechen")
|
||
g6 --> t19("zusaetzlich_laden_fuegt_zweiten_layer_hinzu")
|
||
g6 --> t20("ersetzen_laedt_vorhandenen_layer_im_gewaehlten_thema")
|
||
g6 --> t21("fehler_beim_anlegen_wird_gemeldet")
|
||
root --> g7["TestThemaWechseln (8)"]
|
||
class g7 groupnode
|
||
g7 --> t22("unveraenderter_layer_wechselt_ohne_rueckfrage")
|
||
g7 --> t23("gleiches_thema_aendert_nichts")
|
||
g7 --> t24("geaenderte_darstellung_abbrechen_behaelt_thema")
|
||
g7 --> t25("geaenderte_darstellung_verwerfen_wechselt")
|
||
g7 --> t26("als_stil_speichern_sichert_vor_dem_wechsel")
|
||
g7 --> t27("abgebrochenes_speichern_verhindert_den_wechsel")
|
||
g7 --> t28("unbekannter_stand_fragt_nach")
|
||
g7 --> t29("ohne_basemap_layer_nur_vorauswahl")
|
||
root --> g8["TestZielLayer (1)"]
|
||
class g8 groupnode
|
||
g8 --> t30("ausgewaehlter_basemap_layer_hat_vorrang")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 ok
|
||
class t21 ok
|
||
class t22 ok
|
||
class t23 ok
|
||
class t24 ok
|
||
class t25 ok
|
||
class t26 ok
|
||
class t27 ok
|
||
class t28 ok
|
||
class t29 ok
|
||
class t30 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></tr></thead><tbody><tr><td class="mono">TestQuelleUndThema<br><span class="testname">test_quelle_enthaelt_kachel_url_und_style_des_themas</span></td><td>Prüft, dass die Layerquelle eines Themas die gemeinsame Kachel-URL und die Style-JSON des Themas enthält.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestQuelleUndThema<br><span class="testname">test_unbekannte_style_json_ergibt_kein_thema</span></td><td>Prüft, dass ein Layer mit fremder oder fehlender Style-JSON keinem Thema zugeordnet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestQuelleUndThema<br><span class="testname">test_unbekannter_schluessel_faellt_auf_farbe_zurueck</span></td><td>Prüft, dass ein unbekannter Themenschlüssel auf das Standardthema „Farbe“ zurückfällt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestQuelleUndThema<br><span class="testname">test_vorhandener_layer_wird_an_der_quell_url_erkannt</span></td><td>Prüft, dass ein vorhandener Basemap-Layer an der Kachel-URL erkannt wird – unabhängig von Name, Thema und URL-Kodierung.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefwert<br><span class="testname">test_gleiche_darstellung_gleicher_pruefwert_auch_bei_anderer_qgis_version</span></td><td>Prüft, dass dieselbe Darstellung denselben Prüfwert ergibt, auch wenn die QGIS-Version in der QML abweicht.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefwert<br><span class="testname">test_ohne_ausgabe_der_darstellung_kein_pruefwert</span></td><td>Prüft, dass kein Prüfwert entsteht, wenn der Layer seine Darstellung nicht ausgeben kann.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefwert<br><span class="testname">test_aenderungsstand_unbekannt_unveraendert_geaendert</span></td><td>Prüft, dass der Änderungsstand ohne gemerkten Prüfwert „unbekannt“ ist, nach dem Merken „unverändert“ und nach einer Änderung „geändert“.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerUndThemenwechsel<br><span class="testname">test_neuer_layer_hat_thema_namen_und_gemerkten_stand</span></td><td>Prüft, dass ein neuer Basemap-Layer im gewählten Thema entsteht, den Themenstil lädt und als unverändert gilt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerUndThemenwechsel<br><span class="testname">test_ungueltiger_layer_oder_fehlender_themenstil_meldet_fehler</span></td><td>Prüft, dass ein ungültiger Layer oder ein nicht ladbarer Themenstil als ValueError gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerUndThemenwechsel<br><span class="testname">test_ohne_vektorkacheln_kein_layer</span></td><td>Prüft, dass ohne Vektorkachel-Unterstützung (Mock-Modus) kein Layer erzeugt, sondern ein Fehler gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerUndThemenwechsel<br><span class="testname">test_layer_kommt_ganz_unten_in_den_layerbaum</span></td><td>Prüft, dass der Basemap-Layer ohne automatische Einordnung ins Projekt kommt und unten an den Layerbaum angehängt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerUndThemenwechsel<br><span class="testname">test_themenwechsel_stellt_quelle_um_und_merkt_neuen_stand</span></td><td>Prüft, dass der Themenwechsel die Style-JSON der Quelle umstellt, den Themenstil lädt, den automatischen Namen anpasst und den neuen Stand merkt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerUndThemenwechsel<br><span class="testname">test_themenwechsel_behaelt_eigenen_layernamen</span></td><td>Prüft, dass ein vom Nutzer vergebener Layername beim Themenwechsel erhalten bleibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerUndThemenwechsel<br><span class="testname">test_themenwechsel_ohne_umstellbare_quelle_meldet_fehler</span></td><td>Prüft, dass ein Layer ohne setDataSource den Themenwechsel mit einem ValueError ablehnt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestStilvorlageMitThema<br><span class="testname">test_stilvorlage_vermerkt_das_thema</span></td><td>Prüft, dass eine gespeicherte Stilvorlage das Thema des Layers in ihrer Begleitdatei und in der Liste vermerkt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAuswahlDialog<br><span class="testname">test_mock_modus_liefert_vorbelegung</span></td><td>Prüft, dass die Rückfrage mit frei benannten Knöpfen im Mock-Modus den vorbelegten Schlüssel liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapHinzufuegen<br><span class="testname">test_ohne_vorhandenen_layer_wird_ohne_rueckfrage_hinzugefuegt</span></td><td>Prüft, dass ohne Basemap-Layer gleicher Quelle sofort ein Layer im gewählten Thema hinzugefügt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapHinzufuegen<br><span class="testname">test_vorhandener_layer_wird_in_der_rueckfrage_genannt_abbrechen</span></td><td>Prüft, dass ein vorhandener Layer gleicher Quelle in der Rückfrage genannt wird und „Abbrechen“ nichts verändert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapHinzufuegen<br><span class="testname">test_zusaetzlich_laden_fuegt_zweiten_layer_hinzu</span></td><td>Prüft, dass „Zusätzlich laden“ einen weiteren Basemap-Layer neben dem vorhandenen hinzufügt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapHinzufuegen<br><span class="testname">test_ersetzen_laedt_vorhandenen_layer_im_gewaehlten_thema</span></td><td>Prüft, dass „Ersetzen“ keinen neuen Layer anlegt, sondern den vorhandenen im gewählten Thema neu lädt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBasemapHinzufuegen<br><span class="testname">test_fehler_beim_anlegen_wird_gemeldet</span></td><td>Prüft, dass ein nicht erreichbarer Dienst als Warnung gemeldet und kein Layer hinzugefügt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestThemaWechseln<br><span class="testname">test_unveraenderter_layer_wechselt_ohne_rueckfrage</span></td><td>Prüft, dass ein unveränderter Basemap-Layer ohne Rückfrage auf das gewählte Thema wechselt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestThemaWechseln<br><span class="testname">test_gleiches_thema_aendert_nichts</span></td><td>Prüft, dass die Wahl des Themas, das der Layer schon hat, nichts neu lädt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestThemaWechseln<br><span class="testname">test_geaenderte_darstellung_abbrechen_behaelt_thema</span></td><td>Prüft, dass bei geänderter Darstellung nachgefragt wird und „Abbrechen“ Thema und Darstellung unverändert lässt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestThemaWechseln<br><span class="testname">test_geaenderte_darstellung_verwerfen_wechselt</span></td><td>Prüft, dass „Verwerfen“ die geänderte Darstellung aufgibt und das Thema wechselt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestThemaWechseln<br><span class="testname">test_als_stil_speichern_sichert_vor_dem_wechsel</span></td><td>Prüft, dass „Als Stil speichern“ die Darstellung vor dem Themenwechsel als Stilvorlage sichert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestThemaWechseln<br><span class="testname">test_abgebrochenes_speichern_verhindert_den_wechsel</span></td><td>Prüft, dass das Thema nicht wechselt, wenn „Als Stil speichern“ gewählt, die Namensabfrage aber abgebrochen wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestThemaWechseln<br><span class="testname">test_unbekannter_stand_fragt_nach</span></td><td>Prüft, dass bei einem Layer ohne gemerkten Prüfwert (vor dieser Funktion geladen) vorsichtshalber nachgefragt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestThemaWechseln<br><span class="testname">test_ohne_basemap_layer_nur_vorauswahl</span></td><td>Prüft, dass die Themenwahl ohne Basemap-Layer nur als Vorauswahl für „Basemap hinzufügen“ dient und nichts meldet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestZielLayer<br><span class="testname">test_ausgewaehlter_basemap_layer_hat_vorrang</span></td><td>Prüft, dass der im Layerbaum ausgewählte Basemap-Layer Ziel des Themenwechsels ist, sonst der erste Basemap-Layer.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_bootstrap.py " data-hasred="0" data-hasskip="0" data-nodoc="1"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-bootstrap-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_bootstrap.py</span><span class="card-meta"><span class="count-total">0 Testfälle</span><span class="docbadge" title="Anteil mit Docstring">0% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-bootstrap-py"><p class="filedesc">— (Docstring fehlt)</p><p class="empty-note">Keine Testfälle: Die Datei enthält keine <span class="mono">unittest.TestCase</span>-Klasse – sie ist eine reine Hilfsdatei, die beim Testlauf nur importiert wird.</p></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_datagrabber.py testdatagrabber test_analyze_source_type_detects_excel testdatagrabber test_analyze_source_type_returns_unknown_filetype testdatagrabber test_analyze_source_type_detects_service_when_file_check_fails testdatagrabber test_analyze_source_type_returns_unbekannte_quelle_on_full_failure testdatagrabber test_run_returns_success_summary_with_valid_rows testdatagrabber test_run_returns_failure_summary_without_rows testdatagrabber test_aggregate_results_mit_zeilen_liefert_erfolgsergebnis testdatagrabber test_aggregate_results_ohne_zeilen_liefert_keine_validen_eintraege" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-datagrabber-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_datagrabber.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-datagrabber-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestDataGrabber <b>8</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_datagrabber.py"])
|
||
class root rootnode
|
||
root --> g1["TestDataGrabber (8)"]
|
||
class g1 groupnode
|
||
g1 --> t1("analyze_source_type_detects_excel")
|
||
g1 --> t2("analyze_source_type_returns_unknown_filetype")
|
||
g1 --> t3("analyze_source_type_detects_service_when_file_check_fails")
|
||
g1 --> t4("analyze_source_type_returns_unbekannte_quelle_on_full_failure")
|
||
g1 --> t5("run_returns_success_summary_with_valid_rows")
|
||
g1 --> t6("run_returns_failure_summary_without_rows")
|
||
g1 --> t7("aggregate_results_mit_zeilen_liefert_erfolgsergebnis")
|
||
g1 --> t8("aggregate_results_ohne_zeilen_liefert_keine_validen_eintraege")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 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></tr></thead><tbody><tr><td class="mono">TestDataGrabber<br><span class="testname">test_analyze_source_type_detects_excel</span></td><td>Prüft, dass eine erreichbare .xlsx-Datei als Quelltyp 'excel' erkannt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDataGrabber<br><span class="testname">test_analyze_source_type_returns_unknown_filetype</span></td><td>Prüft, dass eine erreichbare Datei mit unbekannter Endung als 'unbekannter_dateityp' eingestuft wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDataGrabber<br><span class="testname">test_analyze_source_type_detects_service_when_file_check_fails</span></td><td>Prüft, dass eine Quelle als 'dienst' erkannt wird, wenn die Dateiprüfung fehlschlägt, die URL aber erreichbar ist.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDataGrabber<br><span class="testname">test_analyze_source_type_returns_unbekannte_quelle_on_full_failure</span></td><td>Prüft, dass eine Quelle als 'unbekannte_quelle' eingestuft wird, wenn weder Datei- noch Linkprüfung erfolgreich sind.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDataGrabber<br><span class="testname">test_run_returns_success_summary_with_valid_rows</span></td><td>Prüft, dass run() bei erfolgreichem Excel-Import eine Erfolgsmeldung mit den geladenen Zeilen liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDataGrabber<br><span class="testname">test_run_returns_failure_summary_without_rows</span></td><td>Prüft, dass run() bei nicht erkennbarer Quelle eine Fehlermeldung ohne Zeilen liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDataGrabber<br><span class="testname">test_aggregate_results_mit_zeilen_liefert_erfolgsergebnis</span></td><td>Prüft, dass _aggregate_results bei vorhandenen Zeilen ein Erfolgsergebnis mit Zeilenzahl liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDataGrabber<br><span class="testname">test_aggregate_results_ohne_zeilen_liefert_keine_validen_eintraege</span></td><td>Prüft, dass _aggregate_results ohne Zeilen ok=False mit Aktion 'keine_validen_eintraege' liefert.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_dateipruefer.py testdateipruefer test_leereingabe_erlaubt testdateipruefer test_leereingabe_nicht_erlaubt testdateipruefer test_standarddatei_vorschlagen testdateipruefer test_temporaer_erlaubt testdateipruefer test_datei_nicht_gefunden testdateipruefer test_datei_ok testdateipruefer test_erkenne_dateityp_unterscheidet_excel_datenbank_und_unbekannt testdateipruefer test_pfad_verbindet_relativen_pfad_mit_basispfad testdateipruefer test_pfad_laesst_absoluten_pfad_unveraendert testdateipruefer test_ist_gueltiger_gpkg_pfad_akzeptiert_vorhandenes_verzeichnis testdateipruefer test_ist_gueltiger_gpkg_pfad_lehnt_falsche_endung_ab testdateipruefer test_ist_gueltiger_gpkg_pfad_lehnt_fehlendes_verzeichnis_ab testdateipruefer test_ist_leer_erkennt_none_und_nicht_string_als_leer testdateipruefer test_ist_leer_erkennt_reinen_whitespace_als_leer testdateipruefer test_ist_leer_meldet_pfad_mit_sichtbaren_zeichen_nicht_als_leer testdateipruefer test_leere_eingabe_bevorzugt_leereingabe_erlaubt_vor_standarddatei testdateipruefer test_leere_eingabe_bevorzugt_standarddatei_vor_temporaer_erlaubt" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-dateipruefer-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_dateipruefer.py</span><span class="card-meta"><span class="count-total">17 Testfälle</span><span class="cpill cpill-ok">17</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-dateipruefer-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestDateipruefer <b>17</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_dateipruefer.py"])
|
||
class root rootnode
|
||
root --> g1["TestDateipruefer (17)"]
|
||
class g1 groupnode
|
||
g1 --> t1("leereingabe_erlaubt")
|
||
g1 --> t2("leereingabe_nicht_erlaubt")
|
||
g1 --> t3("standarddatei_vorschlagen")
|
||
g1 --> t4("temporaer_erlaubt")
|
||
g1 --> t5("datei_nicht_gefunden")
|
||
g1 --> t6("datei_ok")
|
||
g1 --> t7("erkenne_dateityp_unterscheidet_excel_datenbank_und_unbekannt")
|
||
g1 --> t8("pfad_verbindet_relativen_pfad_mit_basispfad")
|
||
g1 --> t9("pfad_laesst_absoluten_pfad_unveraendert")
|
||
g1 --> t10("ist_gueltiger_gpkg_pfad_akzeptiert_vorhandenes_verzeichnis")
|
||
g1 --> t11("ist_gueltiger_gpkg_pfad_lehnt_falsche_endung_ab")
|
||
g1 --> t12("ist_gueltiger_gpkg_pfad_lehnt_fehlendes_verzeichnis_ab")
|
||
g1 --> t13("ist_leer_erkennt_none_und_nicht_string_als_leer")
|
||
g1 --> t14("ist_leer_erkennt_reinen_whitespace_als_leer")
|
||
g1 --> t15("ist_leer_meldet_pfad_mit_sichtbaren_zeichen_nicht_als_leer")
|
||
g1 --> t16("leere_eingabe_bevorzugt_leereingabe_erlaubt_vor_standarddatei")
|
||
g1 --> t17("leere_eingabe_bevorzugt_standarddatei_vor_temporaer_erlaubt")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 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></tr></thead><tbody><tr><td class="mono">TestDateipruefer<br><span class="testname">test_leereingabe_erlaubt</span></td><td>Prüft, dass eine leere Pfadangabe bei leereingabe_erlaubt=True als 'leereingabe_erlaubt' ohne Kontext gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_leereingabe_nicht_erlaubt</span></td><td>Prüft, dass eine leere Pfadangabe ohne leereingabe_erlaubt als 'leereingabe_nicht_erlaubt' abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_standarddatei_vorschlagen</span></td><td>Prüft, dass bei leerer Pfadangabe mit gesetzter Standarddatei 'standarddatei_vorschlagen' mit dem Standardpfad als Kontext geliefert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_temporaer_erlaubt</span></td><td>Prüft, dass eine leere Pfadangabe bei temporaer_erlaubt=True als 'temporaer_erlaubt' ohne Kontext gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_datei_nicht_gefunden</span></td><td>Prüft, dass ein nicht existierender Dateipfad als 'datei_nicht_gefunden' mit dem Pfad als Kontext abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_datei_ok</span></td><td>Prüft, dass ein existierender Dateipfad als 'ok' mit dem Pfad als Kontext bestätigt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_erkenne_dateityp_unterscheidet_excel_datenbank_und_unbekannt</span></td><td>Prüft, dass erkenne_dateityp .xlsx als 'excel', .gpkg/.sqlite als 'datenbank' und Rest als 'unbekannt' erkennt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_pfad_verbindet_relativen_pfad_mit_basispfad</span></td><td>Prüft, dass _pfad einen relativen Pfad mit dem Basisverzeichnis verbindet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_pfad_laesst_absoluten_pfad_unveraendert</span></td><td>Prüft, dass _pfad einen bereits absoluten Pfad nicht mit dem Basisverzeichnis verbindet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_ist_gueltiger_gpkg_pfad_akzeptiert_vorhandenes_verzeichnis</span></td><td>Prüft, dass ein .gpkg-Pfad mit vorhandenem Zielverzeichnis als gültig gilt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_ist_gueltiger_gpkg_pfad_lehnt_falsche_endung_ab</span></td><td>Prüft, dass ein Pfad ohne .gpkg-Endung als ungültig gilt, auch bei vorhandenem Verzeichnis.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_ist_gueltiger_gpkg_pfad_lehnt_fehlendes_verzeichnis_ab</span></td><td>Prüft, dass ein .gpkg-Pfad in einem nicht vorhandenen Verzeichnis als ungültig gilt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_ist_leer_erkennt_none_und_nicht_string_als_leer</span></td><td>Prüft, dass _ist_leer sowohl None als auch einen Nicht-String-Wert als leer meldet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_ist_leer_erkennt_reinen_whitespace_als_leer</span></td><td>Prüft, dass _ist_leer eine Eingabe aus reinen Leerzeichen als leer meldet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_ist_leer_meldet_pfad_mit_sichtbaren_zeichen_nicht_als_leer</span></td><td>Prüft, dass _ist_leer einen Pfad mit sichtbaren Zeichen nicht als leer meldet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_leere_eingabe_bevorzugt_leereingabe_erlaubt_vor_standarddatei</span></td><td>Prüft, dass bei leerer Eingabe leereingabe_erlaubt Vorrang vor einer gesetzten Standarddatei hat.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDateipruefer<br><span class="testname">test_leere_eingabe_bevorzugt_standarddatei_vor_temporaer_erlaubt</span></td><td>Prüft, dass bei leerer Eingabe eine gesetzte Standarddatei Vorrang vor temporaer_erlaubt hat.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_datenabruf.py determinespatialfiltertests test_raumfilter_ohne_liefert_none determinespatialfiltertests test_fehlender_layer_liefert_none determinespatialfiltertests test_unbekannter_raumfilter_liefert_none determinespatialfiltertests test_verfahrensgebiet_liefert_extent_und_crs determinespatialfiltertests test_verfahrensgebiet_ohne_extent_liefert_none determinespatialfiltertests test_pufferlayer_liefert_extent_des_pufferlayers determinespatialfiltertests test_pufferlayer_ohne_puffer_liefert_none buildproviderurltests test_wms_liefert_link_unveraendert buildproviderurltests test_url_praefix_wird_entfernt buildproviderurltests test_wfs_baut_standardparameter_und_bbox_mit_crs buildproviderurltests test_wfs_repariert_doppeltes_fragezeichen buildproviderurltests test_wfs_ohne_raumfilter_setzt_keine_bbox buildproviderurltests test_rest_provider_haengt_query_endpunkt_an buildproviderurltests test_rest_provider_mit_bbox_baut_geometry_envelope_und_srid buildproviderurltests test_default_provider_haengt_generischen_bbox_parameter_an buildproviderurltests test_default_provider_ohne_raumfilter_laesst_query_unveraendert fetchfeaturestests test_wms_liefert_keine_features_ohne_fehler fetchfeaturestests test_abbruch_vor_abruf_liefert_fehlermeldung fetchfeaturestests test_json_featurecollection_wird_geparst fetchfeaturestests test_netzwerkfehler_wird_als_fehlermeldung_gemeldet fetchfeaturestests test_wfs_xml_liefert_anzahl_aus_numberofmatched datenabruforchestrierungtests test_fehlende_pflichtfelder_werden_als_ungueltig_gemeldet datenabruforchestrierungtests test_wms_zeile_ohne_features_landet_in_ausserhalb datenabruforchestrierungtests test_abbruch_ueber_progress_stoppt_weitere_zeilen" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-datenabruf-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_datenabruf.py</span><span class="card-meta"><span class="count-total">24 Testfälle</span><span class="cpill cpill-ok">24</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-datenabruf-py"><p class="filedesc">Tests für sn_basis/modules/Datenabruf.py (Datenabruf-Kernpipeline, Issue #63).</p><div class="gchips"><span class="gchip" title="">DetermineSpatialFilterTests <b>7</b></span><span class="gchip" title="">BuildProviderUrlTests <b>9</b></span><span class="gchip" title="">FetchFeaturesTests <b>5</b></span><span class="gchip" title="">DatenabrufOrchestrierungTests <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_datenabruf.py"])
|
||
class root rootnode
|
||
root --> g1["DetermineSpatialFilterTests (7)"]
|
||
class g1 groupnode
|
||
g1 --> t1("raumfilter_ohne_liefert_none")
|
||
g1 --> t2("fehlender_layer_liefert_none")
|
||
g1 --> t3("unbekannter_raumfilter_liefert_none")
|
||
g1 --> t4("verfahrensgebiet_liefert_extent_und_crs")
|
||
g1 --> t5("verfahrensgebiet_ohne_extent_liefert_none")
|
||
g1 --> t6("pufferlayer_liefert_extent_des_pufferlayers")
|
||
g1 --> t7("pufferlayer_ohne_puffer_liefert_none")
|
||
root --> g2["BuildProviderUrlTests (9)"]
|
||
class g2 groupnode
|
||
g2 --> t8("wms_liefert_link_unveraendert")
|
||
g2 --> t9("url_praefix_wird_entfernt")
|
||
g2 --> t10("wfs_baut_standardparameter_und_bbox_mit_crs")
|
||
g2 --> t11("wfs_repariert_doppeltes_fragezeichen")
|
||
g2 --> t12("wfs_ohne_raumfilter_setzt_keine_bbox")
|
||
g2 --> t13("rest_provider_haengt_query_endpunkt_an")
|
||
g2 --> t14("rest_provider_mit_bbox_baut_geometry_envelope_und_srid")
|
||
g2 --> t15("default_provider_haengt_generischen_bbox_parameter_an")
|
||
g2 --> t16("default_provider_ohne_raumfilter_laesst_query_unveraendert")
|
||
root --> g3["FetchFeaturesTests (5)"]
|
||
class g3 groupnode
|
||
g3 --> t17("wms_liefert_keine_features_ohne_fehler")
|
||
g3 --> t18("abbruch_vor_abruf_liefert_fehlermeldung")
|
||
g3 --> t19("json_featurecollection_wird_geparst")
|
||
g3 --> t20("netzwerkfehler_wird_als_fehlermeldung_gemeldet")
|
||
g3 --> t21("wfs_xml_liefert_anzahl_aus_numberofmatched")
|
||
root --> g4["DatenabrufOrchestrierungTests (3)"]
|
||
class g4 groupnode
|
||
g4 --> t22("fehlende_pflichtfelder_werden_als_ungueltig_gemeldet")
|
||
g4 --> t23("wms_zeile_ohne_features_landet_in_ausserhalb")
|
||
g4 --> t24("abbruch_ueber_progress_stoppt_weitere_zeilen")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 ok
|
||
class t21 ok
|
||
class t22 ok
|
||
class t23 ok
|
||
class t24 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></tr></thead><tbody><tr><td class="mono">DetermineSpatialFilterTests<br><span class="testname">test_raumfilter_ohne_liefert_none</span></td><td>Prüft, dass Raumfilter 'ohne' unabhängig vom Layer immer None liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DetermineSpatialFilterTests<br><span class="testname">test_fehlender_layer_liefert_none</span></td><td>Prüft, dass ohne Verfahrensgebiet-Layer kein Raumfilter gebaut wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DetermineSpatialFilterTests<br><span class="testname">test_unbekannter_raumfilter_liefert_none</span></td><td>Prüft, dass ein unbekannter Raumfilter-Wert None liefert, statt einen Fehler zu werfen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DetermineSpatialFilterTests<br><span class="testname">test_verfahrensgebiet_liefert_extent_und_crs</span></td><td>Prüft, dass Raumfilter 'Verfahrensgebiet' Extent und CRS des Verfahrensgebiet-Layers liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DetermineSpatialFilterTests<br><span class="testname">test_verfahrensgebiet_ohne_extent_liefert_none</span></td><td>Prüft, dass ein Verfahrensgebiet-Layer ohne ermittelbaren Extent None liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DetermineSpatialFilterTests<br><span class="testname">test_pufferlayer_liefert_extent_des_pufferlayers</span></td><td>Prüft, dass Raumfilter 'Pufferlayer' Extent und CRS des erzeugten Pufferlayers liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DetermineSpatialFilterTests<br><span class="testname">test_pufferlayer_ohne_puffer_liefert_none</span></td><td>Prüft, dass 'Pufferlayer' None liefert, wenn kein Pufferlayer erzeugt werden konnte.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">BuildProviderUrlTests<br><span class="testname">test_wms_liefert_link_unveraendert</span></td><td>Prüft, dass bei Provider WMS der Link unverändert durchgereicht wird, auch mit Raumfilter.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">BuildProviderUrlTests<br><span class="testname">test_url_praefix_wird_entfernt</span></td><td>Prüft, dass ein vorangestelltes 'url=' aus dem Link entfernt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">BuildProviderUrlTests<br><span class="testname">test_wfs_baut_standardparameter_und_bbox_mit_crs</span></td><td>Prüft, dass WFS-Abrufe Standardparameter, umbenanntes TYPENAMES und BBOX mit CRS-URN erhalten.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">BuildProviderUrlTests<br><span class="testname">test_wfs_repariert_doppeltes_fragezeichen</span></td><td>Prüft, dass ein zweites '?' im WFS-Link zu '&' korrigiert wird, statt eine ungültige URL zu erzeugen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">BuildProviderUrlTests<br><span class="testname">test_wfs_ohne_raumfilter_setzt_keine_bbox</span></td><td>Prüft, dass WFS ohne Raumfilter (bbox_geom=None) keinen BBOX-Parameter setzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">BuildProviderUrlTests<br><span class="testname">test_rest_provider_haengt_query_endpunkt_an</span></td><td>Prüft, dass REST/ArcGIS-Links ohne '/query'-Endpunkt automatisch ergänzt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">BuildProviderUrlTests<br><span class="testname">test_rest_provider_mit_bbox_baut_geometry_envelope_und_srid</span></td><td>Prüft, dass REST-Abrufe mit Raumfilter eine Geometry-Envelope und inSR/outSR aus dem CRS setzen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">BuildProviderUrlTests<br><span class="testname">test_default_provider_haengt_generischen_bbox_parameter_an</span></td><td>Prüft, dass ein unbekannter Provider mit Raumfilter einen generischen bbox-Parameter erhält.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">BuildProviderUrlTests<br><span class="testname">test_default_provider_ohne_raumfilter_laesst_query_unveraendert</span></td><td>Prüft, dass ein unbekannter Provider ohne Raumfilter keinen bbox-Parameter ergänzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FetchFeaturesTests<br><span class="testname">test_wms_liefert_keine_features_ohne_fehler</span></td><td>Prüft, dass bei Provider WMS kein Featureabruf stattfindet und kein Fehler gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FetchFeaturesTests<br><span class="testname">test_abbruch_vor_abruf_liefert_fehlermeldung</span></td><td>Prüft, dass ein bereits gesetzter Abbruch vor dem eigentlichen Abruf erkannt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FetchFeaturesTests<br><span class="testname">test_json_featurecollection_wird_geparst</span></td><td>Prüft, dass eine JSON-FeatureCollection-Antwort in eine Feature-Liste umgewandelt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FetchFeaturesTests<br><span class="testname">test_netzwerkfehler_wird_als_fehlermeldung_gemeldet</span></td><td>Prüft, dass ein fehlgeschlagener HTTP-Abruf eine Fehlermeldung statt einer Ausnahme liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FetchFeaturesTests<br><span class="testname">test_wfs_xml_liefert_anzahl_aus_numberofmatched</span></td><td>Prüft, dass eine WFS-XML-Antwort ohne JSON die Trefferzahl aus numberOfMatched übernimmt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DatenabrufOrchestrierungTests<br><span class="testname">test_fehlende_pflichtfelder_werden_als_ungueltig_gemeldet</span></td><td>Prüft, dass eine Zeile ohne Link/Provider mit Aktion 'pflichtfelder_fehlen' gemeldet und übersprungen wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DatenabrufOrchestrierungTests<br><span class="testname">test_wms_zeile_ohne_features_landet_in_ausserhalb</span></td><td>Prüft, dass eine erfolgreich abgerufene WMS-Zeile mit 0 Features als 'ausserhalb' gezählt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DatenabrufOrchestrierungTests<br><span class="testname">test_abbruch_ueber_progress_stoppt_weitere_zeilen</span></td><td>Prüft, dass ein Abbruch über das Progress-Objekt die Verarbeitung weiterer Zeilen stoppt.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_datenschreiber.py writelayertogpkgtests test_ungueltiger_layer_liefert_fehlermeldung writelayertogpkgtests test_gueltiger_layer_wird_ohne_fehler_geschrieben resolvestylepathtests test_leerer_stilpfad_liefert_none resolvestylepathtests test_absoluter_vorhandener_stilpfad_wird_aufgeloest resolvestylepathtests test_nicht_vorhandener_stilpfad_liefert_none schreibedatentests test_ohne_speicherort_wirft_valueerror schreibedatentests test_eintrag_ohne_gueltigen_layer_wird_uebersprungen schreibedatentests test_erfolgreicher_eintrag_liefert_layer_path_und_thema schreibedatentests test_ohne_thema_wird_ident_als_layername_verwendet ladelayertests test_ohne_layer_path_wird_uebersprungen ladelayertests test_gueltiger_layer_wird_dem_projekt_hinzugefuegt ladelayertests test_ungueltiger_layer_meldet_layer_nicht_gefunden schreibelogtests test_ohne_speicherort_wirft_valueerror schreibelogtests test_schreibt_json_datei_mit_ergebnissen_und_gibt_pfad_zurueck storestyleingpkgtests test_legt_tabelle_an_und_speichert_stil_als_default storestyleingpkgtests test_setzt_bisherigen_default_stil_desselben_layers_zurueck storestyleingpkgtests test_liest_geometriespalte_ueber_geometrycolumn_aus storestyleingpkgtests test_fehlender_stilpfad_meldet_fehler_ueber_pruefmanager_statt_absturz" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-datenschreiber-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_datenschreiber.py</span><span class="card-meta"><span class="count-total">18 Testfälle</span><span class="cpill cpill-ok">18</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-datenschreiber-py"><p class="filedesc">Tests für sn_basis/modules/Datenschreiber.py (Schreib-/Ladepipeline, Issue #63).</p><div class="gchips"><span class="gchip" title="">WriteLayerToGpkgTests <b>2</b></span><span class="gchip" title="">ResolveStylePathTests <b>3</b></span><span class="gchip" title="">SchreibeDatenTests <b>4</b></span><span class="gchip" title="">LadeLayerTests <b>3</b></span><span class="gchip" title="">SchreibeLogTests <b>2</b></span><span class="gchip" title="Tests für Datenschreiber._store_style_in_gpkg (Issue #70, nachgezogen aus #63).">StoreStyleInGpkgTests <b>4</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_datenschreiber.py"])
|
||
class root rootnode
|
||
root --> g1["WriteLayerToGpkgTests (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("ungueltiger_layer_liefert_fehlermeldung")
|
||
g1 --> t2("gueltiger_layer_wird_ohne_fehler_geschrieben")
|
||
root --> g2["ResolveStylePathTests (3)"]
|
||
class g2 groupnode
|
||
g2 --> t3("leerer_stilpfad_liefert_none")
|
||
g2 --> t4("absoluter_vorhandener_stilpfad_wird_aufgeloest")
|
||
g2 --> t5("nicht_vorhandener_stilpfad_liefert_none")
|
||
root --> g3["SchreibeDatenTests (4)"]
|
||
class g3 groupnode
|
||
g3 --> t6("ohne_speicherort_wirft_valueerror")
|
||
g3 --> t7("eintrag_ohne_gueltigen_layer_wird_uebersprungen")
|
||
g3 --> t8("erfolgreicher_eintrag_liefert_layer_path_und_thema")
|
||
g3 --> t9("ohne_thema_wird_ident_als_layername_verwendet")
|
||
root --> g4["LadeLayerTests (3)"]
|
||
class g4 groupnode
|
||
g4 --> t10("ohne_layer_path_wird_uebersprungen")
|
||
g4 --> t11("gueltiger_layer_wird_dem_projekt_hinzugefuegt")
|
||
g4 --> t12("ungueltiger_layer_meldet_layer_nicht_gefunden")
|
||
root --> g5["SchreibeLogTests (2)"]
|
||
class g5 groupnode
|
||
g5 --> t13("ohne_speicherort_wirft_valueerror")
|
||
g5 --> t14("schreibt_json_datei_mit_ergebnissen_und_gibt_pfad_zurueck")
|
||
root --> g6["StoreStyleInGpkgTests (4)"]
|
||
class g6 groupnode
|
||
g6 --> t15("legt_tabelle_an_und_speichert_stil_als_default")
|
||
g6 --> t16("setzt_bisherigen_default_stil_desselben_layers_zurueck")
|
||
g6 --> t17("liest_geometriespalte_ueber_geometrycolumn_aus")
|
||
g6 --> t18("fehlender_stilpfad_meldet_fehler_ueber_pruefmanager_statt_absturz")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 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></tr></thead><tbody><tr><td class="mono">WriteLayerToGpkgTests<br><span class="testname">test_ungueltiger_layer_liefert_fehlermeldung</span></td><td>Prüft, dass ein ungültiger Layer eine Fehlermeldung statt eines Absturzes liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">WriteLayerToGpkgTests<br><span class="testname">test_gueltiger_layer_wird_ohne_fehler_geschrieben</span></td><td>Prüft, dass ein gültiger Layer im Mock-Modus ohne Fehlermeldung geschrieben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ResolveStylePathTests<br><span class="testname">test_leerer_stilpfad_liefert_none</span></td><td>Prüft, dass ein leerer oder fehlender Stilpfad None liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ResolveStylePathTests<br><span class="testname">test_absoluter_vorhandener_stilpfad_wird_aufgeloest</span></td><td>Prüft, dass ein absoluter, vorhandener Stilpfad normalisiert und unverändert erkannt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ResolveStylePathTests<br><span class="testname">test_nicht_vorhandener_stilpfad_liefert_none</span></td><td>Prüft, dass ein nicht vorhandener Stilpfad None liefert, statt einen ungültigen Pfad zurückzugeben.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">SchreibeDatenTests<br><span class="testname">test_ohne_speicherort_wirft_valueerror</span></td><td>Prüft, dass schreibe_Daten ohne Speicherort einen ValueError wirft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">SchreibeDatenTests<br><span class="testname">test_eintrag_ohne_gueltigen_layer_wird_uebersprungen</span></td><td>Prüft, dass ein Eintrag ohne gültigen Layer übersprungen wird und ein Fehlerergebnis meldet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">SchreibeDatenTests<br><span class="testname">test_erfolgreicher_eintrag_liefert_layer_path_und_thema</span></td><td>Prüft, dass ein gültiger Layer einen Layer-Path mit GPKG-Pfad und Layername liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">SchreibeDatenTests<br><span class="testname">test_ohne_thema_wird_ident_als_layername_verwendet</span></td><td>Prüft, dass ohne passendes Thema in processed_results der ident als Layername verwendet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">LadeLayerTests<br><span class="testname">test_ohne_layer_path_wird_uebersprungen</span></td><td>Prüft, dass ein Eintrag ohne layer_path übersprungen wird, ohne einen Fehler zu melden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">LadeLayerTests<br><span class="testname">test_gueltiger_layer_wird_dem_projekt_hinzugefuegt</span></td><td>Prüft, dass ein gültig ladbarer Layer ohne Fehlermeldung verarbeitet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">LadeLayerTests<br><span class="testname">test_ungueltiger_layer_meldet_layer_nicht_gefunden</span></td><td>Prüft, dass ein ungültig ladbarer Layer als 'layer_nicht_gefunden' gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">SchreibeLogTests<br><span class="testname">test_ohne_speicherort_wirft_valueerror</span></td><td>Prüft, dass schreibe_log ohne Speicherort einen ValueError wirft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">SchreibeLogTests<br><span class="testname">test_schreibt_json_datei_mit_ergebnissen_und_gibt_pfad_zurueck</span></td><td>Prüft, dass schreibe_log eine lesbare JSON-Log-Datei erzeugt und deren Pfad zurückgibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">StoreStyleInGpkgTests<br><span class="testname">test_legt_tabelle_an_und_speichert_stil_als_default</span></td><td>Prüft, dass _store_style_in_gpkg die layer_styles-Tabelle anlegt und den Stil als Default speichert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">StoreStyleInGpkgTests<br><span class="testname">test_setzt_bisherigen_default_stil_desselben_layers_zurueck</span></td><td>Prüft, dass _store_style_in_gpkg den useAsDefault-Wert vorhandener Stile desselben Layers zurücksetzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">StoreStyleInGpkgTests<br><span class="testname">test_liest_geometriespalte_ueber_geometrycolumn_aus</span></td><td>Prüft, dass _store_style_in_gpkg die Geometriespalte eines Layers mit geometryColumn() übernimmt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">StoreStyleInGpkgTests<br><span class="testname">test_fehlender_stilpfad_meldet_fehler_ueber_pruefmanager_statt_absturz</span></td><td>Prüft, dass ein nicht lesbarer Stilpfad über den Pruefmanager gemeldet wird statt eine Exception zu werfen.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_dockmanager.py dockmanagershowtests test_none_dock_meldet_fehler_und_zeigt_nichts_an dockmanagershowtests test_setzt_objectname_wenn_leer dockmanagershowtests test_entfernt_andere_sn_docks_aber_nicht_sich_selbst dockmanagershowtests test_zeigt_neues_dock_mit_default_area_an dockmanagershowtests test_fehler_beim_entfernen_wird_als_warnung_gemeldet dockmanagershowtests test_fehler_beim_anzeigen_wird_gemeldet" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-dockmanager-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_dockmanager.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-dockmanager-py"><p class="filedesc">Tests für sn_basis/ui/dockmanager.py (nur ein Dock gleichzeitig sichtbar, Issue #65).</p><div class="gchips"><span class="gchip" title="">DockManagerShowTests <b>6</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_dockmanager.py"])
|
||
class root rootnode
|
||
root --> g1["DockManagerShowTests (6)"]
|
||
class g1 groupnode
|
||
g1 --> t1("none_dock_meldet_fehler_und_zeigt_nichts_an")
|
||
g1 --> t2("setzt_objectname_wenn_leer")
|
||
g1 --> t3("entfernt_andere_sn_docks_aber_nicht_sich_selbst")
|
||
g1 --> t4("zeigt_neues_dock_mit_default_area_an")
|
||
g1 --> t5("fehler_beim_entfernen_wird_als_warnung_gemeldet")
|
||
g1 --> t6("fehler_beim_anzeigen_wird_gemeldet")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 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></tr></thead><tbody><tr><td class="mono">DockManagerShowTests<br><span class="testname">test_none_dock_meldet_fehler_und_zeigt_nichts_an</span></td><td>Prüft, dass ein fehlendes Dock-Widget (None) einen Fehler meldet und nichts anzeigt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DockManagerShowTests<br><span class="testname">test_setzt_objectname_wenn_leer</span></td><td>Prüft, dass ein Dock ohne Namen einen technischen Namen mit dem Präfix 'sn_dock_' erhält.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DockManagerShowTests<br><span class="testname">test_entfernt_andere_sn_docks_aber_nicht_sich_selbst</span></td><td>Prüft, dass andere sn_basis-Docks entfernt werden, das neue Dock und fremde Widgets aber unangetastet bleiben.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DockManagerShowTests<br><span class="testname">test_zeigt_neues_dock_mit_default_area_an</span></td><td>Prüft, dass ein neues Dock mit der Standard-Area (DockAreaRight) angezeigt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DockManagerShowTests<br><span class="testname">test_fehler_beim_entfernen_wird_als_warnung_gemeldet</span></td><td>Prüft, dass ein Fehler beim Entfernen alter Docks nur gewarnt und das neue Dock trotzdem angezeigt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DockManagerShowTests<br><span class="testname">test_fehler_beim_anzeigen_wird_gemeldet</span></td><td>Prüft, dass ein Fehler beim Anzeigen des Docks als Fehler gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_druck_kbs.py testtransformiererechteck test_verschiedene_kbs_werden_umgerechnet testtransformiererechteck test_gleiches_fehlendes_oder_ungueltiges_kbs_laesst_rechteck_unveraendert testtransformiererechteck test_fehler_bei_der_umrechnung_liefert_das_rechteck testzoomauflayer test_ausdehnung_wird_ins_kbs_der_kartenansicht_umgerechnet testzoomauflayer test_ohne_layer_oder_kartenansicht_kein_zoom testdruckkbs test_druck_kbs_ist_das_kbs_des_verfahrensgebiets testdruckkbs test_kartenfenster_wird_vom_kbs_der_kartenansicht_umgerechnet testdruckkbs test_auswahl_wird_vor_dem_puffern_vom_layer_kbs_umgerechnet testdruckkbs test_ohne_druck_kbs_wird_nicht_umgerechnet testdruckkbs test_druckrechteck_wird_ins_kbs_seines_layers_umgerechnet testlayoutkarteimdruckkbs test_hauptkarte_bekommt_das_kbs_vor_der_ausdehnung" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-druck-kbs-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_druck_kbs.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-druck-kbs-py"><p class="filedesc">Tests zu Basis #99: Ist das Projekt-KBS ein anderes als das KBS des Verfahrensgebiets, müssen</p><div class="gchips"><span class="gchip" title="Umrechnung eines Rechtecks zwischen zwei KBS.">TestTransformiereRechteck <b>3</b></span><span class="gchip" title="Zoom der Kartenansicht auf einen Layer in einem anderen KBS.">TestZoomAufLayer <b>2</b></span><span class="gchip" title="KBS der Layoutkarte und Umrechnung der Druckbereiche.">TestDruckKbs <b>5</b></span><span class="gchip" title="Die Layoutkarte bekommt das Druck-KBS, bevor die Ausdehnung gesetzt wird.">TestLayoutkarteImDruckKbs <b>1</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_druck_kbs.py"])
|
||
class root rootnode
|
||
root --> g1["TestTransformiereRechteck (3)"]
|
||
class g1 groupnode
|
||
g1 --> t1("verschiedene_kbs_werden_umgerechnet")
|
||
g1 --> t2("gleiches_fehlendes_oder_ungueltiges_kbs_laesst_rechteck_unveraendert")
|
||
g1 --> t3("fehler_bei_der_umrechnung_liefert_das_rechteck")
|
||
root --> g2["TestZoomAufLayer (2)"]
|
||
class g2 groupnode
|
||
g2 --> t4("ausdehnung_wird_ins_kbs_der_kartenansicht_umgerechnet")
|
||
g2 --> t5("ohne_layer_oder_kartenansicht_kein_zoom")
|
||
root --> g3["TestDruckKbs (5)"]
|
||
class g3 groupnode
|
||
g3 --> t6("druck_kbs_ist_das_kbs_des_verfahrensgebiets")
|
||
g3 --> t7("kartenfenster_wird_vom_kbs_der_kartenansicht_umgerechnet")
|
||
g3 --> t8("auswahl_wird_vor_dem_puffern_vom_layer_kbs_umgerechnet")
|
||
g3 --> t9("ohne_druck_kbs_wird_nicht_umgerechnet")
|
||
g3 --> t10("druckrechteck_wird_ins_kbs_seines_layers_umgerechnet")
|
||
root --> g4["TestLayoutkarteImDruckKbs (1)"]
|
||
class g4 groupnode
|
||
g4 --> t11("hauptkarte_bekommt_das_kbs_vor_der_ausdehnung")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
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;</pre></div><table class="test-table"><thead><tr><th>Testfall</th><th>prüft</th><th>Status</th></tr></thead><tbody><tr><td class="mono">TestTransformiereRechteck<br><span class="testname">test_verschiedene_kbs_werden_umgerechnet</span></td><td>Prüft, dass ein Rechteck bei verschiedenen KBS mit QgsCoordinateTransform von Quell- nach Ziel-KBS umgerechnet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTransformiereRechteck<br><span class="testname">test_gleiches_fehlendes_oder_ungueltiges_kbs_laesst_rechteck_unveraendert</span></td><td>Prüft, dass bei gleichem, fehlendem oder ungültigem KBS nicht umgerechnet und das Rechteck unverändert geliefert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTransformiereRechteck<br><span class="testname">test_fehler_bei_der_umrechnung_liefert_das_rechteck</span></td><td>Prüft, dass ein Fehler bei der Umrechnung nicht durchschlägt, sondern das ursprüngliche Rechteck zurückkommt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestZoomAufLayer<br><span class="testname">test_ausdehnung_wird_ins_kbs_der_kartenansicht_umgerechnet</span></td><td>Prüft, dass zoom_auf_layer die Layer-Ausdehnung vom Layer-KBS in das KBS der Kartenansicht umrechnet, bevor gezoomt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestZoomAufLayer<br><span class="testname">test_ohne_layer_oder_kartenansicht_kein_zoom</span></td><td>Prüft, dass zoom_auf_layer ohne Layer oder ohne Kartenansicht nichts tut und False liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDruckKbs<br><span class="testname">test_druck_kbs_ist_das_kbs_des_verfahrensgebiets</span></td><td>Prüft, dass die Layoutkarte im KBS des Verfahrensgebiet-Layers steht und ohne Verfahrensgebiet das Projekt-KBS gilt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDruckKbs<br><span class="testname">test_kartenfenster_wird_vom_kbs_der_kartenansicht_umgerechnet</span></td><td>Prüft, dass der Druckbereich „wie Kartenfenster“ vom KBS der Kartenansicht in das Druck-KBS umgerechnet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDruckKbs<br><span class="testname">test_auswahl_wird_vor_dem_puffern_vom_layer_kbs_umgerechnet</span></td><td>Prüft, dass der Druckbereich „Auswahl“ aus dem KBS des Auswahl-Layers umgerechnet und erst danach gepuffert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDruckKbs<br><span class="testname">test_ohne_druck_kbs_wird_nicht_umgerechnet</span></td><td>Prüft, dass _resolve_extent ohne Druck-KBS wie bisher nicht umrechnet (Aufrufe ohne den neuen Parameter).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDruckKbs<br><span class="testname">test_druckrechteck_wird_ins_kbs_seines_layers_umgerechnet</span></td><td>Prüft, dass ein in der Kartenansicht gezeichnetes Druckrechteck vor dem Speichern in das KBS des Druckrechteck-Layers umgerechnet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayoutkarteImDruckKbs<br><span class="testname">test_hauptkarte_bekommt_das_kbs_vor_der_ausdehnung</span></td><td>Prüft, dass die Hauptkarte eines neuen Layouts das Druck-KBS erhält, bevor ihre Ausdehnung gesetzt wird.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_excel_importer.py importxlsxtests test_erfolgreicher_import_liefert_zeilen_als_dicts importxlsxtests test_fehlende_datei_liefert_leere_liste importxlsxtests test_arbeitsblatt_ohne_header_liefert_leere_liste_und_meldet_kein_header importxlsxtests test_header_zeile_nur_leere_werte_liefert_kein_header importxlsxtests test_nicht_lesbare_datei_liefert_leere_liste_und_meldet_read_error excelimporterkonstruktortests test_ohne_dateipfad_wirft_valueerror excelimporterkonstruktortests test_ohne_pruefmanager_wirft_valueerror" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-excel-importer-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_excel_importer.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-excel-importer-py"><p class="filedesc">Tests für sn_basis/modules/excel_importer.py (Excel-Import für Linklisten, Issue #63).</p><div class="gchips"><span class="gchip" title="">ImportXlsxTests <b>5</b></span><span class="gchip" title="">ExcelImporterKonstruktorTests <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_excel_importer.py"])
|
||
class root rootnode
|
||
root --> g1["ImportXlsxTests (5)"]
|
||
class g1 groupnode
|
||
g1 --> t1("erfolgreicher_import_liefert_zeilen_als_dicts")
|
||
g1 --> t2("fehlende_datei_liefert_leere_liste")
|
||
g1 --> t3("arbeitsblatt_ohne_header_liefert_leere_liste_und_meldet_kein_header")
|
||
g1 --> t4("header_zeile_nur_leere_werte_liefert_kein_header")
|
||
g1 --> t5("nicht_lesbare_datei_liefert_leere_liste_und_meldet_read_error")
|
||
root --> g2["ExcelImporterKonstruktorTests (2)"]
|
||
class g2 groupnode
|
||
g2 --> t6("ohne_dateipfad_wirft_valueerror")
|
||
g2 --> t7("ohne_pruefmanager_wirft_valueerror")
|
||
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></tr></thead><tbody><tr><td class="mono">ImportXlsxTests<br><span class="testname">test_erfolgreicher_import_liefert_zeilen_als_dicts</span></td><td>Prüft, dass eine gültige Excel-Datei als Liste von Dicts mit den Header-Spalten geliefert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ImportXlsxTests<br><span class="testname">test_fehlende_datei_liefert_leere_liste</span></td><td>Prüft, dass eine nicht vorhandene Datei eine leere Liste liefert, statt eine Ausnahme zu werfen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ImportXlsxTests<br><span class="testname">test_arbeitsblatt_ohne_header_liefert_leere_liste_und_meldet_kein_header</span></td><td>Prüft, dass ein leeres Arbeitsblatt ohne Header-Zeile 'kein_header' meldet und eine leere Liste liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ImportXlsxTests<br><span class="testname">test_header_zeile_nur_leere_werte_liefert_kein_header</span></td><td>Prüft, dass eine Header-Zeile aus ausschließlich leeren Zellen ebenfalls als 'kein_header' gilt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ImportXlsxTests<br><span class="testname">test_nicht_lesbare_datei_liefert_leere_liste_und_meldet_read_error</span></td><td>Prüft, dass eine Datei mit ungültigem Excel-Inhalt 'read_error' meldet und eine leere Liste liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ExcelImporterKonstruktorTests<br><span class="testname">test_ohne_dateipfad_wirft_valueerror</span></td><td>Prüft, dass ExcelImporter ohne Dateipfad einen ValueError wirft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ExcelImporterKonstruktorTests<br><span class="testname">test_ohne_pruefmanager_wirft_valueerror</span></td><td>Prüft, dass ExcelImporter ohne Pruefmanager einen ValueError wirft.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_laenderkennung.py testgetlaenderkennung test_bekannter_praefix_gibt_kennung_zurueck testgetlaenderkennung test_praefix_gross_klein_unabhaengig testgetlaenderkennung test_unbekannter_praefix_wirft_keyerror testgetlaenderkennung test_ohne_argument_wird_aus_aufrufendem_modul_abgeleitet testgetlaenderkennung test_mapping_enthaelt_sachsen" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-laenderkennung-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_laenderkennung.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-laenderkennung-py"><p class="filedesc">Unit-Tests für `sn_basis.functions.laenderkennung`.</p><div class="gchips"><span class="gchip" title="">TestGetLaenderkennung <b>5</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_laenderkennung.py"])
|
||
class root rootnode
|
||
root --> g1["TestGetLaenderkennung (5)"]
|
||
class g1 groupnode
|
||
g1 --> t1("bekannter_praefix_gibt_kennung_zurueck")
|
||
g1 --> t2("praefix_gross_klein_unabhaengig")
|
||
g1 --> t3("unbekannter_praefix_wirft_keyerror")
|
||
g1 --> t4("ohne_argument_wird_aus_aufrufendem_modul_abgeleitet")
|
||
g1 --> t5("mapping_enthaelt_sachsen")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 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></tr></thead><tbody><tr><td class="mono">TestGetLaenderkennung<br><span class="testname">test_bekannter_praefix_gibt_kennung_zurueck</span></td><td>Prüft, dass der Präfix 'sn' die ALKIS-Länderkennung '14' für Sachsen liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestGetLaenderkennung<br><span class="testname">test_praefix_gross_klein_unabhaengig</span></td><td>Prüft, dass die Präfixsuche groß-/kleinschreibungsunabhängig ist.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestGetLaenderkennung<br><span class="testname">test_unbekannter_praefix_wirft_keyerror</span></td><td>Prüft, dass ein unbekannter Präfix einen KeyError auslöst.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestGetLaenderkennung<br><span class="testname">test_ohne_argument_wird_aus_aufrufendem_modul_abgeleitet</span></td><td>Prüft, dass ohne Argument der Präfix aus dem Modulnamen des Aufrufers abgeleitet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestGetLaenderkennung<br><span class="testname">test_mapping_enthaelt_sachsen</span></td><td>Prüft, dass die Mapping-Tabelle LAENDERKENNUNGEN einen Eintrag für Sachsen ('sn' -> '14') enthält.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_landkreise.py ladelandkreisetests test_laedt_die_echte_landkreisliste_nicht_leer ladelandkreisetests test_fehlende_datei_liefert_leere_liste" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-landkreise-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_landkreise.py</span><span class="card-meta"><span class="count-total">2 Testfälle</span><span class="cpill cpill-ok">2</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-landkreise-py"><p class="filedesc">Tests für sn_basis/functions/landkreise.py::_lade_landkreise (Issue #65).</p><div class="gchips"><span class="gchip" title="">LadeLandkreiseTests <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_landkreise.py"])
|
||
class root rootnode
|
||
root --> g1["LadeLandkreiseTests (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("laedt_die_echte_landkreisliste_nicht_leer")
|
||
g1 --> t2("fehlende_datei_liefert_leere_liste")
|
||
class t1 ok
|
||
class t2 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></tr></thead><tbody><tr><td class="mono">LadeLandkreiseTests<br><span class="testname">test_laedt_die_echte_landkreisliste_nicht_leer</span></td><td>Prüft, dass _lade_landkreise die echte landkreise.json als nicht-leere Liste von (Kennzahl, Name)-Tupeln liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">LadeLandkreiseTests<br><span class="testname">test_fehlende_datei_liefert_leere_liste</span></td><td>Prüft, dass eine nicht lesbare Datenquelle eine leere Liste liefert, statt eine Ausnahme zu werfen.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_layerloader.py createlayertests test_wfs_baut_uri_ohne_getfeature_parameter createlayertests test_wfs_mit_url_praefix_wird_nicht_doppelt_gesetzt createlayertests test_wms_baut_url_praefix_und_nutzt_rasterlayer createlayertests test_rest_featureserver_ergaenzt_layer_index createlayertests test_ogr_provider_nutzt_link_direkt createlayertests test_ungueltiger_layer_meldet_layer_nicht_verfuegbar createlayertests test_ausnahme_beim_erstellen_wird_abgefangen transformgeometrytests test_fehlender_layer_liefert_geometrie_unveraendert transformgeometrytests test_gleiche_crs_liefert_geometrie_unveraendert transformgeometrytests test_unterschiedliche_crs_klont_und_transformiert_geometrie transformextenttests test_gleiche_crs_liefert_extent_unveraendert transformextenttests test_unterschiedliche_crs_nutzt_coordinate_transform filterbyextenttests test_ungueltiger_layer_wird_unveraendert_zurueckgegeben filterbyextenttests test_ohne_extent_wird_layer_unveraendert_zurueckgegeben filterbyextenttests test_falscher_layertyp_wird_unveraendert_zurueckgegeben filterbyextenttests test_keine_treffer_liefert_none filterbyextenttests test_abbruch_liefert_none_und_meldet_needs_user_action filterbyextenttests test_erfolgreicher_filter_liefert_neuen_layer_mit_features filterbylayertests test_ungueltiger_layer_oder_filterlayer_wird_unveraendert_zurueckgegeben filterbylayertests test_filterlayer_ohne_features_liefert_none filterbylayertests test_erfolgreicher_geometriefilter_liefert_neuen_layer filterbylayertests test_keine_ueberschneidung_liefert_none addtoprojecttests test_gueltiger_layer_wird_dem_projekt_hinzugefuegt addtoprojecttests test_ungueltiger_layer_wird_nicht_hinzugefuegt addtoprojecttests test_none_layer_wird_nicht_hinzugefuegt" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-layerloader-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_layerloader.py</span><span class="card-meta"><span class="count-total">25 Testfälle</span><span class="cpill cpill-ok">25</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-layerloader-py"><p class="filedesc">Tests für sn_basis/modules/LayerLoader.py (Layer erzeugen/filtern/laden, Issue #63).</p><div class="gchips"><span class="gchip" title="">CreateLayerTests <b>7</b></span><span class="gchip" title="">TransformGeometryTests <b>3</b></span><span class="gchip" title="">TransformExtentTests <b>2</b></span><span class="gchip" title="">FilterByExtentTests <b>6</b></span><span class="gchip" title="">FilterByLayerTests <b>4</b></span><span class="gchip" title="">AddToProjectTests <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_layerloader.py"])
|
||
class root rootnode
|
||
root --> g1["CreateLayerTests (7)"]
|
||
class g1 groupnode
|
||
g1 --> t1("wfs_baut_uri_ohne_getfeature_parameter")
|
||
g1 --> t2("wfs_mit_url_praefix_wird_nicht_doppelt_gesetzt")
|
||
g1 --> t3("wms_baut_url_praefix_und_nutzt_rasterlayer")
|
||
g1 --> t4("rest_featureserver_ergaenzt_layer_index")
|
||
g1 --> t5("ogr_provider_nutzt_link_direkt")
|
||
g1 --> t6("ungueltiger_layer_meldet_layer_nicht_verfuegbar")
|
||
g1 --> t7("ausnahme_beim_erstellen_wird_abgefangen")
|
||
root --> g2["TransformGeometryTests (3)"]
|
||
class g2 groupnode
|
||
g2 --> t8("fehlender_layer_liefert_geometrie_unveraendert")
|
||
g2 --> t9("gleiche_crs_liefert_geometrie_unveraendert")
|
||
g2 --> t10("unterschiedliche_crs_klont_und_transformiert_geometrie")
|
||
root --> g3["TransformExtentTests (2)"]
|
||
class g3 groupnode
|
||
g3 --> t11("gleiche_crs_liefert_extent_unveraendert")
|
||
g3 --> t12("unterschiedliche_crs_nutzt_coordinate_transform")
|
||
root --> g4["FilterByExtentTests (6)"]
|
||
class g4 groupnode
|
||
g4 --> t13("ungueltiger_layer_wird_unveraendert_zurueckgegeben")
|
||
g4 --> t14("ohne_extent_wird_layer_unveraendert_zurueckgegeben")
|
||
g4 --> t15("falscher_layertyp_wird_unveraendert_zurueckgegeben")
|
||
g4 --> t16("keine_treffer_liefert_none")
|
||
g4 --> t17("abbruch_liefert_none_und_meldet_needs_user_action")
|
||
g4 --> t18("erfolgreicher_filter_liefert_neuen_layer_mit_features")
|
||
root --> g5["FilterByLayerTests (4)"]
|
||
class g5 groupnode
|
||
g5 --> t19("ungueltiger_layer_oder_filterlayer_wird_unveraendert_zurueckgegeben")
|
||
g5 --> t20("filterlayer_ohne_features_liefert_none")
|
||
g5 --> t21("erfolgreicher_geometriefilter_liefert_neuen_layer")
|
||
g5 --> t22("keine_ueberschneidung_liefert_none")
|
||
root --> g6["AddToProjectTests (3)"]
|
||
class g6 groupnode
|
||
g6 --> t23("gueltiger_layer_wird_dem_projekt_hinzugefuegt")
|
||
g6 --> t24("ungueltiger_layer_wird_nicht_hinzugefuegt")
|
||
g6 --> t25("none_layer_wird_nicht_hinzugefuegt")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 ok
|
||
class t21 ok
|
||
class t22 ok
|
||
class t23 ok
|
||
class t24 ok
|
||
class t25 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></tr></thead><tbody><tr><td class="mono">CreateLayerTests<br><span class="testname">test_wfs_baut_uri_ohne_getfeature_parameter</span></td><td>Prüft, dass für WFS die GetFeature-spezifischen Parameter aus der URI entfernt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CreateLayerTests<br><span class="testname">test_wfs_mit_url_praefix_wird_nicht_doppelt_gesetzt</span></td><td>Prüft, dass ein bereits vorhandenes 'url='-Präfix im WFS-Link nicht verdoppelt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CreateLayerTests<br><span class="testname">test_wms_baut_url_praefix_und_nutzt_rasterlayer</span></td><td>Prüft, dass WMS-Layer über QgsRasterLayer mit 'url='-Präfix erzeugt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CreateLayerTests<br><span class="testname">test_rest_featureserver_ergaenzt_layer_index</span></td><td>Prüft, dass ein REST-Link auf '.../FeatureServer' automatisch um '/0' ergänzt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CreateLayerTests<br><span class="testname">test_ogr_provider_nutzt_link_direkt</span></td><td>Prüft, dass ein OGR-Provider den Link unverändert an QgsVectorLayer übergibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CreateLayerTests<br><span class="testname">test_ungueltiger_layer_meldet_layer_nicht_verfuegbar</span></td><td>Prüft, dass ein ungültig erzeugter Layer als 'layer_nicht_verfuegbar' gemeldet wird und None liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CreateLayerTests<br><span class="testname">test_ausnahme_beim_erstellen_wird_abgefangen</span></td><td>Prüft, dass eine Ausnahme beim Layer-Erstellen abgefangen und als Fehlerergebnis gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TransformGeometryTests<br><span class="testname">test_fehlender_layer_liefert_geometrie_unveraendert</span></td><td>Prüft, dass ohne Quell- oder Ziel-Layer die Geometrie unverändert zurückgegeben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TransformGeometryTests<br><span class="testname">test_gleiche_crs_liefert_geometrie_unveraendert</span></td><td>Prüft, dass bei identischem CRS von Quelle und Ziel keine Transformation stattfindet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TransformGeometryTests<br><span class="testname">test_unterschiedliche_crs_klont_und_transformiert_geometrie</span></td><td>Prüft, dass bei unterschiedlichem CRS eine geklonte, transformierte Geometrie geliefert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TransformExtentTests<br><span class="testname">test_gleiche_crs_liefert_extent_unveraendert</span></td><td>Prüft, dass bei identischem CRS von Quelle und Ziel der Extent unverändert bleibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TransformExtentTests<br><span class="testname">test_unterschiedliche_crs_nutzt_coordinate_transform</span></td><td>Prüft, dass bei unterschiedlichem CRS der Extent über QgsCoordinateTransform umgerechnet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FilterByExtentTests<br><span class="testname">test_ungueltiger_layer_wird_unveraendert_zurueckgegeben</span></td><td>Prüft, dass ein ungültiger Layer von filter_by_extent unverändert zurückgegeben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FilterByExtentTests<br><span class="testname">test_ohne_extent_wird_layer_unveraendert_zurueckgegeben</span></td><td>Prüft, dass ohne Extent (None) der Layer unverändert zurückgegeben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FilterByExtentTests<br><span class="testname">test_falscher_layertyp_wird_unveraendert_zurueckgegeben</span></td><td>Prüft, dass ein Nicht-Vektor-Layer (z. B. Rasterlayer) unverändert zurückgegeben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FilterByExtentTests<br><span class="testname">test_keine_treffer_liefert_none</span></td><td>Prüft, dass ein Raumfilter ohne Treffer None statt eines leeren Layers liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FilterByExtentTests<br><span class="testname">test_abbruch_liefert_none_und_meldet_needs_user_action</span></td><td>Prüft, dass ein Abbruch während des Raumfilters None liefert und gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FilterByExtentTests<br><span class="testname">test_erfolgreicher_filter_liefert_neuen_layer_mit_features</span></td><td>Prüft, dass ein erfolgreicher BBOX-Filter einen neuen Speicherlayer mit den gefundenen Features liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FilterByLayerTests<br><span class="testname">test_ungueltiger_layer_oder_filterlayer_wird_unveraendert_zurueckgegeben</span></td><td>Prüft, dass ein ungültiger Haupt- oder Filter-Layer unverändert zurückgegeben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FilterByLayerTests<br><span class="testname">test_filterlayer_ohne_features_liefert_none</span></td><td>Prüft, dass ein Filter-Layer ohne Features (leere Vereinigungsgeometrie) None liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FilterByLayerTests<br><span class="testname">test_erfolgreicher_geometriefilter_liefert_neuen_layer</span></td><td>Prüft, dass ein erfolgreicher Geometriefilter einen neuen Speicherlayer mit den passenden Features liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FilterByLayerTests<br><span class="testname">test_keine_ueberschneidung_liefert_none</span></td><td>Prüft, dass ohne überschneidende Features None statt eines leeren Layers geliefert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">AddToProjectTests<br><span class="testname">test_gueltiger_layer_wird_dem_projekt_hinzugefuegt</span></td><td>Prüft, dass ein gültiger Layer über QgsProject.instance().addMapLayer hinzugefügt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">AddToProjectTests<br><span class="testname">test_ungueltiger_layer_wird_nicht_hinzugefuegt</span></td><td>Prüft, dass ein ungültiger Layer nicht ans Projekt übergeben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">AddToProjectTests<br><span class="testname">test_none_layer_wird_nicht_hinzugefuegt</span></td><td>Prüft, dass ein fehlender Layer (None) nicht ans Projekt übergeben wird.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_layerpruefer.py testlayerpruefer test_layer_exists testlayerpruefer test_layer_unsichtbar testlayerpruefer test_falscher_layertyp testlayerpruefer test_falscher_geotyp testlayerpruefer test_layer_leer testlayerpruefer test_falsches_crs testlayerpruefer test_felder_fehlen testlayerpruefer test_datenquelle_unerwartet testlayerpruefer test_layer_nicht_editierbar testlayerpruefer test_layer_ok" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-layerpruefer-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_layerpruefer.py</span><span class="card-meta"><span class="count-total">10 Testfälle</span><span class="cpill cpill-ok">10</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-layerpruefer-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestLayerpruefer <b>10</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_layerpruefer.py"])
|
||
class root rootnode
|
||
root --> g1["TestLayerpruefer (10)"]
|
||
class g1 groupnode
|
||
g1 --> t1("layer_exists")
|
||
g1 --> t2("layer_unsichtbar")
|
||
g1 --> t3("falscher_layertyp")
|
||
g1 --> t4("falscher_geotyp")
|
||
g1 --> t5("layer_leer")
|
||
g1 --> t6("falsches_crs")
|
||
g1 --> t7("felder_fehlen")
|
||
g1 --> t8("datenquelle_unerwartet")
|
||
g1 --> t9("layer_nicht_editierbar")
|
||
g1 --> t10("layer_ok")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 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></tr></thead><tbody><tr><td class="mono">TestLayerpruefer<br><span class="testname">test_layer_exists</span></td><td>Prüft, dass ein nicht vorhandener Layer als 'layer_nicht_gefunden' abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerpruefer<br><span class="testname">test_layer_unsichtbar</span></td><td>Prüft, dass ein unsichtbarer Layer bei geforderter Sichtbarkeit als 'layer_unsichtbar' abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerpruefer<br><span class="testname">test_falscher_layertyp</span></td><td>Prüft, dass ein Layer mit abweichendem Layertyp (Raster statt Vektor) als 'falscher_layertyp' abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerpruefer<br><span class="testname">test_falscher_geotyp</span></td><td>Prüft, dass ein Layer mit abweichendem Geometrietyp (Punkt statt Polygon) als 'falscher_geotyp' abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerpruefer<br><span class="testname">test_layer_leer</span></td><td>Prüft, dass ein Layer ohne Features als 'layer_leer' abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerpruefer<br><span class="testname">test_falsches_crs</span></td><td>Prüft, dass ein Layer mit abweichendem Koordinatenbezugssystem als 'falsches_crs' abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerpruefer<br><span class="testname">test_felder_fehlen</span></td><td>Prüft, dass ein Layer mit fehlenden Pflichtfeldern als 'felder_fehlen' abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerpruefer<br><span class="testname">test_datenquelle_unerwartet</span></td><td>Prüft, dass eine Datenquelle außerhalb der erlaubten Liste als 'datenquelle_unerwartet' abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerpruefer<br><span class="testname">test_layer_nicht_editierbar</span></td><td>Prüft, dass ein nicht editierbarer Layer bei geforderter Editierbarkeit als 'layer_nicht_editierbar' abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayerpruefer<br><span class="testname">test_layer_ok</span></td><td>Prüft, dass ein Layer, der alle Anforderungen erfüllt, als 'ok' bestätigt wird.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_linkpruefer.py testlinkpruefer test_leere_eingabe testlinkpruefer test_remote_link_ok testlinkpruefer test_remote_link_error testlinkpruefer test_remote_link_network_error testlinkpruefer test_local_link_not_found testlinkpruefer test_local_link_ok" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-linkpruefer-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_linkpruefer.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-linkpruefer-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestLinkpruefer <b>6</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_linkpruefer.py"])
|
||
class root rootnode
|
||
root --> g1["TestLinkpruefer (6)"]
|
||
class g1 groupnode
|
||
g1 --> t1("leere_eingabe")
|
||
g1 --> t2("remote_link_ok")
|
||
g1 --> t3("remote_link_error")
|
||
g1 --> t4("remote_link_network_error")
|
||
g1 --> t5("local_link_not_found")
|
||
g1 --> t6("local_link_ok")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 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></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 'leer' abgelehnt wird.</td><td><span class="pill pill-ok">grün</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 'ok' bestätigt wird.</td><td><span class="pill pill-ok">grün</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 'url_nicht_erreichbar' abgelehnt wird.</td><td><span class="pill pill-ok">grün</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 'netzwerkfehler' gemeldet wird.</td><td><span class="pill pill-ok">grün</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 'pfad_nicht_gefunden' abgelehnt wird.</td><td><span class="pill pill-ok">grün</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 'ok' bestätigt wird.</td><td><span class="pill pill-ok">grün</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"><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="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
|
||
root(["test_ly_existence_wrapper.py"])
|
||
class root rootnode
|
||
root --> g1["LayerIsValidTests (5)"]
|
||
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)"]
|
||
class g2 groupnode
|
||
g2 --> t6("none_ist_nicht_nutzbar")
|
||
g2 --> t7("gueltiger_layer_ist_nutzbar")
|
||
g2 --> t8("ungueltiger_layer_ist_nicht_nutzbar")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 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></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></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></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></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></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></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></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></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></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"><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="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(["test_ly_style_wrapper.py"])
|
||
class root rootnode
|
||
root --> g1["ApplyStyleFromPathTests (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("fehlender_layer_liefert_false")
|
||
g1 --> t2("erfolgreiches_laden_liefert_true_und_triggert_repaint")
|
||
g1 --> t3("fehlgeschlagenes_laden_liefert_false_ohne_repaint")
|
||
g1 --> t4("ausnahme_beim_laden_wird_abgefangen")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 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></tr></thead><tbody><tr><td class="mono">ApplyStyleFromPathTests<br><span class="testname">test_fehlender_layer_liefert_false</span></td><td>Prüft, dass ein fehlender Layer (None) False liefert, ohne einen Stil zu laden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ApplyStyleFromPathTests<br><span class="testname">test_erfolgreiches_laden_liefert_true_und_triggert_repaint</span></td><td>Prüft, dass ein erfolgreich geladener Stil True liefert und den Layer neu zeichnet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ApplyStyleFromPathTests<br><span class="testname">test_fehlgeschlagenes_laden_liefert_false_ohne_repaint</span></td><td>Prüft, dass ein fehlgeschlagenes Laden False liefert, ohne den Layer neu zu zeichnen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ApplyStyleFromPathTests<br><span class="testname">test_ausnahme_beim_laden_wird_abgefangen</span></td><td>Prüft, dass eine Ausnahme beim Laden des Stils abgefangen wird und False liefert.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_message_wrapper.py getmessagebartests test_liefert_objekt_mit_pushmessage_methode getmessagebartests test_faellt_bei_fehlerhaftem_iface_auf_mock_bar_zurueck pushmessagetests test_liefert_dict_mit_titel_text_level_und_dauer pushmessagetests test_fehler_in_der_message_bar_wird_abgefangen" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-message-wrapper-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_message_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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-message-wrapper-py"><p class="filedesc">Tests für sn_basis/functions/message_wrapper.py (Issue #65).</p><div class="gchips"><span class="gchip" title="">GetMessageBarTests <b>2</b></span><span class="gchip" title="">PushMessageTests <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_message_wrapper.py"])
|
||
class root rootnode
|
||
root --> g1["GetMessageBarTests (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("liefert_objekt_mit_pushmessage_methode")
|
||
g1 --> t2("faellt_bei_fehlerhaftem_iface_auf_mock_bar_zurueck")
|
||
root --> g2["PushMessageTests (2)"]
|
||
class g2 groupnode
|
||
g2 --> t3("liefert_dict_mit_titel_text_level_und_dauer")
|
||
g2 --> t4("fehler_in_der_message_bar_wird_abgefangen")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 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></tr></thead><tbody><tr><td class="mono">GetMessageBarTests<br><span class="testname">test_liefert_objekt_mit_pushmessage_methode</span></td><td>Prüft, dass _get_message_bar ein Objekt mit aufrufbarer pushMessage()-Methode liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">GetMessageBarTests<br><span class="testname">test_faellt_bei_fehlerhaftem_iface_auf_mock_bar_zurueck</span></td><td>Prüft, dass ein Fehler beim Zugriff auf iface.messageBar() auf eine funktionierende Mock-MessageBar zurückfällt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">PushMessageTests<br><span class="testname">test_liefert_dict_mit_titel_text_level_und_dauer</span></td><td>Prüft, dass push_message im Mock-Modus ein Dict mit den übergebenen Werten liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">PushMessageTests<br><span class="testname">test_fehler_in_der_message_bar_wird_abgefangen</span></td><td>Prüft, dass eine fehlschlagende MessageBar push_message nicht zum Absturz bringt, sondern None liefert.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_navigation.py addactiontests test_ohne_plugin_group_liefert_none addactiontests test_erzeugt_action_und_fuegt_sie_gruppe_und_liste_hinzu finalizemenuandtoolbartests test_ohne_menu_oder_toolbar_tut_nichts finalizemenuandtoolbartests test_sortiert_und_fuegt_aktionen_in_prioritaetsreihenfolge_hinzu setactiveplugintests test_setzt_nur_aktive_action_auf_checked setactiveplugintests test_ohne_aktive_action_setzt_alle_auf_false removeactiontests test_none_action_tut_nichts removeactiontests test_entfernt_action_aus_menu_toolbar_und_liste removeactiontests test_ohne_menu_oder_toolbar_entfernt_trotzdem_aus_liste removealltests test_entfernt_menu_toolbar_und_setzt_zustand_zurueck removealltests test_loescht_menu_und_toolbar_objekt_damit_kein_duplikat_uebrig_bleibt removealltests test_ohne_menu_und_toolbar_ruft_wrapper_nicht_auf" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-navigation-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_navigation.py</span><span class="card-meta"><span class="count-total">12 Testfälle</span><span class="cpill cpill-ok">12</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-navigation-py"><p class="filedesc">Tests für sn_basis/ui/navigation.py::Navigation (Issue #67, ohne init_ui – s. Docstring dort).</p><div class="gchips"><span class="gchip" title="">AddActionTests <b>2</b></span><span class="gchip" title="">FinalizeMenuAndToolbarTests <b>2</b></span><span class="gchip" title="">SetActivePluginTests <b>2</b></span><span class="gchip" title="">RemoveActionTests <b>3</b></span><span class="gchip" title="">RemoveAllTests <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_navigation.py"])
|
||
class root rootnode
|
||
root --> g1["AddActionTests (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("ohne_plugin_group_liefert_none")
|
||
g1 --> t2("erzeugt_action_und_fuegt_sie_gruppe_und_liste_hinzu")
|
||
root --> g2["FinalizeMenuAndToolbarTests (2)"]
|
||
class g2 groupnode
|
||
g2 --> t3("ohne_menu_oder_toolbar_tut_nichts")
|
||
g2 --> t4("sortiert_und_fuegt_aktionen_in_prioritaetsreihenfolge_hinzu")
|
||
root --> g3["SetActivePluginTests (2)"]
|
||
class g3 groupnode
|
||
g3 --> t5("setzt_nur_aktive_action_auf_checked")
|
||
g3 --> t6("ohne_aktive_action_setzt_alle_auf_false")
|
||
root --> g4["RemoveActionTests (3)"]
|
||
class g4 groupnode
|
||
g4 --> t7("none_action_tut_nichts")
|
||
g4 --> t8("entfernt_action_aus_menu_toolbar_und_liste")
|
||
g4 --> t9("ohne_menu_oder_toolbar_entfernt_trotzdem_aus_liste")
|
||
root --> g5["RemoveAllTests (3)"]
|
||
class g5 groupnode
|
||
g5 --> t10("entfernt_menu_toolbar_und_setzt_zustand_zurueck")
|
||
g5 --> t11("loescht_menu_und_toolbar_objekt_damit_kein_duplikat_uebrig_bleibt")
|
||
g5 --> t12("ohne_menu_und_toolbar_ruft_wrapper_nicht_auf")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 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></tr></thead><tbody><tr><td class="mono">AddActionTests<br><span class="testname">test_ohne_plugin_group_liefert_none</span></td><td>Prüft, dass add_action ohne initialisierte Aktionsgruppe None liefert und nichts anlegt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">AddActionTests<br><span class="testname">test_erzeugt_action_und_fuegt_sie_gruppe_und_liste_hinzu</span></td><td>Prüft, dass add_action eine Action erzeugt, ihr die Gruppe zuweist und sie priorisiert in der Liste ablegt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FinalizeMenuAndToolbarTests<br><span class="testname">test_ohne_menu_oder_toolbar_tut_nichts</span></td><td>Prüft, dass finalize_menu_and_toolbar ohne Menü oder Toolbar keine Ausnahme wirft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FinalizeMenuAndToolbarTests<br><span class="testname">test_sortiert_und_fuegt_aktionen_in_prioritaetsreihenfolge_hinzu</span></td><td>Prüft, dass finalize_menu_and_toolbar Aktionen nach Priorität sortiert in Menü und Toolbar einträgt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">SetActivePluginTests<br><span class="testname">test_setzt_nur_aktive_action_auf_checked</span></td><td>Prüft, dass set_active_plugin nur die übergebene Action markiert, alle anderen abwählt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">SetActivePluginTests<br><span class="testname">test_ohne_aktive_action_setzt_alle_auf_false</span></td><td>Prüft, dass set_active_plugin ohne aktive Action alle bestehenden Actions abwählt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">RemoveActionTests<br><span class="testname">test_none_action_tut_nichts</span></td><td>Prüft, dass remove_action mit None keine Ausnahme wirft und die Liste unverändert lässt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">RemoveActionTests<br><span class="testname">test_entfernt_action_aus_menu_toolbar_und_liste</span></td><td>Prüft, dass remove_action die Action aus Menü, Toolbar und der internen Liste entfernt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">RemoveActionTests<br><span class="testname">test_ohne_menu_oder_toolbar_entfernt_trotzdem_aus_liste</span></td><td>Prüft, dass remove_action ohne Menü/Toolbar trotzdem aus der internen Liste entfernt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">RemoveAllTests<br><span class="testname">test_entfernt_menu_toolbar_und_setzt_zustand_zurueck</span></td><td>Prüft, dass remove_all Menü und Toolbar über die Wrapper entfernt und den Navigationszustand zurücksetzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">RemoveAllTests<br><span class="testname">test_loescht_menu_und_toolbar_objekt_damit_kein_duplikat_uebrig_bleibt</span></td><td>Prüft, dass remove_all deleteLater() auf Menü und Toolbar aufruft, damit sie den Qt-Objektbaum tatsächlich verlassen (Issue #72).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">RemoveAllTests<br><span class="testname">test_ohne_menu_und_toolbar_ruft_wrapper_nicht_auf</span></td><td>Prüft, dass remove_all ohne vorhandenes Menü/Toolbar die Wrapper nicht aufruft, aber die Liste leert.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_os_wrapper.py iscasesensitivefstests test_windows_ist_nicht_case_sensitiv iscasesensitivefstests test_macos_ist_nicht_case_sensitiv iscasesensitivefstests test_linux_ist_case_sensitiv" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-os-wrapper-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_os_wrapper.py</span><span class="card-meta"><span class="count-total">3 Testfälle</span><span class="cpill cpill-ok">3</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-os-wrapper-py"><p class="filedesc">Tests für sn_basis/functions/os_wrapper.py::is_case_sensitive_fs (Issue #67).</p><div class="gchips"><span class="gchip" title="">IsCaseSensitiveFsTests <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_os_wrapper.py"])
|
||
class root rootnode
|
||
root --> g1["IsCaseSensitiveFsTests (3)"]
|
||
class g1 groupnode
|
||
g1 --> t1("windows_ist_nicht_case_sensitiv")
|
||
g1 --> t2("macos_ist_nicht_case_sensitiv")
|
||
g1 --> t3("linux_ist_case_sensitiv")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 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></tr></thead><tbody><tr><td class="mono">IsCaseSensitiveFsTests<br><span class="testname">test_windows_ist_nicht_case_sensitiv</span></td><td>Prüft, dass Windows als nicht case-sensitives Dateisystem gilt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">IsCaseSensitiveFsTests<br><span class="testname">test_macos_ist_nicht_case_sensitiv</span></td><td>Prüft, dass macOS als nicht case-sensitives Dateisystem gilt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">IsCaseSensitiveFsTests<br><span class="testname">test_linux_ist_case_sensitiv</span></td><td>Prüft, dass Linux als case-sensitives Dateisystem gilt.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_print_kartenrand.py testberechneanordnung test_passt_einspaltig_nichts_aendert_sich testberechneanordnung test_mehr_spalten_und_breiterer_rand testberechneanordnung test_seite_wird_hoeher_wenn_auch_drei_spalten_nicht_reichen testberechneanordnung test_seite_wird_nie_kleiner testberechneanordnung test_ohne_legenden_nur_kartenschild testordnekartenrandan test_seite_hoeher_und_kartenschild_verschoben testordnekartenrandan test_spalten_ungleich_breit_und_text_umgebrochen testordnekartenrandan test_legenden_mindestens_so_breit_wie_kartenschild testordnekartenrandan test_passt_nichts_wird_verschoben testordnekartenrandan test_ohne_karte_keine_anordnung testmindestbreitebeimladen test_mindestbreite_nur_fuer_vermerkte_layouts testmindestbreitebeimladen test_listener_verbinden_und_trennen testmindestbreitebeimladen test_ohne_qgis_kein_listener testanbindungprintlayout test_vorlage_ordnet_kartenrand_an testanbindungprintlayout test_fehler_bei_der_anordnung_verhindert_die_vorlage_nicht" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-print-kartenrand-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_print_kartenrand.py</span><span class="card-meta"><span class="count-total">15 Testfälle</span><span class="cpill cpill-ok">15</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-print-kartenrand-py"><p class="filedesc">Tests für modules/print_kartenrand.py – Anordnung des Kartenrands neben der Karte (Basis #93).</p><div class="gchips"><span class="gchip" title="">TestBerechneAnordnung <b>5</b></span><span class="gchip" title="">TestOrdneKartenrandAn <b>5</b></span><span class="gchip" title="">TestMindestbreiteBeimLaden <b>3</b></span><span class="gchip" title="">TestAnbindungPrintLayout <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_print_kartenrand.py"])
|
||
class root rootnode
|
||
root --> g1["TestBerechneAnordnung (5)"]
|
||
class g1 groupnode
|
||
g1 --> t1("passt_einspaltig_nichts_aendert_sich")
|
||
g1 --> t2("mehr_spalten_und_breiterer_rand")
|
||
g1 --> t3("seite_wird_hoeher_wenn_auch_drei_spalten_nicht_reichen")
|
||
g1 --> t4("seite_wird_nie_kleiner")
|
||
g1 --> t5("ohne_legenden_nur_kartenschild")
|
||
root --> g2["TestOrdneKartenrandAn (5)"]
|
||
class g2 groupnode
|
||
g2 --> t6("seite_hoeher_und_kartenschild_verschoben")
|
||
g2 --> t7("spalten_ungleich_breit_und_text_umgebrochen")
|
||
g2 --> t8("legenden_mindestens_so_breit_wie_kartenschild")
|
||
g2 --> t9("passt_nichts_wird_verschoben")
|
||
g2 --> t10("ohne_karte_keine_anordnung")
|
||
root --> g3["TestMindestbreiteBeimLaden (3)"]
|
||
class g3 groupnode
|
||
g3 --> t11("mindestbreite_nur_fuer_vermerkte_layouts")
|
||
g3 --> t12("listener_verbinden_und_trennen")
|
||
g3 --> t13("ohne_qgis_kein_listener")
|
||
root --> g4["TestAnbindungPrintLayout (2)"]
|
||
class g4 groupnode
|
||
g4 --> t14("vorlage_ordnet_kartenrand_an")
|
||
g4 --> t15("fehler_bei_der_anordnung_verhindert_die_vorlage_nicht")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 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></tr></thead><tbody><tr><td class="mono">TestBerechneAnordnung<br><span class="testname">test_passt_einspaltig_nichts_aendert_sich</span></td><td>Prüft, dass bei genug Platz neben der Karte einspaltig angeordnet wird und Seite und Kartenschild bleiben.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBerechneAnordnung<br><span class="testname">test_mehr_spalten_und_breiterer_rand</span></td><td>Prüft, dass bei zu hohen Legenden die kleinste passende Spaltenzahl gewählt und der Kartenrand dafür verbreitert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBerechneAnordnung<br><span class="testname">test_seite_wird_hoeher_wenn_auch_drei_spalten_nicht_reichen</span></td><td>Prüft, dass die Seite höher wird und Quellenangabe und Kartenschild nach unten rutschen, wenn auch drei Spalten nicht reichen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBerechneAnordnung<br><span class="testname">test_seite_wird_nie_kleiner</span></td><td>Prüft, dass Seitenbreite und -höhe nie unter die ursprüngliche Seitengröße fallen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBerechneAnordnung<br><span class="testname">test_ohne_legenden_nur_kartenschild</span></td><td>Prüft, dass ohne Legenden nur Quellenangabe und Kartenschild zählen und die Seite bei zu niedriger Karte höher wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestOrdneKartenrandAn<br><span class="testname">test_seite_hoeher_und_kartenschild_verschoben</span></td><td>Prüft, dass bei zu niedriger Karte die Legende dreispaltig wird, die Seite wächst und Quellenangabe und Kartenschild um denselben Betrag nach unten rutschen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestOrdneKartenrandAn<br><span class="testname">test_spalten_ungleich_breit_und_text_umgebrochen</span></td><td>Prüft, dass die Legenden ungleich breite Spalten und einen automatischen Textumbruch bekommen, damit mehrspaltige Legenden nicht unnötig breit werden (#96).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestOrdneKartenrandAn<br><span class="testname">test_legenden_mindestens_so_breit_wie_kartenschild</span></td><td>Prüft, dass die Legenden die Breite des Kartenschilds als Mindestbreite bekommen und das Layout sie für das Neuladen vermerkt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestOrdneKartenrandAn<br><span class="testname">test_passt_nichts_wird_verschoben</span></td><td>Prüft, dass bei ausreichend hoher Karte weder Seite noch Kartenschild verändert werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestOrdneKartenrandAn<br><span class="testname">test_ohne_karte_keine_anordnung</span></td><td>Prüft, dass ein Layout ohne Hauptkarte unverändert bleibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestMindestbreiteBeimLaden<br><span class="testname">test_mindestbreite_nur_fuer_vermerkte_layouts</span></td><td>Prüft, dass beim Laden die Mindestbreite nur an Layouts mit Vermerk wieder gesetzt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestMindestbreiteBeimLaden<br><span class="testname">test_listener_verbinden_und_trennen</span></td><td>Prüft, dass der Listener readProject einmal verbindet, beim Trennen wieder löst und beides mehrfach aufgerufen werden darf.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestMindestbreiteBeimLaden<br><span class="testname">test_ohne_qgis_kein_listener</span></td><td>Prüft, dass im Mock-Modus kein Listener verbunden wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAnbindungPrintLayout<br><span class="testname">test_vorlage_ordnet_kartenrand_an</span></td><td>Prüft, dass PrintLayout beim Anlegen einer Vorlage den Kartenrand anordnen lässt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAnbindungPrintLayout<br><span class="testname">test_fehler_bei_der_anordnung_verhindert_die_vorlage_nicht</span></td><td>Prüft, dass ein Fehler bei der Anordnung nur als Warnung gemeldet wird und keine Ausnahme durchreicht.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_print_layout.py testprintlayout test_create_legend_item_links_map_and_enables_map_filtering testprintlayout test_create_legend_item_does_not_copy_project_layers_into_legend_model testprintlayout test_configure_legend_size_uses_content_adaptive_size testprintlayout test_configure_hauptkarte_grids_uses_wrapper_constants testprintlayout test_create_single_page_layout_keeps_legend_linked_to_hauptkarte_and_theme" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-print-layout-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_print_layout.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-print-layout-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestPrintLayout <b>5</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_print_layout.py"])
|
||
class root rootnode
|
||
root --> g1["TestPrintLayout (5)"]
|
||
class g1 groupnode
|
||
g1 --> t1("create_legend_item_links_map_and_enables_map_filtering")
|
||
g1 --> t2("create_legend_item_does_not_copy_project_layers_into_legend_model")
|
||
g1 --> t3("configure_legend_size_uses_content_adaptive_size")
|
||
g1 --> t4("configure_hauptkarte_grids_uses_wrapper_constants")
|
||
g1 --> t5("create_single_page_layout_keeps_legend_linked_to_hauptkarte_and_theme")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 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></tr></thead><tbody><tr><td class="mono">TestPrintLayout<br><span class="testname">test_create_legend_item_links_map_and_enables_map_filtering</span></td><td>Prüft, dass eine erzeugte Legende mit der übergebenen Karte verknüpft ist und automatisch nach deren Sichtbarkeit gefiltert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLayout<br><span class="testname">test_create_legend_item_does_not_copy_project_layers_into_legend_model</span></td><td>Prüft, dass eine neu erzeugte Legende keine Projekt-Layer in ihr Legendenmodell übernimmt (leere Root-Gruppe).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLayout<br><span class="testname">test_configure_legend_size_uses_content_adaptive_size</span></td><td>Prüft, dass die Legendengröße inhaltsadaptiv bestimmt wird (kein manuelles Resize) und die ermittelte Höhe zurückgegeben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLayout<br><span class="testname">test_configure_hauptkarte_grids_uses_wrapper_constants</span></td><td>Prüft, dass das Gitternetz der Hauptkarte mit den erwarteten Stil-, Rahmen- und Beschriftungskonstanten (nur rechts/unten beschriftet, Schriftgröße und Hintergrund) konfiguriert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLayout<br><span class="testname">test_create_single_page_layout_keeps_legend_linked_to_hauptkarte_and_theme</span></td><td>Prüft, dass ein einseitiges Layout die Hauptkarte auf das übergebene Kartenthema festlegt und die Legende mit dieser Karte verknüpft bleibt.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_print_logic.py testprintlogic test_get_baufreigabe_page_dimensions_prefers_a4_for_small_extent testprintlogic test_get_baufreigabe_page_dimensions_escalates_to_a3 testprintlogic test_get_baufreigabe_page_dimensions_respects_a4_as_maximum_with_fallback testprintlogic test_get_baufreigabe_page_dimensions_falls_back_to_a3_for_oversize_extent testprintlogic test_select_standard_page_layout_uses_a4_as_minimum_sheet testprintlogic test_select_standard_page_layout_limits_hauptkarte_to_a3 testprintlogic test_select_standard_page_layout_returns_none_if_a3_is_too_small testprintlogic test_get_standard_layout_dimensions_uses_a4_and_forces_fit_for_small_extent testprintlogic test_get_standard_layout_dimensions_caps_endlosrolle_width_at_2000_mm testprintlogic test_apply_standard_minimum_a4_fallback_for_small_page testprintlogic test_apply_standard_minimum_a4_fallback_keeps_large_page testprintlogic test_does_plot_fit_page_true_for_standard_a4 testprintlogic test_does_plot_fit_page_false_if_objects_exceed_page testprintlogic test_set_druckbereich_accepts_wie_kartenfenster testprintlogic test_get_canvas_extent_returns_valid_extent testprintlogic test_resolve_extent_uses_canvas_extent_without_buffer testprintlogic test_resolve_extent_uses_rectangle_extent_without_buffer" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-print-logic-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_print_logic.py</span><span class="card-meta"><span class="count-total">17 Testfälle</span><span class="cpill cpill-ok">17</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-print-logic-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestPrintLogic <b>17</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_print_logic.py"])
|
||
class root rootnode
|
||
root --> g1["TestPrintLogic (17)"]
|
||
class g1 groupnode
|
||
g1 --> t1("get_baufreigabe_page_dimensions_prefers_a4_for_small_extent")
|
||
g1 --> t2("get_baufreigabe_page_dimensions_escalates_to_a3")
|
||
g1 --> t3("get_baufreigabe_page_dimensions_respects_a4_as_maximum_with_fallback")
|
||
g1 --> t4("get_baufreigabe_page_dimensions_falls_back_to_a3_for_oversize_extent")
|
||
g1 --> t5("select_standard_page_layout_uses_a4_as_minimum_sheet")
|
||
g1 --> t6("select_standard_page_layout_limits_hauptkarte_to_a3")
|
||
g1 --> t7("select_standard_page_layout_returns_none_if_a3_is_too_small")
|
||
g1 --> t8("get_standard_layout_dimensions_uses_a4_and_forces_fit_for_small_extent")
|
||
g1 --> t9("get_standard_layout_dimensions_caps_endlosrolle_width_at_2000_mm")
|
||
g1 --> t10("apply_standard_minimum_a4_fallback_for_small_page")
|
||
g1 --> t11("apply_standard_minimum_a4_fallback_keeps_large_page")
|
||
g1 --> t12("does_plot_fit_page_true_for_standard_a4")
|
||
g1 --> t13("does_plot_fit_page_false_if_objects_exceed_page")
|
||
g1 --> t14("set_druckbereich_accepts_wie_kartenfenster")
|
||
g1 --> t15("get_canvas_extent_returns_valid_extent")
|
||
g1 --> t16("resolve_extent_uses_canvas_extent_without_buffer")
|
||
g1 --> t17("resolve_extent_uses_rectangle_extent_without_buffer")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 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></tr></thead><tbody><tr><td class="mono">TestPrintLogic<br><span class="testname">test_get_baufreigabe_page_dimensions_prefers_a4_for_small_extent</span></td><td>Prüft, dass für einen kleinen Kartenausschnitt (Baufreigabe) das Format DIN A4 ohne Fallback gewählt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_get_baufreigabe_page_dimensions_escalates_to_a3</span></td><td>Prüft, dass ein größerer Kartenausschnitt (Baufreigabe) auf DIN A3 eskaliert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_get_baufreigabe_page_dimensions_respects_a4_as_maximum_with_fallback</span></td><td>Prüft, dass bei auf DIN A4 begrenztem Höchstformat ein eigentlich A3-großer Ausschnitt mit Fallback-Kennzeichnung auf A4 reduziert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_get_baufreigabe_page_dimensions_falls_back_to_a3_for_oversize_extent</span></td><td>Prüft, dass ein Ausschnitt, der auch DIN A3 übersteigt, mit Fallback-Kennzeichnung auf DIN A3 begrenzt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_select_standard_page_layout_uses_a4_as_minimum_sheet</span></td><td>Prüft, dass für einen kleinen Ausschnitt trotz Höchstgrenze DIN A3 mindestens DIN A4 als Blattgröße gewählt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_select_standard_page_layout_limits_hauptkarte_to_a3</span></td><td>Prüft, dass ein die Fläche voll ausnutzender Ausschnitt auf DIN A3 als größtes zulässiges Format begrenzt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_select_standard_page_layout_returns_none_if_a3_is_too_small</span></td><td>Prüft, dass kein Layout gewählt wird (None), wenn der Ausschnitt selbst DIN A3 als Höchstformat übersteigt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_get_standard_layout_dimensions_uses_a4_and_forces_fit_for_small_extent</span></td><td>Prüft, dass für einen kleinen Ausschnitt DIN A4 gewählt und das Einpassen (force_fit) erzwungen wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_get_standard_layout_dimensions_caps_endlosrolle_width_at_2000_mm</span></td><td>Prüft, dass bei aktiviertem Formfaktor (Endlosrolle) die Seitenbreite auf die maximale Rollenbreite (2000 mm) begrenzt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_apply_standard_minimum_a4_fallback_for_small_page</span></td><td>Prüft, dass eine zu kleine Seite auf die A4-Mindestgröße angehoben und als erzwungen (forced) markiert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_apply_standard_minimum_a4_fallback_keeps_large_page</span></td><td>Prüft, dass eine bereits ausreichend große Seite (A3) unverändert bleibt und nicht als erzwungen markiert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_does_plot_fit_page_true_for_standard_a4</span></td><td>Prüft, dass ein Kartenobjekt, das in eine DIN A4-Seite passt, als passend erkannt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_does_plot_fit_page_false_if_objects_exceed_page</span></td><td>Prüft, dass ein Kartenobjekt, das die Seitenbreite überschreitet, als nicht passend erkannt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_set_druckbereich_accepts_wie_kartenfenster</span></td><td>Prüft, dass die Auswahl 'wie Kartenfenster' als Projektvariable 'druckbereich' gespeichert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_get_canvas_extent_returns_valid_extent</span></td><td>Prüft, dass der aktuelle Kartenausschnitt des Kartenfensters unverändert zurückgegeben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_resolve_extent_uses_canvas_extent_without_buffer</span></td><td>Prüft, dass bei Druckbereich 'wie Kartenfenster' der Kartenausschnitt ohne Puffer und ohne verknüpften Layer übernommen wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPrintLogic<br><span class="testname">test_resolve_extent_uses_rectangle_extent_without_buffer</span></td><td>Prüft, dass bei Druckbereich 'Rechteck' der gezeichnete Ausschnitt ohne Puffer und ohne verknüpften Layer übernommen wird.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_print_tab.py setservicestests test_ruft_alle_set_methoden_mit_combo_werten_auf setservicestests test_ohne_combos_ruft_keine_set_methode_auf restorestatetests test_gueltige_gespeicherte_werte_werden_uebernommen restorestatetests test_ungueltige_oder_fehlende_werte_fallen_auf_defaults_zurueck ondruckpufferclickedtests test_gueltige_zahl_setzt_variable_und_button_text ondruckpufferclickedtests test_abgebrochen_aendert_nichts ondruckpufferclickedtests test_ungueltige_zahl_zeigt_hinweis_und_setzt_nichts onvorlageerstellentests test_ruft_druckvorlage_anlegen_mit_combo_werten_auf onvorlageerstellentests test_ohne_logic_tut_nichts projectsignalstests test_connect_verbindet_alle_drei_signale projectsignalstests test_disconnect_trennt_alle_drei_signale projectsignalstests test_instance_wirft_ausnahme_wird_abgefangen cleanuptests test_ruft_beide_disconnect_methoden_auf toggleatlastests test_checked_true_setzt_arrow_down_und_zeigt_inhalt toggleatlastests test_checked_false_setzt_arrow_right_und_versteckt_inhalt restoreatlaslayerselectiontests test_vorhandene_layer_id_setzt_layer_in_combo restoreatlaslayerselectiontests test_leere_gespeicherte_layer_id_tut_nichts themecollectionsignalstests test_connect_verbindet_alle_signale themecollectionsignalstests test_connect_ist_idempotent_wenn_schon_verbunden themecollectionsignalstests test_disconnect_trennt_alle_signale refreshthemacombolivetests test_erhaelt_vorherige_auswahl_wenn_noch_vorhanden refreshthemacombolivetests test_faellt_auf_wie_kartenfenster_zurueck_wenn_auswahl_verschwunden getgespeichertethementests test_dedupliziert_und_filtert_leere_eintraege getgespeichertethementests test_fehler_liefert_leere_liste getcurrentcanvasscaletests test_liefert_skalierung_als_float getcurrentcanvasscaletests test_ohne_canvas_liefert_none getcurrentcanvasscaletests test_skalierung_null_liefert_none onatlaslayerchangedtests test_none_oder_leer_setzt_variable_leer onatlaslayerchangedtests test_layer_objekt_mit_id_methode_setzt_dessen_id onatlaslayerchangedtests test_string_fallback_sucht_layer_ueber_namen onauswahlasatlasclickedtests test_erfolgreicher_layer_aktualisiert_atlas_ui onauswahlasatlasclickedtests test_ohne_erzeugten_layer_tut_nichts_weiter populateatlaslayercombotests test_befuellt_combo_ohne_druckrechteck_und_leere_namen populateatlaslayercombotests test_ohne_atlas_layer_combo_tut_nichts onatlaserzeugenchangedtests test_aktiviert_speichert_variable_und_aktiviert_widgets onatlaserzeugenchangedtests test_deaktiviert_speichert_variable_und_deaktiviert_widgets onatlaserzeugenchangedtests test_ohne_widgets_wirft_keine_ausnahme" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-print-tab-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_print_tab.py</span><span class="card-meta"><span class="count-total">37 Testfälle</span><span class="cpill cpill-ok">37</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-print-tab-py"><p class="filedesc">Tests für sn_basis/ui/tabs/print_tab.py::PrintTab (Issue #67).</p><div class="gchips"><span class="gchip" title="">SetServicesTests <b>2</b></span><span class="gchip" title="">RestoreStateTests <b>2</b></span><span class="gchip" title="">OnDruckpufferClickedTests <b>3</b></span><span class="gchip" title="">OnVorlageErstellenTests <b>2</b></span><span class="gchip" title="">ProjectSignalsTests <b>3</b></span><span class="gchip" title="">CleanupTests <b>1</b></span><span class="gchip" title="">ToggleAtlasTests <b>2</b></span><span class="gchip" title="">RestoreAtlasLayerSelectionTests <b>2</b></span><span class="gchip" title="">ThemeCollectionSignalsTests <b>3</b></span><span class="gchip" title="">RefreshThemaComboLiveTests <b>2</b></span><span class="gchip" title="">GetGespeicherteThemenTests <b>2</b></span><span class="gchip" title="">GetCurrentCanvasScaleTests <b>3</b></span><span class="gchip" title="">OnAtlasLayerChangedTests <b>3</b></span><span class="gchip" title="">OnAuswahlAsAtlasClickedTests <b>2</b></span><span class="gchip" title="">PopulateAtlasLayerComboTests <b>2</b></span><span class="gchip" title="">OnAtlasErzeugenChangedTests <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_print_tab.py"])
|
||
class root rootnode
|
||
root --> g1["SetServicesTests (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("ruft_alle_set_methoden_mit_combo_werten_auf")
|
||
g1 --> t2("ohne_combos_ruft_keine_set_methode_auf")
|
||
root --> g2["RestoreStateTests (2)"]
|
||
class g2 groupnode
|
||
g2 --> t3("gueltige_gespeicherte_werte_werden_uebernommen")
|
||
g2 --> t4("ungueltige_oder_fehlende_werte_fallen_auf_defaults_zurueck")
|
||
root --> g3["OnDruckpufferClickedTests (3)"]
|
||
class g3 groupnode
|
||
g3 --> t5("gueltige_zahl_setzt_variable_und_button_text")
|
||
g3 --> t6("abgebrochen_aendert_nichts")
|
||
g3 --> t7("ungueltige_zahl_zeigt_hinweis_und_setzt_nichts")
|
||
root --> g4["OnVorlageErstellenTests (2)"]
|
||
class g4 groupnode
|
||
g4 --> t8("ruft_druckvorlage_anlegen_mit_combo_werten_auf")
|
||
g4 --> t9("ohne_logic_tut_nichts")
|
||
root --> g5["ProjectSignalsTests (3)"]
|
||
class g5 groupnode
|
||
g5 --> t10("connect_verbindet_alle_drei_signale")
|
||
g5 --> t11("disconnect_trennt_alle_drei_signale")
|
||
g5 --> t12("instance_wirft_ausnahme_wird_abgefangen")
|
||
root --> g6["CleanupTests (1)"]
|
||
class g6 groupnode
|
||
g6 --> t13("ruft_beide_disconnect_methoden_auf")
|
||
root --> g7["ToggleAtlasTests (2)"]
|
||
class g7 groupnode
|
||
g7 --> t14("checked_true_setzt_arrow_down_und_zeigt_inhalt")
|
||
g7 --> t15("checked_false_setzt_arrow_right_und_versteckt_inhalt")
|
||
root --> g8["RestoreAtlasLayerSelectionTests (2)"]
|
||
class g8 groupnode
|
||
g8 --> t16("vorhandene_layer_id_setzt_layer_in_combo")
|
||
g8 --> t17("leere_gespeicherte_layer_id_tut_nichts")
|
||
root --> g9["ThemeCollectionSignalsTests (3)"]
|
||
class g9 groupnode
|
||
g9 --> t18("connect_verbindet_alle_signale")
|
||
g9 --> t19("connect_ist_idempotent_wenn_schon_verbunden")
|
||
g9 --> t20("disconnect_trennt_alle_signale")
|
||
root --> g10["RefreshThemaComboLiveTests (2)"]
|
||
class g10 groupnode
|
||
g10 --> t21("erhaelt_vorherige_auswahl_wenn_noch_vorhanden")
|
||
g10 --> t22("faellt_auf_wie_kartenfenster_zurueck_wenn_auswahl_verschwunden")
|
||
root --> g11["GetGespeicherteThemenTests (2)"]
|
||
class g11 groupnode
|
||
g11 --> t23("dedupliziert_und_filtert_leere_eintraege")
|
||
g11 --> t24("fehler_liefert_leere_liste")
|
||
root --> g12["GetCurrentCanvasScaleTests (3)"]
|
||
class g12 groupnode
|
||
g12 --> t25("liefert_skalierung_als_float")
|
||
g12 --> t26("ohne_canvas_liefert_none")
|
||
g12 --> t27("skalierung_null_liefert_none")
|
||
root --> g13["OnAtlasLayerChangedTests (3)"]
|
||
class g13 groupnode
|
||
g13 --> t28("none_oder_leer_setzt_variable_leer")
|
||
g13 --> t29("layer_objekt_mit_id_methode_setzt_dessen_id")
|
||
g13 --> t30("string_fallback_sucht_layer_ueber_namen")
|
||
root --> g14["OnAuswahlAsAtlasClickedTests (2)"]
|
||
class g14 groupnode
|
||
g14 --> t31("erfolgreicher_layer_aktualisiert_atlas_ui")
|
||
g14 --> t32("ohne_erzeugten_layer_tut_nichts_weiter")
|
||
root --> g15["PopulateAtlasLayerComboTests (2)"]
|
||
class g15 groupnode
|
||
g15 --> t33("befuellt_combo_ohne_druckrechteck_und_leere_namen")
|
||
g15 --> t34("ohne_atlas_layer_combo_tut_nichts")
|
||
root --> g16["OnAtlasErzeugenChangedTests (3)"]
|
||
class g16 groupnode
|
||
g16 --> t35("aktiviert_speichert_variable_und_aktiviert_widgets")
|
||
g16 --> t36("deaktiviert_speichert_variable_und_deaktiviert_widgets")
|
||
g16 --> t37("ohne_widgets_wirft_keine_ausnahme")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 ok
|
||
class t21 ok
|
||
class t22 ok
|
||
class t23 ok
|
||
class t24 ok
|
||
class t25 ok
|
||
class t26 ok
|
||
class t27 ok
|
||
class t28 ok
|
||
class t29 ok
|
||
class t30 ok
|
||
class t31 ok
|
||
class t32 ok
|
||
class t33 ok
|
||
class t34 ok
|
||
class t35 ok
|
||
class t36 ok
|
||
class t37 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></tr></thead><tbody><tr><td class="mono">SetServicesTests<br><span class="testname">test_ruft_alle_set_methoden_mit_combo_werten_auf</span></td><td>Prüft, dass set_services alle set_*-Methoden von PrintLogic mit den aktuellen Combo-Werten aufruft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">SetServicesTests<br><span class="testname">test_ohne_combos_ruft_keine_set_methode_auf</span></td><td>Prüft, dass set_services ohne vorhandene Combos keine set_*-Methode von PrintLogic aufruft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">RestoreStateTests<br><span class="testname">test_gueltige_gespeicherte_werte_werden_uebernommen</span></td><td>Prüft, dass _restore_state gültige gespeicherte Werte in die jeweiligen Widgets übernimmt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">RestoreStateTests<br><span class="testname">test_ungueltige_oder_fehlende_werte_fallen_auf_defaults_zurueck</span></td><td>Prüft, dass _restore_state ohne (gültige) gespeicherte Werte auf die Default-Konstanten zurückfällt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnDruckpufferClickedTests<br><span class="testname">test_gueltige_zahl_setzt_variable_und_button_text</span></td><td>Prüft, dass eine bestätigte, gültige Zahl den Druckpuffer speichert und den Button-Text aktualisiert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnDruckpufferClickedTests<br><span class="testname">test_abgebrochen_aendert_nichts</span></td><td>Prüft, dass ein abgebrochener Dialog den Druckpuffer nicht verändert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnDruckpufferClickedTests<br><span class="testname">test_ungueltige_zahl_zeigt_hinweis_und_setzt_nichts</span></td><td>Prüft, dass eine nicht-numerische Eingabe einen Hinweis zeigt und den Druckpuffer nicht setzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnVorlageErstellenTests<br><span class="testname">test_ruft_druckvorlage_anlegen_mit_combo_werten_auf</span></td><td>Prüft, dass _on_vorlage_erstellen druckvorlage_anlegen mit den aktuellen Combo-Werten aufruft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnVorlageErstellenTests<br><span class="testname">test_ohne_logic_tut_nichts</span></td><td>Prüft, dass _on_vorlage_erstellen ohne gesetzte PrintLogic keine Ausnahme wirft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ProjectSignalsTests<br><span class="testname">test_connect_verbindet_alle_drei_signale</span></td><td>Prüft, dass _connect_project_signals alle drei Projektsignale mit _on_project_changed verbindet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ProjectSignalsTests<br><span class="testname">test_disconnect_trennt_alle_drei_signale</span></td><td>Prüft, dass _disconnect_project_signals alle drei zuvor verbundenen Projektsignale trennt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ProjectSignalsTests<br><span class="testname">test_instance_wirft_ausnahme_wird_abgefangen</span></td><td>Prüft, dass eine Ausnahme bei QgsProject.instance() in beiden Signalmethoden abgefangen wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CleanupTests<br><span class="testname">test_ruft_beide_disconnect_methoden_auf</span></td><td>Prüft, dass cleanup sowohl die Theme- als auch die Projektsignale trennt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ToggleAtlasTests<br><span class="testname">test_checked_true_setzt_arrow_down_und_zeigt_inhalt</span></td><td>Prüft, dass _toggle_atlas bei checked=True den Pfeil nach unten dreht und den Inhalt einblendet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ToggleAtlasTests<br><span class="testname">test_checked_false_setzt_arrow_right_und_versteckt_inhalt</span></td><td>Prüft, dass _toggle_atlas bei checked=False den Pfeil nach rechts dreht und den Inhalt ausblendet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">RestoreAtlasLayerSelectionTests<br><span class="testname">test_vorhandene_layer_id_setzt_layer_in_combo</span></td><td>Prüft, dass eine gespeicherte Layer-ID den zugehörigen Layer im Atlas-Dropdown auswählt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">RestoreAtlasLayerSelectionTests<br><span class="testname">test_leere_gespeicherte_layer_id_tut_nichts</span></td><td>Prüft, dass eine leere gespeicherte Layer-ID das Projekt gar nicht erst anfragt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ThemeCollectionSignalsTests<br><span class="testname">test_connect_verbindet_alle_signale</span></td><td>Prüft, dass _connect_theme_collection_signals alle Signale der Theme-Collection verbindet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ThemeCollectionSignalsTests<br><span class="testname">test_connect_ist_idempotent_wenn_schon_verbunden</span></td><td>Prüft, dass _connect_theme_collection_signals bei bereits verbundenem Signal nichts erneut tut.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ThemeCollectionSignalsTests<br><span class="testname">test_disconnect_trennt_alle_signale</span></td><td>Prüft, dass _disconnect_theme_collection_signals alle verbundenen Theme-Signale trennt und zurücksetzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">RefreshThemaComboLiveTests<br><span class="testname">test_erhaelt_vorherige_auswahl_wenn_noch_vorhanden</span></td><td>Prüft, dass _refresh_thema_combo_live die vorherige Auswahl beibehält, wenn sie noch existiert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">RefreshThemaComboLiveTests<br><span class="testname">test_faellt_auf_wie_kartenfenster_zurueck_wenn_auswahl_verschwunden</span></td><td>Prüft, dass _refresh_thema_combo_live auf 'wie Kartenfenster' zurückfällt, wenn die Auswahl verschwunden ist.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">GetGespeicherteThemenTests<br><span class="testname">test_dedupliziert_und_filtert_leere_eintraege</span></td><td>Prüft, dass _get_gespeicherte_themen Duplikate und leere/None-Einträge entfernt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">GetGespeicherteThemenTests<br><span class="testname">test_fehler_liefert_leere_liste</span></td><td>Prüft, dass ein Fehler beim Zugriff auf die Theme-Collection eine leere Liste liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">GetCurrentCanvasScaleTests<br><span class="testname">test_liefert_skalierung_als_float</span></td><td>Prüft, dass _get_current_canvas_scale die Canvas-Skalierung als float liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">GetCurrentCanvasScaleTests<br><span class="testname">test_ohne_canvas_liefert_none</span></td><td>Prüft, dass _get_current_canvas_scale ohne verfügbares Kartenfenster None liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">GetCurrentCanvasScaleTests<br><span class="testname">test_skalierung_null_liefert_none</span></td><td>Prüft, dass eine Skalierung von 0 als None statt als 0.0 gilt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnAtlasLayerChangedTests<br><span class="testname">test_none_oder_leer_setzt_variable_leer</span></td><td>Prüft, dass None oder ein leerer Wert die Abdeckungslayer-Variable leeren.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnAtlasLayerChangedTests<br><span class="testname">test_layer_objekt_mit_id_methode_setzt_dessen_id</span></td><td>Prüft, dass ein echtes Layer-Objekt (mit id()-Methode) dessen ID speichert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnAtlasLayerChangedTests<br><span class="testname">test_string_fallback_sucht_layer_ueber_namen</span></td><td>Prüft, dass ohne id()-Methode über den Layernamen im Projekt gesucht und dessen ID gespeichert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnAuswahlAsAtlasClickedTests<br><span class="testname">test_erfolgreicher_layer_aktualisiert_atlas_ui</span></td><td>Prüft, dass ein erfolgreich erzeugter Atlas-Layer den Atlas-Bereich öffnet und ins Dropdown übernimmt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnAuswahlAsAtlasClickedTests<br><span class="testname">test_ohne_erzeugten_layer_tut_nichts_weiter</span></td><td>Prüft, dass ohne erzeugten Atlas-Layer keine UI-Aktualisierung stattfindet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">PopulateAtlasLayerComboTests<br><span class="testname">test_befuellt_combo_ohne_druckrechteck_und_leere_namen</span></td><td>Prüft, dass _populate_atlas_layer_combo alle Layernamen außer 'Druckrechteck' und leeren Namen einträgt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">PopulateAtlasLayerComboTests<br><span class="testname">test_ohne_atlas_layer_combo_tut_nichts</span></td><td>Prüft, dass _populate_atlas_layer_combo ohne Atlas-Dropdown keine Ausnahme wirft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnAtlasErzeugenChangedTests<br><span class="testname">test_aktiviert_speichert_variable_und_aktiviert_widgets</span></td><td>Prüft, dass ein aktivierter Atlas-Schalter die Variable setzt und Layer-Combo/Button aktiviert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnAtlasErzeugenChangedTests<br><span class="testname">test_deaktiviert_speichert_variable_und_deaktiviert_widgets</span></td><td>Prüft, dass ein deaktivierter Atlas-Schalter die Variable setzt und Layer-Combo/Button deaktiviert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnAtlasErzeugenChangedTests<br><span class="testname">test_ohne_widgets_wirft_keine_ausnahme</span></td><td>Prüft, dass _on_atlas_erzeugen_changed ohne Atlas-Combo/-Button keine Ausnahme wirft.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_pruef_ergebnis.py istverfahrensdbaktiontests test_liefert_true_fuer_alle_verfahrens_db_aktionen istverfahrensdbaktiontests test_liefert_false_fuer_andere_aktionen erlaubtepersistierungtests test_liefert_true_fuer_erzeugen_ueberschreiben_anhaengen erlaubtepersistierungtests test_liefert_false_fuer_ueberspringen_und_reines_existieren dateipfadtests test_liefert_path_wenn_kontext_ein_path_ist dateipfadtests test_liefert_none_wenn_kontext_kein_path_ist" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-pruef-ergebnis-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_pruef_ergebnis.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-pruef-ergebnis-py"><p class="filedesc">Tests für sn_basis/modules/pruef_ergebnis.py::ist_verfahrens_db_aktion/erlaubte_persistierung/dateipfad (Issue #65/#67).</p><div class="gchips"><span class="gchip" title="">IstVerfahrensDbAktionTests <b>2</b></span><span class="gchip" title="">ErlaubtePersistierungTests <b>2</b></span><span class="gchip" title="">DateipfadTests <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_pruef_ergebnis.py"])
|
||
class root rootnode
|
||
root --> g1["IstVerfahrensDbAktionTests (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("liefert_true_fuer_alle_verfahrens_db_aktionen")
|
||
g1 --> t2("liefert_false_fuer_andere_aktionen")
|
||
root --> g2["ErlaubtePersistierungTests (2)"]
|
||
class g2 groupnode
|
||
g2 --> t3("liefert_true_fuer_erzeugen_ueberschreiben_anhaengen")
|
||
g2 --> t4("liefert_false_fuer_ueberspringen_und_reines_existieren")
|
||
root --> g3["DateipfadTests (2)"]
|
||
class g3 groupnode
|
||
g3 --> t5("liefert_path_wenn_kontext_ein_path_ist")
|
||
g3 --> t6("liefert_none_wenn_kontext_kein_path_ist")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 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></tr></thead><tbody><tr><td class="mono">IstVerfahrensDbAktionTests<br><span class="testname">test_liefert_true_fuer_alle_verfahrens_db_aktionen</span></td><td>Prüft, dass ist_verfahrens_db_aktion für alle vier Verfahrens-DB-Aktionscodes True liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">IstVerfahrensDbAktionTests<br><span class="testname">test_liefert_false_fuer_andere_aktionen</span></td><td>Prüft, dass ist_verfahrens_db_aktion für Nicht-Verfahrens-DB-Aktionen und ohne Aktion False liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ErlaubtePersistierungTests<br><span class="testname">test_liefert_true_fuer_erzeugen_ueberschreiben_anhaengen</span></td><td>Prüft, dass erlaubte_persistierung für Erzeugen/Überschreiben/Anhängen True liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ErlaubtePersistierungTests<br><span class="testname">test_liefert_false_fuer_ueberspringen_und_reines_existieren</span></td><td>Prüft, dass erlaubte_persistierung bei Überspringen und reinem 'datei_existiert' False liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DateipfadTests<br><span class="testname">test_liefert_path_wenn_kontext_ein_path_ist</span></td><td>Prüft, dass dateipfad den Kontext liefert, wenn dieser bereits ein Path-Objekt ist.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">DateipfadTests<br><span class="testname">test_liefert_none_wenn_kontext_kein_path_ist</span></td><td>Prüft, dass dateipfad None liefert, wenn der Kontext kein Path-Objekt ist (z. B. String oder Layer).</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_pruefmanager.py testpruefmanager test_ok testpruefmanager test_leereingabe_erlaubt_ja testpruefmanager test_leereingabe_erlaubt_nein testpruefmanager test_standarddatei_vorschlagen_ja testpruefmanager test_standarddatei_vorschlagen_nein testpruefmanager test_temporaer_erlaubt_ja testpruefmanager test_temporaer_erlaubt_nein testpruefmanager test_layer_unsichtbar_ja testpruefmanager test_layer_unsichtbar_nein testpruefmanager test_unbekannte_aktion testpruefmanager test_datei_existiert_overwrite testpruefmanager test_datei_existiert_append testpruefmanager test_datei_existiert_cancel testpruefmanager test_datei_existiert_in_non_qgis_mode_returns_input testpruefmanager test_verfahrensgebiet_layer_existiert_ergaenzen testpruefmanager test_verfahrensgebiet_layer_existiert_abbrechen testpruefmanager test_verfahrensgebiet_layer_existiert_entfernen testpruefmanager test_verfahrensgebiet_layer_existiert_ersetzen testpruefmanager test_verfahrensgebiet_layer_existiert_in_non_qgis_mode_returns_input testpruefmanager test_report_error_kritische_aktion_ruft_error_auf testpruefmanager test_report_error_warn_aktion_ruft_warning_auf testpruefmanager test_report_error_unbekannte_aktion_faellt_auf_warning_zurueck testpruefmanager test_frage_ja_nein_im_qgis_modus_fragt_nutzer testpruefmanager test_frage_ja_nein_ausserhalb_qgis_liefert_default_ohne_rueckfrage testpruefmanager test_frage_text_im_qgis_modus_fragt_nutzer testpruefmanager test_frage_text_ausserhalb_qgis_liefert_default_ohne_rueckfrage" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-pruefmanager-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_pruefmanager.py</span><span class="card-meta"><span class="count-total">26 Testfälle</span><span class="cpill cpill-ok">26</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-pruefmanager-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestPruefmanager <b>26</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_pruefmanager.py"])
|
||
class root rootnode
|
||
root --> g1["TestPruefmanager (26)"]
|
||
class g1 groupnode
|
||
g1 --> t1("ok")
|
||
g1 --> t2("leereingabe_erlaubt_ja")
|
||
g1 --> t3("leereingabe_erlaubt_nein")
|
||
g1 --> t4("standarddatei_vorschlagen_ja")
|
||
g1 --> t5("standarddatei_vorschlagen_nein")
|
||
g1 --> t6("temporaer_erlaubt_ja")
|
||
g1 --> t7("temporaer_erlaubt_nein")
|
||
g1 --> t8("layer_unsichtbar_ja")
|
||
g1 --> t9("layer_unsichtbar_nein")
|
||
g1 --> t10("unbekannte_aktion")
|
||
g1 --> t11("datei_existiert_overwrite")
|
||
g1 --> t12("datei_existiert_append")
|
||
g1 --> t13("datei_existiert_cancel")
|
||
g1 --> t14("datei_existiert_in_non_qgis_mode_returns_input")
|
||
g1 --> t15("verfahrensgebiet_layer_existiert_ergaenzen")
|
||
g1 --> t16("verfahrensgebiet_layer_existiert_abbrechen")
|
||
g1 --> t17("verfahrensgebiet_layer_existiert_entfernen")
|
||
g1 --> t18("verfahrensgebiet_layer_existiert_ersetzen")
|
||
g1 --> t19("verfahrensgebiet_layer_existiert_in_non_qgis_mode_returns_input")
|
||
g1 --> t20("report_error_kritische_aktion_ruft_error_auf")
|
||
g1 --> t21("report_error_warn_aktion_ruft_warning_auf")
|
||
g1 --> t22("report_error_unbekannte_aktion_faellt_auf_warning_zurueck")
|
||
g1 --> t23("frage_ja_nein_im_qgis_modus_fragt_nutzer")
|
||
g1 --> t24("frage_ja_nein_ausserhalb_qgis_liefert_default_ohne_rueckfrage")
|
||
g1 --> t25("frage_text_im_qgis_modus_fragt_nutzer")
|
||
g1 --> t26("frage_text_ausserhalb_qgis_liefert_default_ohne_rueckfrage")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 ok
|
||
class t21 ok
|
||
class t22 ok
|
||
class t23 ok
|
||
class t24 ok
|
||
class t25 ok
|
||
class t26 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></tr></thead><tbody><tr><td class="mono">TestPruefmanager<br><span class="testname">test_ok</span></td><td>Prüft, dass ein bereits erfolgreiches Prüfergebnis ohne Nutzerinteraktion als 'ok' durchgereicht wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_leereingabe_erlaubt_ja</span></td><td>Prüft, dass bei erlaubter leerer Eingabe eine Ja-Antwort des Nutzers die Entscheidung 'ok' liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_leereingabe_erlaubt_nein</span></td><td>Prüft, dass bei erlaubter leerer Eingabe eine Nein-Antwort die Aktion 'leereingabe_erlaubt' als abgelehnt bestehen lässt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_standarddatei_vorschlagen_ja</span></td><td>Prüft, dass eine Ja-Antwort auf den Vorschlag der Standarddatei die Entscheidung 'ok' mit dem Standardpfad als Kontext liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_standarddatei_vorschlagen_nein</span></td><td>Prüft, dass eine Nein-Antwort auf den Vorschlag der Standarddatei die Aktion 'standarddatei_vorschlagen' als abgelehnt bestehen lässt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_temporaer_erlaubt_ja</span></td><td>Prüft, dass eine Ja-Antwort auf die Rückfrage nach einer temporären Datei die Aktion 'temporaer_erzeugen' auslöst.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_temporaer_erlaubt_nein</span></td><td>Prüft, dass eine Nein-Antwort auf die Rückfrage nach einer temporären Datei die Aktion 'temporaer_erlaubt' als abgelehnt bestehen lässt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_layer_unsichtbar_ja</span></td><td>Prüft, dass eine Ja-Antwort bei unsichtbarem Layer den Layer sichtbar schaltet und die Entscheidung 'ok' liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_layer_unsichtbar_nein</span></td><td>Prüft, dass eine Nein-Antwort bei unsichtbarem Layer die Aktion 'layer_unsichtbar' als abgelehnt bestehen lässt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_unbekannte_aktion</span></td><td>Prüft, dass eine unbekannte Aktion eine Warnung auslöst und unverarbeitet als Fehlschlag zurückgegeben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_datei_existiert_overwrite</span></td><td>Prüft, dass die Nutzerwahl 'überschreiben' bei bestehender Datei zur Aktion 'datei_existiert_ueberschreiben' führt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_datei_existiert_append</span></td><td>Prüft, dass die Nutzerwahl 'anhängen' bei bestehender Datei zur Aktion 'datei_existiert_anhaengen' führt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_datei_existiert_cancel</span></td><td>Prüft, dass die Nutzerwahl 'abbrechen' bei bestehender Datei zur Aktion 'datei_existiert_ueberspringen' führt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_datei_existiert_in_non_qgis_mode_returns_input</span></td><td>Prüft, dass außerhalb des QGIS-Modus bei bestehender Datei keine Rückfrage erfolgt, sondern die ursprüngliche Aktion unentschieden zurückgegeben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_verfahrensgebiet_layer_existiert_ergaenzen</span></td><td>Prüft, dass die Nutzerwahl 'ergänzen' bei bestehendem Verfahrensgebiet zur Aktion 'verfahrensgebiet_ergaenzen' führt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_verfahrensgebiet_layer_existiert_abbrechen</span></td><td>Prüft, dass die Nutzerwahl 'abbrechen' bei bestehendem Verfahrensgebiet ok=False mit Aktion 'verfahrensgebiet_abbrechen' liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_verfahrensgebiet_layer_existiert_entfernen</span></td><td>Prüft, dass die Nutzerwahl 'entfernen' bei bestehendem Verfahrensgebiet zur Aktion 'verfahrensgebiet_entfernen' führt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_verfahrensgebiet_layer_existiert_ersetzen</span></td><td>Prüft, dass die Nutzerwahl 'ersetzen' bei bestehendem Verfahrensgebiet zur Aktion 'verfahrensgebiet_ersetzen' führt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_verfahrensgebiet_layer_existiert_in_non_qgis_mode_returns_input</span></td><td>Prüft, dass außerhalb des QGIS-Modus bei bestehendem Verfahrensgebiet keine Rückfrage erfolgt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_report_error_kritische_aktion_ruft_error_auf</span></td><td>Prüft, dass eine kritische Aktion (z. B. 'netzwerkfehler') über error() gemeldet wird, nicht über warning().</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_report_error_warn_aktion_ruft_warning_auf</span></td><td>Prüft, dass eine Warn-Aktion (z. B. 'datei_nicht_gefunden') über warning() gemeldet wird, nicht über error().</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_report_error_unbekannte_aktion_faellt_auf_warning_zurueck</span></td><td>Prüft, dass eine nicht eingestufte Aktion als Fallback über warning() gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_frage_ja_nein_im_qgis_modus_fragt_nutzer</span></td><td>Prüft, dass frage_ja_nein im QGIS-Modus den Nutzer fragt und dessen Antwort liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_frage_ja_nein_ausserhalb_qgis_liefert_default_ohne_rueckfrage</span></td><td>Prüft, dass frage_ja_nein außerhalb des QGIS-Modus den Default-Wert liefert, ohne den Nutzer zu fragen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_frage_text_im_qgis_modus_fragt_nutzer</span></td><td>Prüft, dass frage_text im QGIS-Modus den Nutzer fragt und Text plus OK-Status liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefmanager<br><span class="testname">test_frage_text_ausserhalb_qgis_liefert_default_ohne_rueckfrage</span></td><td>Prüft, dass frage_text außerhalb des QGIS-Modus den Standardtext mit OK=True liefert, ohne den Nutzer zu fragen.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_qgiscore_wrapper_helpers.py polygonzulinietests test_none_liefert_none polygonzulinietests test_leere_geometrie_liefert_none polygonzulinietests test_stufe1_nutzt_boundary_wenn_vorhanden polygonzulinietests test_stufe2_extrahiert_ringe_bei_einfachem_polygon polygonzulinietests test_stufe2_extrahiert_alle_ringe_bei_multipolygon polygonzulinietests test_stufe3_fallback_wenn_keine_ringe_extrahierbar polygonzulinietests test_alle_stufen_scheitern_liefert_none layerexistsingpkgtests test_fehlende_datei_liefert_false layerexistsingpkgtests test_leerer_pfad_oder_layername_liefert_false layerexistsingpkgtests test_vorhandener_layer_liefert_true layerexistsingpkgtests test_fehlender_layer_liefert_false createbufferlayertests test_ohne_qgis_liefert_none createbufferlayertests test_fehlender_source_layer_liefert_none createbufferlayertests test_source_layer_ohne_getfeatures_liefert_none" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-qgiscore-wrapper-helpers-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_qgiscore_wrapper_helpers.py</span><span class="card-meta"><span class="count-total">14 Testfälle</span><span class="cpill cpill-ok">14</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-qgiscore-wrapper-helpers-py"><p class="filedesc">Tests für sn_basis/functions/qgiscore_wrapper.py::polygon_zu_linie/layer_exists_in_gpkg/create_buffer_layer (Issue #65/#67).</p><div class="gchips"><span class="gchip" title="">PolygonZuLinieTests <b>7</b></span><span class="gchip" title="">LayerExistsInGpkgTests <b>4</b></span><span class="gchip" title="Deckt nur die Wächter ab: die eigentliche Pufferbildung importiert `qgis.core.QgsFeature`">CreateBufferLayerTests <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_qgiscore_wrapper_helpers.py"])
|
||
class root rootnode
|
||
root --> g1["PolygonZuLinieTests (7)"]
|
||
class g1 groupnode
|
||
g1 --> t1("none_liefert_none")
|
||
g1 --> t2("leere_geometrie_liefert_none")
|
||
g1 --> t3("stufe1_nutzt_boundary_wenn_vorhanden")
|
||
g1 --> t4("stufe2_extrahiert_ringe_bei_einfachem_polygon")
|
||
g1 --> t5("stufe2_extrahiert_alle_ringe_bei_multipolygon")
|
||
g1 --> t6("stufe3_fallback_wenn_keine_ringe_extrahierbar")
|
||
g1 --> t7("alle_stufen_scheitern_liefert_none")
|
||
root --> g2["LayerExistsInGpkgTests (4)"]
|
||
class g2 groupnode
|
||
g2 --> t8("fehlende_datei_liefert_false")
|
||
g2 --> t9("leerer_pfad_oder_layername_liefert_false")
|
||
g2 --> t10("vorhandener_layer_liefert_true")
|
||
g2 --> t11("fehlender_layer_liefert_false")
|
||
root --> g3["CreateBufferLayerTests (3)"]
|
||
class g3 groupnode
|
||
g3 --> t12("ohne_qgis_liefert_none")
|
||
g3 --> t13("fehlender_source_layer_liefert_none")
|
||
g3 --> t14("source_layer_ohne_getfeatures_liefert_none")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 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></tr></thead><tbody><tr><td class="mono">PolygonZuLinieTests<br><span class="testname">test_none_liefert_none</span></td><td>Prüft, dass polygon_zu_linie für None-Eingabe None liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">PolygonZuLinieTests<br><span class="testname">test_leere_geometrie_liefert_none</span></td><td>Prüft, dass eine leere Geometrie None liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">PolygonZuLinieTests<br><span class="testname">test_stufe1_nutzt_boundary_wenn_vorhanden</span></td><td>Prüft, dass eine Geometrie mit boundary() (QGIS 3.x-Pfad) deren Ergebnis direkt liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">PolygonZuLinieTests<br><span class="testname">test_stufe2_extrahiert_ringe_bei_einfachem_polygon</span></td><td>Prüft, dass ohne boundary() die Ringe eines einfachen Polygons manuell extrahiert werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">PolygonZuLinieTests<br><span class="testname">test_stufe2_extrahiert_alle_ringe_bei_multipolygon</span></td><td>Prüft, dass bei einem MultiPolygon die Ringe aller Teilpolygone extrahiert werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">PolygonZuLinieTests<br><span class="testname">test_stufe3_fallback_wenn_keine_ringe_extrahierbar</span></td><td>Prüft, dass bei fehlgeschlagener Ringextraktion auf convertToType zurückgefallen wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">PolygonZuLinieTests<br><span class="testname">test_alle_stufen_scheitern_liefert_none</span></td><td>Prüft, dass polygon_zu_linie None liefert, wenn Ringextraktion und convertToType beide scheitern.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">LayerExistsInGpkgTests<br><span class="testname">test_fehlende_datei_liefert_false</span></td><td>Prüft, dass eine nicht vorhandene GPKG-Datei False liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">LayerExistsInGpkgTests<br><span class="testname">test_leerer_pfad_oder_layername_liefert_false</span></td><td>Prüft, dass ein leerer Pfad oder Layername False liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">LayerExistsInGpkgTests<br><span class="testname">test_vorhandener_layer_liefert_true</span></td><td>Prüft, dass ein in gpkg_contents eingetragener Layername als vorhanden erkannt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">LayerExistsInGpkgTests<br><span class="testname">test_fehlender_layer_liefert_false</span></td><td>Prüft, dass ein nicht in gpkg_contents eingetragener Layername als nicht vorhanden gilt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CreateBufferLayerTests<br><span class="testname">test_ohne_qgis_liefert_none</span></td><td>Prüft, dass create_buffer_layer ohne verfügbares QGIS None liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CreateBufferLayerTests<br><span class="testname">test_fehlender_source_layer_liefert_none</span></td><td>Prüft, dass ein fehlender Quelllayer (None) None liefert, auch wenn QGIS verfügbar wäre.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">CreateBufferLayerTests<br><span class="testname">test_source_layer_ohne_getfeatures_liefert_none</span></td><td>Prüft, dass ein Quelllayer ohne getFeatures()-Methode None liefert.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_qgisui_wrapper_helpers.py addlayertoprojecttests test_none_layer_liefert_false addlayertoprojecttests test_mock_modus_liefert_true_ohne_projektzugriff addlayertoprojecttests test_mit_qgis_fuegt_layer_dem_projekt_hinzu addlayertoprojecttests test_mit_qgis_fehler_liefert_false finddockwidgetstests test_ohne_main_window_liefert_leere_liste finddockwidgetstests test_liefert_dock_widgets_des_main_window finddockwidgetstests test_fehler_beim_suchen_liefert_leere_liste addremovemenutests test_add_menu_ohne_main_window_tut_nichts addremovemenutests test_add_menu_mit_echtem_qt_menu_fuegt_es_der_menubar_hinzu addremovemenutests test_add_menu_ohne_menuaction_wird_ignoriert addremovemenutests test_remove_menu_entfernt_ueber_menuaction addremovemenutests test_remove_menu_ohne_main_window_tut_nichts" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-qgisui-wrapper-helpers-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_qgisui_wrapper_helpers.py</span><span class="card-meta"><span class="count-total">12 Testfälle</span><span class="cpill cpill-ok">12</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-qgisui-wrapper-helpers-py"><p class="filedesc">Tests für sn_basis/functions/qgisui_wrapper.py::add_layer_to_project/find_dock_widgets/add_menu/remove_menu (Issue #65/#67).</p><div class="gchips"><span class="gchip" title="">AddLayerToProjectTests <b>4</b></span><span class="gchip" title="">FindDockWidgetsTests <b>3</b></span><span class="gchip" title="">AddRemoveMenuTests <b>5</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_qgisui_wrapper_helpers.py"])
|
||
class root rootnode
|
||
root --> g1["AddLayerToProjectTests (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("none_layer_liefert_false")
|
||
g1 --> t2("mock_modus_liefert_true_ohne_projektzugriff")
|
||
g1 --> t3("mit_qgis_fuegt_layer_dem_projekt_hinzu")
|
||
g1 --> t4("mit_qgis_fehler_liefert_false")
|
||
root --> g2["FindDockWidgetsTests (3)"]
|
||
class g2 groupnode
|
||
g2 --> t5("ohne_main_window_liefert_leere_liste")
|
||
g2 --> t6("liefert_dock_widgets_des_main_window")
|
||
g2 --> t7("fehler_beim_suchen_liefert_leere_liste")
|
||
root --> g3["AddRemoveMenuTests (5)"]
|
||
class g3 groupnode
|
||
g3 --> t8("add_menu_ohne_main_window_tut_nichts")
|
||
g3 --> t9("add_menu_mit_echtem_qt_menu_fuegt_es_der_menubar_hinzu")
|
||
g3 --> t10("add_menu_ohne_menuaction_wird_ignoriert")
|
||
g3 --> t11("remove_menu_entfernt_ueber_menuaction")
|
||
g3 --> t12("remove_menu_ohne_main_window_tut_nichts")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 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></tr></thead><tbody><tr><td class="mono">AddLayerToProjectTests<br><span class="testname">test_none_layer_liefert_false</span></td><td>Prüft, dass add_layer_to_project für einen fehlenden Layer (None) False liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">AddLayerToProjectTests<br><span class="testname">test_mock_modus_liefert_true_ohne_projektzugriff</span></td><td>Prüft, dass im Mock-Modus (ohne QGIS) ein gültiger Layer True liefert, ohne das Projekt anzufassen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">AddLayerToProjectTests<br><span class="testname">test_mit_qgis_fuegt_layer_dem_projekt_hinzu</span></td><td>Prüft, dass bei verfügbarem QGIS der Layer über QgsProject.instance().addMapLayer hinzugefügt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">AddLayerToProjectTests<br><span class="testname">test_mit_qgis_fehler_liefert_false</span></td><td>Prüft, dass ein Fehler beim Hinzufügen zum Projekt abgefangen wird und False liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FindDockWidgetsTests<br><span class="testname">test_ohne_main_window_liefert_leere_liste</span></td><td>Prüft, dass find_dock_widgets ohne verfügbares Hauptfenster eine leere Liste liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FindDockWidgetsTests<br><span class="testname">test_liefert_dock_widgets_des_main_window</span></td><td>Prüft, dass find_dock_widgets die vom Hauptfenster gefundenen Dock-Widgets durchreicht.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">FindDockWidgetsTests<br><span class="testname">test_fehler_beim_suchen_liefert_leere_liste</span></td><td>Prüft, dass ein Fehler beim Suchen der Dock-Widgets abgefangen wird und eine leere Liste liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">AddRemoveMenuTests<br><span class="testname">test_add_menu_ohne_main_window_tut_nichts</span></td><td>Prüft, dass add_menu ohne Hauptfenster keine Ausnahme wirft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">AddRemoveMenuTests<br><span class="testname">test_add_menu_mit_echtem_qt_menu_fuegt_es_der_menubar_hinzu</span></td><td>Prüft, dass ein echtes Qt-Menü (mit menuAction) der Menüleiste hinzugefügt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">AddRemoveMenuTests<br><span class="testname">test_add_menu_ohne_menuaction_wird_ignoriert</span></td><td>Prüft, dass ein Objekt ohne menuAction nicht an die Menüleiste übergeben wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">AddRemoveMenuTests<br><span class="testname">test_remove_menu_entfernt_ueber_menuaction</span></td><td>Prüft, dass remove_menu das Menü über dessen menuAction() aus der Menüleiste entfernt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">AddRemoveMenuTests<br><span class="testname">test_remove_menu_ohne_main_window_tut_nichts</span></td><td>Prüft, dass remove_menu ohne Hauptfenster keine Ausnahme wirft.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_settings_logic.py testsettingslogic test_load testsettingslogic test_save testsettingslogic test_load_handles_partial_values_with_empty_fallback testsettingslogic test_save_empty_string_value_is_persisted" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-settings-logic-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_settings_logic.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-settings-logic-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestSettingsLogic <b>4</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_settings_logic.py"])
|
||
class root rootnode
|
||
root --> g1["TestSettingsLogic (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("load")
|
||
g1 --> t2("save")
|
||
g1 --> t3("load_handles_partial_values_with_empty_fallback")
|
||
g1 --> t4("save_empty_string_value_is_persisted")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 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></tr></thead><tbody><tr><td class="mono">TestSettingsLogic<br><span class="testname">test_load</span></td><td>Prüft, dass load() jede bekannte Projektvariable genau einmal über get_variable() liest.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSettingsLogic<br><span class="testname">test_save</span></td><td>Prüft, dass save() nur bekannte Variablen-Keys speichert und unbekannte Keys ignoriert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSettingsLogic<br><span class="testname">test_load_handles_partial_values_with_empty_fallback</span></td><td>Prüft, dass load() für jede Variable den (auch leeren) Wert von get_variable() unverändert übernimmt, selbst wenn nicht alle Variablen im Mock konfiguriert sind.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSettingsLogic<br><span class="testname">test_save_empty_string_value_is_persisted</span></td><td>Prüft, dass save() einen leeren String als gültigen Wert speichert, statt ihn wie einen fehlenden Key zu behandeln.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_settings_tab.py savedatatests test_sammelt_text_und_combobox_werte_inklusive_landkreiskennzahl savedatatests test_ohne_landkreis_dropdown_wird_keine_kennzahl_ergaenzt loaddatatests test_befuellt_textfelder_aus_gespeicherten_daten loaddatatests test_ohne_gespeicherten_wert_bleibt_textfeld_leer loaddatatests test_waehlt_combobox_eintrag_bei_bekanntem_namen loaddatatests test_unbekannter_gespeicherter_name_waehlt_ersten_eintrag buildinputtests test_landkreis_feld_liefert_combobox_mit_allen_landkreisen buildinputtests test_anderes_feld_liefert_lineedit" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-settings-tab-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_settings_tab.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-settings-tab-py"><p class="filedesc">Tests für sn_basis/ui/tabs/settings_tab.py::save_data/load_data/_build_input (Issue #65/#67).</p><div class="gchips"><span class="gchip" title="">SaveDataTests <b>2</b></span><span class="gchip" title="">LoadDataTests <b>4</b></span><span class="gchip" title="">BuildInputTests <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_settings_tab.py"])
|
||
class root rootnode
|
||
root --> g1["SaveDataTests (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("sammelt_text_und_combobox_werte_inklusive_landkreiskennzahl")
|
||
g1 --> t2("ohne_landkreis_dropdown_wird_keine_kennzahl_ergaenzt")
|
||
root --> g2["LoadDataTests (4)"]
|
||
class g2 groupnode
|
||
g2 --> t3("befuellt_textfelder_aus_gespeicherten_daten")
|
||
g2 --> t4("ohne_gespeicherten_wert_bleibt_textfeld_leer")
|
||
g2 --> t5("waehlt_combobox_eintrag_bei_bekanntem_namen")
|
||
g2 --> t6("unbekannter_gespeicherter_name_waehlt_ersten_eintrag")
|
||
root --> g3["BuildInputTests (2)"]
|
||
class g3 groupnode
|
||
g3 --> t7("landkreis_feld_liefert_combobox_mit_allen_landkreisen")
|
||
g3 --> t8("anderes_feld_liefert_lineedit")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 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></tr></thead><tbody><tr><td class="mono">SaveDataTests<br><span class="testname">test_sammelt_text_und_combobox_werte_inklusive_landkreiskennzahl</span></td><td>Prüft, dass save_data Text- und Dropdown-Werte sammelt und die Landkreiskennzahl separat ergänzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">SaveDataTests<br><span class="testname">test_ohne_landkreis_dropdown_wird_keine_kennzahl_ergaenzt</span></td><td>Prüft, dass ohne Landkreis-Dropdown im Formular keine 'landkreis_kennzahl' ergänzt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">LoadDataTests<br><span class="testname">test_befuellt_textfelder_aus_gespeicherten_daten</span></td><td>Prüft, dass load_data ein Textfeld mit dem gespeicherten Wert befüllt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">LoadDataTests<br><span class="testname">test_ohne_gespeicherten_wert_bleibt_textfeld_leer</span></td><td>Prüft, dass load_data ohne gespeicherten Wert das Textfeld auf einen leeren Text setzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">LoadDataTests<br><span class="testname">test_waehlt_combobox_eintrag_bei_bekanntem_namen</span></td><td>Prüft, dass load_data im Landkreis-Dropdown den gespeicherten Landkreisnamen auswählt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">LoadDataTests<br><span class="testname">test_unbekannter_gespeicherter_name_waehlt_ersten_eintrag</span></td><td>Prüft, dass load_data bei einem nicht mehr vorhandenen Landkreisnamen auf den ersten Eintrag zurückfällt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">BuildInputTests<br><span class="testname">test_landkreis_feld_liefert_combobox_mit_allen_landkreisen</span></td><td>Prüft, dass _build_input für das Landkreis-Feld eine ComboBox mit Platzhalter und allen Landkreisen liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">BuildInputTests<br><span class="testname">test_anderes_feld_liefert_lineedit</span></td><td>Prüft, dass _build_input für ein normales Feld ein leeres Textfeld liefert.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_basis/tests/test_stilpruefer.py teststilpruefer test_keine_datei_angegeben teststilpruefer test_datei_existiert_mit_qml teststilpruefer test_datei_existiert_falsche_endung teststilpruefer test_datei_existiert_nicht" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-basis-tests-test-stilpruefer-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Basis/tests/test_stilpruefer.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-basis-tests-test-stilpruefer-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestStilpruefer <b>4</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_stilpruefer.py"])
|
||
class root rootnode
|
||
root --> g1["TestStilpruefer (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("keine_datei_angegeben")
|
||
g1 --> t2("datei_existiert_mit_qml")
|
||
g1 --> t3("datei_existiert_falsche_endung")
|
||
g1 --> t4("datei_existiert_nicht")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 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></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 'ok' ohne Kontext akzeptiert wird (Stil ist optional).</td><td><span class="pill pill-ok">grün</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 'stil_anwendbar' bestätigt wird.</td><td><span class="pill pill-ok">grün</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 'falsche_endung' abgelehnt wird.</td><td><span class="pill pill-ok">grün</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 'datei_nicht_gefunden' abgelehnt wird.</td><td><span class="pill pill-ok">grün</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 joinpathtests test_verbindet_mehrere_pfadbestandteile ensuredirtests test_legt_fehlendes_verzeichnis_inklusive_eltern_an ensuredirtests test_vorhandenes_verzeichnis_wirft_keinen_fehler getattrsafetests test_liefert_vorhandenes_attribut getattrsafetests test_liefert_default_bei_fehlendem_attribut" data-hasred="0" data-hasskip="0" data-nodoc="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">6 Testfälle</span><span class="cpill cpill-ok">6</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</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><span class="gchip" title="">JoinPathTests <b>1</b></span><span class="gchip" title="">EnsureDirTests <b>2</b></span><span class="gchip" title="">GetattrSafeTests <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_sys_wrapper.py"])
|
||
class root rootnode
|
||
root --> g1["TestGetPluginRoot (1)"]
|
||
class g1 groupnode
|
||
g1 --> t1("get_plugin_root_folgt_keiner_verzeichnisverknuepfung")
|
||
root --> g2["JoinPathTests (1)"]
|
||
class g2 groupnode
|
||
g2 --> t2("verbindet_mehrere_pfadbestandteile")
|
||
root --> g3["EnsureDirTests (2)"]
|
||
class g3 groupnode
|
||
g3 --> t3("legt_fehlendes_verzeichnis_inklusive_eltern_an")
|
||
g3 --> t4("vorhandenes_verzeichnis_wirft_keinen_fehler")
|
||
root --> g4["GetattrSafeTests (2)"]
|
||
class g4 groupnode
|
||
g4 --> t5("liefert_vorhandenes_attribut")
|
||
g4 --> t6("liefert_default_bei_fehlendem_attribut")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 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></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></tr><tr><td class="mono">JoinPathTests<br><span class="testname">test_verbindet_mehrere_pfadbestandteile</span></td><td>Prüft, dass join_path mehrere Bestandteile OS-sicher zu einem Path zusammenfügt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">EnsureDirTests<br><span class="testname">test_legt_fehlendes_verzeichnis_inklusive_eltern_an</span></td><td>Prüft, dass ensure_dir ein fehlendes Verzeichnis samt Elternverzeichnissen anlegt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">EnsureDirTests<br><span class="testname">test_vorhandenes_verzeichnis_wirft_keinen_fehler</span></td><td>Prüft, dass ensure_dir bei einem bereits vorhandenen Verzeichnis keinen Fehler wirft.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">GetattrSafeTests<br><span class="testname">test_liefert_vorhandenes_attribut</span></td><td>Prüft, dass getattr_safe ein vorhandenes Attribut liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">GetattrSafeTests<br><span class="testname">test_liefert_default_bei_fehlendem_attribut</span></td><td>Prüft, dass getattr_safe bei fehlendem Attribut den Default-Wert liefert.</td><td><span class="pill pill-ok">grün</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"><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="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(["test_text_wrapper.py"])
|
||
class root rootnode
|
||
root --> g1["TestSanitizeBezeichner (7)"]
|
||
class g1 groupnode
|
||
g1 --> t1("umlaute_bleiben_erhalten")
|
||
g1 --> t2("bindestrich_bleibt_erhalten")
|
||
g1 --> t3("unterstrich_bleibt_erhalten")
|
||
g1 --> t4("leerzeichen_wird_durch_ersatz_zusammengefasst")
|
||
g1 --> t5("fuehrender_und_folgender_ersatz_wird_entfernt")
|
||
g1 --> t6("eigenes_ersatzzeichen_wird_verwendet")
|
||
g1 --> t7("nur_unzulaessige_zeichen_ergibt_leeren_string")
|
||
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></tr></thead><tbody><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_umlaute_bleiben_erhalten</span></td><td>Prüft, dass Umlaute und ß nicht durch den Ersatz entfernt werden.</td><td><span class="pill pill-ok">grün</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></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></tr><tr><td class="mono">TestSanitizeBezeichner<br><span class="testname">test_leerzeichen_wird_durch_ersatz_zusammengefasst</span></td><td>Prüft, dass Leerzeichen (kein zulässiges Zeichen) zu einem Ersatzzeichen werden.</td><td><span class="pill pill-ok">grün</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></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></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></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"><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="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
|
||
root(["test_variable_wrapper.py"])
|
||
class root rootnode
|
||
root --> g1["TestVariableWrapper (6)"]
|
||
class g1 groupnode
|
||
g1 --> t1("set_variable_project_noop_write_is_skipped")
|
||
g1 --> t2("set_variable_project_changed_value_is_written")
|
||
g1 --> t3("set_variable_global_writes_prefixed_name")
|
||
g1 --> t4("get_variable_global_returns_empty_string_fallback")
|
||
g1 --> t5("get_variable_invalid_scope_raises")
|
||
g1 --> t6("set_variable_invalid_scope_raises")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 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></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></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 'sn_' geschrieben wird.</td><td><span class="pill pill-ok">grün</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 'sn_' vorangestellt schreibt.</td><td><span class="pill pill-ok">grün</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></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></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></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"><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="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(["test_verfahrensgebiet_manager.py"])
|
||
class root rootnode
|
||
root --> g1["TestVerfahrensgebietManager (5)"]
|
||
class g1 groupnode
|
||
g1 --> t1("get_verfahrensgebiet_layer_id_returns_value")
|
||
g1 --> t2("get_verfahrensgebiet_layer_id_returns_none_for_empty_value")
|
||
g1 --> t3("set_verfahrensgebiet_layer_id_writes_project_variable")
|
||
g1 --> t4("update_without_layer_does_not_write_when_already_empty")
|
||
g1 --> t5("update_with_layer_writes_variable")
|
||
root --> g2["OnHandlerTests (5)"]
|
||
class g2 groupnode
|
||
g2 --> t6("on_project_changed_ohne_layer_setzt_variable_leer")
|
||
g2 --> t7("on_project_changed_mit_layer_setzt_variable")
|
||
g2 --> t8("on_layers_added_findet_neuen_layer")
|
||
g2 --> t9("on_layer_removed_bei_aktuellem_layer_sucht_neu")
|
||
g2 --> t10("on_layer_removed_bei_anderem_layer_aendert_nichts")
|
||
root --> g3["ListenerSetupTests (3)"]
|
||
class g3 groupnode
|
||
g3 --> t11("setup_ohne_qgis_tut_nichts")
|
||
g3 --> t12("setup_verbindet_signale_und_ist_idempotent")
|
||
g3 --> t13("teardown_trennt_alle_signale_und_ist_idempotent")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 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></tr></thead><tbody><tr><td class="mono">TestVerfahrensgebietManager<br><span class="testname">test_get_verfahrensgebiet_layer_id_returns_value</span></td><td>Prüft, dass get_verfahrensgebiet_layer_id() die in der Projektvariable gespeicherte Layer-ID liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietManager<br><span class="testname">test_get_verfahrensgebiet_layer_id_returns_none_for_empty_value</span></td><td>Prüft, dass get_verfahrensgebiet_layer_id() bei leerer Projektvariable None statt eines leeren Strings liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietManager<br><span class="testname">test_set_verfahrensgebiet_layer_id_writes_project_variable</span></td><td>Prüft, dass set_verfahrensgebiet_layer_id() die Layer-ID als Projektvariable 'verfahrensgebiet_layer' speichert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietManager<br><span class="testname">test_update_without_layer_does_not_write_when_already_empty</span></td><td>Prüft, dass ohne gefundenen Verfahrensgebiet-Layer keine Schreibaktion erfolgt, wenn die Variable bereits leer ist.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietManager<br><span class="testname">test_update_with_layer_writes_variable</span></td><td>Prüft, dass ein gefundener Verfahrensgebiet-Layer seine ID als Projektvariable speichert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnHandlerTests<br><span class="testname">test_on_project_changed_ohne_layer_setzt_variable_leer</span></td><td>Prüft, dass _on_project_changed die Variable leert, wenn kein Verfahrensgebiet-Layer existiert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnHandlerTests<br><span class="testname">test_on_project_changed_mit_layer_setzt_variable</span></td><td>Prüft, dass _on_project_changed die Layer-ID eines gefundenen Verfahrensgebiet-Layers übernimmt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnHandlerTests<br><span class="testname">test_on_layers_added_findet_neuen_layer</span></td><td>Prüft, dass _on_layers_added nach neu hinzugefügten Layern sucht und die Variable aktualisiert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnHandlerTests<br><span class="testname">test_on_layer_removed_bei_aktuellem_layer_sucht_neu</span></td><td>Prüft, dass das Entfernen des aktuell aktiven Verfahrensgebiet-Layers eine Neusuche auslöst.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">OnHandlerTests<br><span class="testname">test_on_layer_removed_bei_anderem_layer_aendert_nichts</span></td><td>Prüft, dass das Entfernen eines anderen Layers keine Neusuche auslöst.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ListenerSetupTests<br><span class="testname">test_setup_ohne_qgis_tut_nichts</span></td><td>Prüft, dass setup_verfahrensgebiet_listener ohne QGIS keine Signale registriert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ListenerSetupTests<br><span class="testname">test_setup_verbindet_signale_und_ist_idempotent</span></td><td>Prüft, dass setup_verfahrensgebiet_listener die Projektsignale verbindet und ein zweiter Aufruf nichts doppelt registriert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">ListenerSetupTests<br><span class="testname">test_teardown_trennt_alle_signale_und_ist_idempotent</span></td><td>Prüft, dass teardown_verfahrensgebiet_listener alle Signale trennt und mehrfacher Aufruf nicht fehlschlägt.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article></div>
|
||
</section>
|
||
|
||
|
||
<section class="pkg-section" id="pkg-sn_verfahrensgebiet">
|
||
<div class="pkg-head">
|
||
<div>
|
||
<h2>sn_verfahrensgebiet</h2>
|
||
<p class="pkg-sub">Fachplugin · Ordner <span class="mono">Plugin_SN_Verfahrensgebiet</span> · 18 Testdateien · 289 Testfälle</p>
|
||
</div>
|
||
<div class="pkg-bar" 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>
|
||
</div>
|
||
</div>
|
||
<div class="card-grid"><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_beteiligung_pruefung.py testbaueflurstueckcsv test_normalfall_mit_fuehrenden_nullen testbaueflurstueckcsv test_nenner_null_wird_zu_unterstrichen testbaueflurstueckcsv test_nenner_leer_wird_zu_unterstrichen testbaueflurstueckcsv test_gemarkung_ohne_fuehrende_nullen_wird_aufgefuellt testbaueflurstueckcsv test_ungueltiges_format_gibt_none testbaueflurstueckcsv test_leerer_wert_gibt_none testbaueflurstueckcsv test_nenner_9001_wird_zu_buchstabe_a testbaueflurstueckcsv test_nenner_9002_wird_zu_buchstabe_b testbaueflurstueckcsv test_nenner_9026_wird_zu_buchstabe_z testbaueflurstueckcsv test_nenner_ausserhalb_buchstaben_bereich_bleibt_numerisch testbaueflurstueckcsv test_nenner_9001_mit_fuehrenden_nullen_wird_erkannt testbaueflurstueckcsv test_einstellige_folge_wird_auf_2_stellen_aufgefuellt testbaueflurstueckcsvliste test_nur_gueltige_zeilen_in_liste testholeverfahrensgebietlayer test_layer_per_name_hat_vorrang_vor_combo_auswahl testholeverfahrensgebietlayer test_combo_auswahl_als_fallback_ohne_namens_layer testholeverfahrensgebietlayer test_kein_layer_gibt_none testforderemanuellesladenan test_ohne_vef_vkzf_nennt_fehlende_kennzeichen testforderemanuellesladenan test_mit_vef_vkzf_nennt_verfahrensnummer testtry3bootstrap test_setzt_verfahrensnummer_und_fordert_manuelles_laden_an testbeteiligungpruefendispatch test_layer_ohne_kennzeichen_fordert_manuelles_laden_an testbeteiligungpruefendispatch test_kein_layer_setzt_verfahrensnummer_und_fordert_laden_an testladebeteiligungcsv test_dialog_abgebrochen_gibt_none testladebeteiligungcsv test_fehlende_flurstueck_spalte_wirft_fehler testladebeteiligungcsv test_leere_datei_wirft_fehler testladebeteiligungcsv test_erfolgsfall_gibt_zeilen_und_spalten_zurueck" data-hasred="0" data-hasskip="0" data-nodoc="1"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-beteiligung-pruefung-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_beteiligung_pruefung.py</span><span class="card-meta"><span class="count-total">25 Testfälle</span><span class="cpill cpill-ok">25</span><span class="docbadge" title="Anteil mit Docstring">0% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-beteiligung-pruefung-py"><p class="filedesc">Unit-Tests für `sn_verfahrensgebiet.functions.beteiligung_pruefung`.</p><div class="gchips"><span class="gchip" title="">TestBaueFlurstueckCsv <b>12</b></span><span class="gchip" title="">TestBaueFlurstueckCsvListe <b>1</b></span><span class="gchip" title="">TestHoleVerfahrensgebietLayer <b>3</b></span><span class="gchip" title="try2/try3 laden nicht mehr automatisch, sondern fordern den Nutzer auf,">TestFordereManuellesLadenAn <b>2</b></span><span class="gchip" title="">TestTry3Bootstrap <b>1</b></span><span class="gchip" title="Dispatch-Logik in beteiligung_pruefen(): try1 unverändert, try2/try3">TestBeteiligungPruefenDispatch <b>2</b></span><span class="gchip" title="">TestLadeBeteiligungCsv <b>4</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_beteiligung_pruefung.py"])
|
||
class root rootnode
|
||
root --> g1["TestBaueFlurstueckCsv (12)"]
|
||
class g1 groupnode
|
||
g1 --> t1("normalfall_mit_fuehrenden_nullen")
|
||
g1 --> t2("nenner_null_wird_zu_unterstrichen")
|
||
g1 --> t3("nenner_leer_wird_zu_unterstrichen")
|
||
g1 --> t4("gemarkung_ohne_fuehrende_nullen_wird_aufgefuellt")
|
||
g1 --> t5("ungueltiges_format_gibt_none")
|
||
g1 --> t6("leerer_wert_gibt_none")
|
||
g1 --> t7("nenner_9001_wird_zu_buchstabe_a")
|
||
g1 --> t8("nenner_9002_wird_zu_buchstabe_b")
|
||
g1 --> t9("nenner_9026_wird_zu_buchstabe_z")
|
||
g1 --> t10("nenner_ausserhalb_buchstaben_bereich_bleibt_numerisch")
|
||
g1 --> t11("nenner_9001_mit_fuehrenden_nullen_wird_erkannt")
|
||
g1 --> t12("einstellige_folge_wird_auf_2_stellen_aufgefuellt")
|
||
root --> g2["TestBaueFlurstueckCsvListe (1)"]
|
||
class g2 groupnode
|
||
g2 --> t13("nur_gueltige_zeilen_in_liste")
|
||
root --> g3["TestHoleVerfahrensgebietLayer (3)"]
|
||
class g3 groupnode
|
||
g3 --> t14("layer_per_name_hat_vorrang_vor_combo_auswahl")
|
||
g3 --> t15("combo_auswahl_als_fallback_ohne_namens_layer")
|
||
g3 --> t16("kein_layer_gibt_none")
|
||
root --> g4["TestFordereManuellesLadenAn (2)"]
|
||
class g4 groupnode
|
||
g4 --> t17("ohne_vef_vkzf_nennt_fehlende_kennzeichen")
|
||
g4 --> t18("mit_vef_vkzf_nennt_verfahrensnummer")
|
||
root --> g5["TestTry3Bootstrap (1)"]
|
||
class g5 groupnode
|
||
g5 --> t19("setzt_verfahrensnummer_und_fordert_manuelles_laden_an")
|
||
root --> g6["TestBeteiligungPruefenDispatch (2)"]
|
||
class g6 groupnode
|
||
g6 --> t20("layer_ohne_kennzeichen_fordert_manuelles_laden_an")
|
||
g6 --> t21("kein_layer_setzt_verfahrensnummer_und_fordert_laden_an")
|
||
root --> g7["TestLadeBeteiligungCsv (4)"]
|
||
class g7 groupnode
|
||
g7 --> t22("dialog_abgebrochen_gibt_none")
|
||
g7 --> t23("fehlende_flurstueck_spalte_wirft_fehler")
|
||
g7 --> t24("leere_datei_wirft_fehler")
|
||
g7 --> t25("erfolgsfall_gibt_zeilen_und_spalten_zurueck")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 ok
|
||
class t21 ok
|
||
class t22 ok
|
||
class t23 ok
|
||
class t24 ok
|
||
class t25 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></tr></thead><tbody><tr><td class="mono">TestBaueFlurstueckCsv<br><span class="testname">test_normalfall_mit_fuehrenden_nullen</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBaueFlurstueckCsv<br><span class="testname">test_nenner_null_wird_zu_unterstrichen</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBaueFlurstueckCsv<br><span class="testname">test_nenner_leer_wird_zu_unterstrichen</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBaueFlurstueckCsv<br><span class="testname">test_gemarkung_ohne_fuehrende_nullen_wird_aufgefuellt</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBaueFlurstueckCsv<br><span class="testname">test_ungueltiges_format_gibt_none</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBaueFlurstueckCsv<br><span class="testname">test_leerer_wert_gibt_none</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBaueFlurstueckCsv<br><span class="testname">test_nenner_9001_wird_zu_buchstabe_a</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBaueFlurstueckCsv<br><span class="testname">test_nenner_9002_wird_zu_buchstabe_b</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBaueFlurstueckCsv<br><span class="testname">test_nenner_9026_wird_zu_buchstabe_z</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBaueFlurstueckCsv<br><span class="testname">test_nenner_ausserhalb_buchstaben_bereich_bleibt_numerisch</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBaueFlurstueckCsv<br><span class="testname">test_nenner_9001_mit_fuehrenden_nullen_wird_erkannt</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBaueFlurstueckCsv<br><span class="testname">test_einstellige_folge_wird_auf_2_stellen_aufgefuellt</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBaueFlurstueckCsvListe<br><span class="testname">test_nur_gueltige_zeilen_in_liste</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHoleVerfahrensgebietLayer<br><span class="testname">test_layer_per_name_hat_vorrang_vor_combo_auswahl</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHoleVerfahrensgebietLayer<br><span class="testname">test_combo_auswahl_als_fallback_ohne_namens_layer</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHoleVerfahrensgebietLayer<br><span class="testname">test_kein_layer_gibt_none</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFordereManuellesLadenAn<br><span class="testname">test_ohne_vef_vkzf_nennt_fehlende_kennzeichen</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFordereManuellesLadenAn<br><span class="testname">test_mit_vef_vkzf_nennt_verfahrensnummer</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTry3Bootstrap<br><span class="testname">test_setzt_verfahrensnummer_und_fordert_manuelles_laden_an</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBeteiligungPruefenDispatch<br><span class="testname">test_layer_ohne_kennzeichen_fordert_manuelles_laden_an</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestBeteiligungPruefenDispatch<br><span class="testname">test_kein_layer_setzt_verfahrensnummer_und_fordert_laden_an</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLadeBeteiligungCsv<br><span class="testname">test_dialog_abgebrochen_gibt_none</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLadeBeteiligungCsv<br><span class="testname">test_fehlende_flurstueck_spalte_wirft_fehler</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLadeBeteiligungCsv<br><span class="testname">test_leere_datei_wirft_fehler</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLadeBeteiligungCsv<br><span class="testname">test_erfolgsfall_gibt_zeilen_und_spalten_zurueck</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_dockwidget.py testdockwidget test_init_tabs_with_services_injects_available_services testdockwidget test_init_tabs_with_services_reports_errors" data-hasred="0" data-hasskip="0" data-nodoc="1"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-dockwidget-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_dockwidget.py</span><span class="card-meta"><span class="count-total">2 Testfälle</span><span class="cpill cpill-ok">2</span><span class="docbadge" title="Anteil mit Docstring">0% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-dockwidget-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestDockWidget <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_dockwidget.py"])
|
||
class root rootnode
|
||
root --> g1["TestDockWidget (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("init_tabs_with_services_injects_available_services")
|
||
g1 --> t2("init_tabs_with_services_reports_errors")
|
||
class t1 ok
|
||
class t2 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></tr></thead><tbody><tr><td class="mono">TestDockWidget<br><span class="testname">test_init_tabs_with_services_injects_available_services</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDockWidget<br><span class="testname">test_init_tabs_with_services_reports_errors</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_eigentuemer_anzeige.py testanzeigetext test_name_anschrift_email testanzeigetext test_keine_internen_angaben testanzeigetext test_fehlende_email_wird_genannt testanzeigetext test_werte_werden_maskiert testanzeigetext test_mehrere_eintraege_getrennt testanzeigetext test_leer_nur_platzhalter testfensteroeffnen test_normales_fenster_in_standardgroesse testfensteroeffnen test_gemerkte_lage_wird_wiederhergestellt testfensteroeffnen test_unbrauchbare_lage_ergibt_standardgroesse" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-eigentuemer-anzeige-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_anzeige.py</span><span class="card-meta"><span class="count-total">9 Testfälle</span><span class="cpill cpill-ok">9</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-eigentuemer-anzeige-py"><p class="filedesc">Tests für das Anzeigefenster des Eigentümer-Datenabgleichs (#56).</p><div class="gchips"><span class="gchip" title="">TestAnzeigetext <b>6</b></span><span class="gchip" title="">TestFensterOeffnen <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_eigentuemer_anzeige.py"])
|
||
class root rootnode
|
||
root --> g1["TestAnzeigetext (6)"]
|
||
class g1 groupnode
|
||
g1 --> t1("name_anschrift_email")
|
||
g1 --> t2("keine_internen_angaben")
|
||
g1 --> t3("fehlende_email_wird_genannt")
|
||
g1 --> t4("werte_werden_maskiert")
|
||
g1 --> t5("mehrere_eintraege_getrennt")
|
||
g1 --> t6("leer_nur_platzhalter")
|
||
root --> g2["TestFensterOeffnen (3)"]
|
||
class g2 groupnode
|
||
g2 --> t7("normales_fenster_in_standardgroesse")
|
||
g2 --> t8("gemerkte_lage_wird_wiederhergestellt")
|
||
g2 --> t9("unbrauchbare_lage_ergibt_standardgroesse")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 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></tr></thead><tbody><tr><td class="mono">TestAnzeigetext<br><span class="testname">test_name_anschrift_email</span></td><td>Prüft, dass die Anzeige Name mit Anrede und Titel, die mehrzeilige Anschrift mit Ortsteil und die E-Mail zeigt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAnzeigetext<br><span class="testname">test_keine_internen_angaben</span></td><td>Prüft, dass der Eigentümer weder Konten, Personen-IDs, Rechtsperson-Wert noch das Kennzeichen „verstorben“ sieht.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAnzeigetext<br><span class="testname">test_fehlende_email_wird_genannt</span></td><td>Prüft, dass eine fehlende E-Mail ausdrücklich als „keine angegeben“ erscheint.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAnzeigetext<br><span class="testname">test_werte_werden_maskiert</span></td><td>Prüft, dass Sonderzeichen aus den Daten maskiert werden und kein HTML einschleusen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAnzeigetext<br><span class="testname">test_mehrere_eintraege_getrennt</span></td><td>Prüft, dass mehrere Einträge untereinander, durch eine Linie getrennt, erscheinen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAnzeigetext<br><span class="testname">test_leer_nur_platzhalter</span></td><td>Prüft, dass die leere Anzeige nur den neutralen Platzhalter zeigt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFensterOeffnen<br><span class="testname">test_normales_fenster_in_standardgroesse</span></td><td>Prüft, dass das Anzeigefenster ohne gemerkte Lage als normales Fenster mit Rahmen in Standardgröße öffnet, nie im Vollbild.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFensterOeffnen<br><span class="testname">test_gemerkte_lage_wird_wiederhergestellt</span></td><td>Prüft, dass eine gemerkte Größe und Lage der letzten Sitzung wiederhergestellt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFensterOeffnen<br><span class="testname">test_unbrauchbare_lage_ergibt_standardgroesse</span></td><td>Prüft, dass eine nicht wiederherstellbare Lage auf die Standardgröße zurückfällt.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_eigentuemer_korrektur.py testaenderungen test_feldwerte testaenderungen test_nur_echte_aenderungen testaenderungen test_feld_leeren_ist_aenderung testaenderungen test_wende_an testkorrekturpfad test_textdatei_provider testkorrekturpfad test_ogr_provider testkorrekturpfad test_keine_csv testschreiben test_neue_datei_mit_kopfzeile_und_bom testschreiben test_anhaengen_ohne_zweite_kopfzeile testschreiben test_ohne_aenderung_keine_datei testschreiben test_schreibfehler_wird_weitergereicht testschreiben test_schreibt_nichts_auf_die_konsole" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-eigentuemer-korrektur-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_korrektur.py</span><span class="card-meta"><span class="count-total">12 Testfälle</span><span class="cpill cpill-ok">12</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-eigentuemer-korrektur-py"><p class="filedesc">Tests für die Korrekturen beim Eigentümer-Datenabgleich (#56).</p><div class="gchips"><span class="gchip" title="">TestAenderungen <b>4</b></span><span class="gchip" title="">TestKorrekturPfad <b>3</b></span><span class="gchip" title="">TestSchreiben <b>5</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_eigentuemer_korrektur.py"])
|
||
class root rootnode
|
||
root --> g1["TestAenderungen (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("feldwerte")
|
||
g1 --> t2("nur_echte_aenderungen")
|
||
g1 --> t3("feld_leeren_ist_aenderung")
|
||
g1 --> t4("wende_an")
|
||
root --> g2["TestKorrekturPfad (3)"]
|
||
class g2 groupnode
|
||
g2 --> t5("textdatei_provider")
|
||
g2 --> t6("ogr_provider")
|
||
g2 --> t7("keine_csv")
|
||
root --> g3["TestSchreiben (5)"]
|
||
class g3 groupnode
|
||
g3 --> t8("neue_datei_mit_kopfzeile_und_bom")
|
||
g3 --> t9("anhaengen_ohne_zweite_kopfzeile")
|
||
g3 --> t10("ohne_aenderung_keine_datei")
|
||
g3 --> t11("schreibfehler_wird_weitergereicht")
|
||
g3 --> t12("schreibt_nichts_auf_die_konsole")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 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></tr></thead><tbody><tr><td class="mono">TestAenderungen<br><span class="testname">test_feldwerte</span></td><td>Prüft, dass alle korrigierbaren Felder vorbelegt werden, mehrere E-Mails durch Komma getrennt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAenderungen<br><span class="testname">test_nur_echte_aenderungen</span></td><td>Prüft, dass nur geänderte Felder zählen und Leerraum am Rand oder doppelte Leerzeichen keine Änderung sind.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAenderungen<br><span class="testname">test_feld_leeren_ist_aenderung</span></td><td>Prüft, dass das Leeren eines Feldes als Änderung zählt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAenderungen<br><span class="testname">test_wende_an</span></td><td>Prüft, dass die Änderungen im angezeigten Eintrag landen und E-Mails wieder getrennt werden; Konten bleiben.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrekturPfad<br><span class="testname">test_textdatei_provider</span></td><td>Prüft, dass aus der Quelle eines Textdatei-Layers (file-URI, Leerzeichen kodiert) der Pfad neben der CSV wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrekturPfad<br><span class="testname">test_ogr_provider</span></td><td>Prüft, dass auch eine OGR-Quelle mit Layernamen den Pfad neben der CSV ergibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrekturPfad<br><span class="testname">test_keine_csv</span></td><td>Prüft, dass für Quellen ohne CSV-Datei kein Pfad vorgeschlagen wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSchreiben<br><span class="testname">test_neue_datei_mit_kopfzeile_und_bom</span></td><td>Prüft, dass eine neue Korrektur-CSV mit BOM, Kopfzeile und je Änderung einer Zeile mit Exportspaltennamen entsteht.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSchreiben<br><span class="testname">test_anhaengen_ohne_zweite_kopfzeile</span></td><td>Prüft, dass weitere Korrekturen angehängt werden, ohne Kopfzeile oder BOM zu wiederholen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSchreiben<br><span class="testname">test_ohne_aenderung_keine_datei</span></td><td>Prüft, dass ohne Änderung keine Datei angelegt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSchreiben<br><span class="testname">test_schreibfehler_wird_weitergereicht</span></td><td>Prüft, dass ein nicht schreibbarer Pfad als OSError beim Aufrufer ankommt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSchreiben<br><span class="testname">test_schreibt_nichts_auf_die_konsole</span></td><td>Prüft, dass das Festhalten von Korrekturen keine Personendaten auf die Konsole schreibt (Datenschutz).</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_eigentuemer_suche.py testlayererkennung test_layer_mit_name_und_vorname_ist_eigentuemerlayer testlayererkennung test_eigentuemerlayer_im_projekt testsuche test_ohne_eingabe_fehler testsuche test_layer_ohne_pflichtspalten testsuche test_teilstring_ohne_gross_kleinschreibung testsuche test_umlaute_und_eszett testsuche test_gleiche_person_gleiche_anschrift_zusammengefasst testsuche test_andere_anschrift_eigener_treffer testsuche test_kennzeichen_verstorben testsuche test_rechtsperson_als_rohwert testsuche test_plz_mit_fuehrender_null testsuche test_suche_gibt_nichts_aus testanzeigeformen test_name_und_anschrift" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-eigentuemer-suche-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_suche.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="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-eigentuemer-suche-py"><p class="filedesc">Tests für die Eigentümersuche im Serienbriefexport (#56).</p><div class="gchips"><span class="gchip" title="">TestLayererkennung <b>2</b></span><span class="gchip" title="">TestSuche <b>10</b></span><span class="gchip" title="">TestAnzeigeformen <b>1</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_eigentuemer_suche.py"])
|
||
class root rootnode
|
||
root --> g1["TestLayererkennung (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("layer_mit_name_und_vorname_ist_eigentuemerlayer")
|
||
g1 --> t2("eigentuemerlayer_im_projekt")
|
||
root --> g2["TestSuche (10)"]
|
||
class g2 groupnode
|
||
g2 --> t3("ohne_eingabe_fehler")
|
||
g2 --> t4("layer_ohne_pflichtspalten")
|
||
g2 --> t5("teilstring_ohne_gross_kleinschreibung")
|
||
g2 --> t6("umlaute_und_eszett")
|
||
g2 --> t7("gleiche_person_gleiche_anschrift_zusammengefasst")
|
||
g2 --> t8("andere_anschrift_eigener_treffer")
|
||
g2 --> t9("kennzeichen_verstorben")
|
||
g2 --> t10("rechtsperson_als_rohwert")
|
||
g2 --> t11("plz_mit_fuehrender_null")
|
||
g2 --> t12("suche_gibt_nichts_aus")
|
||
root --> g3["TestAnzeigeformen (1)"]
|
||
class g3 groupnode
|
||
g3 --> t13("name_und_anschrift")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 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></tr></thead><tbody><tr><td class="mono">TestLayererkennung<br><span class="testname">test_layer_mit_name_und_vorname_ist_eigentuemerlayer</span></td><td>Prüft, dass ein Layer mit den Spalten Nachname und Vorname als Eigentümerdatei erkannt wird, auch mit BOM und anderer Schreibweise.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLayererkennung<br><span class="testname">test_eigentuemerlayer_im_projekt</span></td><td>Prüft, dass aus dem Projekt nur passende Layer kommen, nach Namen sortiert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_ohne_eingabe_fehler</span></td><td>Prüft, dass ohne Name und Vorname nicht die ganze Datei gelistet, sondern um eine Eingabe gebeten wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_layer_ohne_pflichtspalten</span></td><td>Prüft, dass ein Layer ohne Nachname/Vorname mit Hinweis auf den Serienbriefexport abgelehnt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_teilstring_ohne_gross_kleinschreibung</span></td><td>Prüft, dass Name und Vorname als Teilstring ohne Rücksicht auf Groß-/Kleinschreibung gesucht werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_umlaute_und_eszett</span></td><td>Prüft, dass „Müller“ auch „Mueller“ findet und „Strauss“ auch „Strauß“.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_gleiche_person_gleiche_anschrift_zusammengefasst</span></td><td>Prüft, dass Zeilen mit gleichem Namen und gleicher Anschrift ein Treffer werden und Konten, Personen-IDs und E-Mails gesammelt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_andere_anschrift_eigener_treffer</span></td><td>Prüft, dass dieselbe Person mit anderer Anschrift ein eigener Treffer bleibt, sortiert nach Wohnort.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_kennzeichen_verstorben</span></td><td>Prüft, dass „verstorben“ beim Exportwert 1 (auch als Zahl gelesen) gesetzt ist und bei 0, Leerem und NULL nicht.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_rechtsperson_als_rohwert</span></td><td>Prüft, dass PER_RECHTSPERSON unverändert angezeigt wird (0, 1, 5, 9; noch nicht entschlüsselt) und abweichende Werte einer Person gesammelt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_plz_mit_fuehrender_null</span></td><td>Prüft, dass eine von QGIS als Zahl gelesene PLZ wieder fünfstellig mit führender Null erscheint und Zeilen dadurch zusammenfinden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_suche_gibt_nichts_aus</span></td><td>Prüft, dass die Suche keine Personendaten auf die Konsole schreibt (Datenschutz).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAnzeigeformen<br><span class="testname">test_name_und_anschrift</span></td><td>Prüft, dass Name mit Titel und einzeilige Anschrift mit Ortsteil lesbar zusammengesetzt werden.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_eigentuemer_tab.py testflurstuecksuchen test_ohne_flurstueckslayer_erscheint_hinweisdialog testflurstuecksuchen test_eingabefehler_als_warnung testflurstuecksuchen test_kein_treffer testflurstuecksuchen test_treffer_werden_ausgewaehlt_und_angezoomt testflurstuecksuchen test_ohne_kartenansicht_bleibt_auswahl testeigentuemersuchen test_ohne_eigentuemerdatei_warnung testeigentuemersuchen test_suchfehler_als_warnung testeigentuemersuchen test_kein_treffer_ohne_namen_in_meldung testeigentuemersuchen test_treffer_oeffnen_trefferliste_und_ersetzen_die_alte testtrefferliste test_trefferzeile_mit_hinweis testtrefferliste test_ausgewaehlte_eigentuemer testtrefferliste test_daten_anzeigen_gibt_auswahl_weiter testsitzung test_sitzung_beginnen_oeffnet_leeres_fenster_mit_rahmen testsitzung test_lage_gilt_fuer_naechste_sitzung testsitzung test_daten_anzeigen_beginnt_sitzung_bei_bedarf testsitzung test_daten_anzeigen_ohne_auswahl testsitzung test_anzeige_leeren_laesst_fenster_offen testsitzung test_sitzung_beenden_schliesst_fenster testsitzung test_von_aussen_geschlossen_beendet_sitzung testkorrekturlabel test_ohne_eigentuemerdatei testkorrekturlabel test_pfad_neben_der_eigentuemerdatei testkorrekturlabel test_ohne_csv_quelle_wird_abgefragt testkorrekturlabel test_gewaehlter_pfad_wird_angezeigt testkorrektur test_korrektur_wird_festgehalten_und_angezeigt testkorrektur test_ohne_aenderung_nichts_schreiben testkorrektur test_abbruch_nichts_schreiben testkorrektur test_schreibfehler_warnung_und_anzeige_unveraendert testkorrektur test_ohne_anzeige_keine_korrektur testkorrekturdatei test_vorschlag_neben_der_eigentuemerdatei testkorrekturdatei test_ohne_csv_quelle_wird_gefragt testdockwidgettabs test_tab_ist_im_dockwidget_eingetragen" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-eigentuemer-tab-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_eigentuemer_tab.py</span><span class="card-meta"><span class="count-total">31 Testfälle</span><span class="cpill cpill-ok">31</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-eigentuemer-tab-py"><p class="filedesc">Tests für den Tab „Eigentümer“ – Flurstückssuche, Eigentümersuche, Anzeige und Korrektur (#56).</p><div class="gchips"><span class="gchip" title="">TestFlurstueckSuchen <b>5</b></span><span class="gchip" title="">TestEigentuemerSuchen <b>4</b></span><span class="gchip" title="">TestTrefferliste <b>3</b></span><span class="gchip" title="">TestSitzung <b>7</b></span><span class="gchip" title="">TestKorrekturLabel <b>4</b></span><span class="gchip" title="">TestKorrektur <b>5</b></span><span class="gchip" title="">TestKorrekturDatei <b>2</b></span><span class="gchip" title="">TestDockWidgetTabs <b>1</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_eigentuemer_tab.py"])
|
||
class root rootnode
|
||
root --> g1["TestFlurstueckSuchen (5)"]
|
||
class g1 groupnode
|
||
g1 --> t1("ohne_flurstueckslayer_erscheint_hinweisdialog")
|
||
g1 --> t2("eingabefehler_als_warnung")
|
||
g1 --> t3("kein_treffer")
|
||
g1 --> t4("treffer_werden_ausgewaehlt_und_angezoomt")
|
||
g1 --> t5("ohne_kartenansicht_bleibt_auswahl")
|
||
root --> g2["TestEigentuemerSuchen (4)"]
|
||
class g2 groupnode
|
||
g2 --> t6("ohne_eigentuemerdatei_warnung")
|
||
g2 --> t7("suchfehler_als_warnung")
|
||
g2 --> t8("kein_treffer_ohne_namen_in_meldung")
|
||
g2 --> t9("treffer_oeffnen_trefferliste_und_ersetzen_die_alte")
|
||
root --> g3["TestTrefferliste (3)"]
|
||
class g3 groupnode
|
||
g3 --> t10("trefferzeile_mit_hinweis")
|
||
g3 --> t11("ausgewaehlte_eigentuemer")
|
||
g3 --> t12("daten_anzeigen_gibt_auswahl_weiter")
|
||
root --> g4["TestSitzung (7)"]
|
||
class g4 groupnode
|
||
g4 --> t13("sitzung_beginnen_oeffnet_leeres_fenster_mit_rahmen")
|
||
g4 --> t14("lage_gilt_fuer_naechste_sitzung")
|
||
g4 --> t15("daten_anzeigen_beginnt_sitzung_bei_bedarf")
|
||
g4 --> t16("daten_anzeigen_ohne_auswahl")
|
||
g4 --> t17("anzeige_leeren_laesst_fenster_offen")
|
||
g4 --> t18("sitzung_beenden_schliesst_fenster")
|
||
g4 --> t19("von_aussen_geschlossen_beendet_sitzung")
|
||
root --> g5["TestKorrekturLabel (4)"]
|
||
class g5 groupnode
|
||
g5 --> t20("ohne_eigentuemerdatei")
|
||
g5 --> t21("pfad_neben_der_eigentuemerdatei")
|
||
g5 --> t22("ohne_csv_quelle_wird_abgefragt")
|
||
g5 --> t23("gewaehlter_pfad_wird_angezeigt")
|
||
root --> g6["TestKorrektur (5)"]
|
||
class g6 groupnode
|
||
g6 --> t24("korrektur_wird_festgehalten_und_angezeigt")
|
||
g6 --> t25("ohne_aenderung_nichts_schreiben")
|
||
g6 --> t26("abbruch_nichts_schreiben")
|
||
g6 --> t27("schreibfehler_warnung_und_anzeige_unveraendert")
|
||
g6 --> t28("ohne_anzeige_keine_korrektur")
|
||
root --> g7["TestKorrekturDatei (2)"]
|
||
class g7 groupnode
|
||
g7 --> t29("vorschlag_neben_der_eigentuemerdatei")
|
||
g7 --> t30("ohne_csv_quelle_wird_gefragt")
|
||
root --> g8["TestDockWidgetTabs (1)"]
|
||
class g8 groupnode
|
||
g8 --> t31("tab_ist_im_dockwidget_eingetragen")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 ok
|
||
class t21 ok
|
||
class t22 ok
|
||
class t23 ok
|
||
class t24 ok
|
||
class t25 ok
|
||
class t26 ok
|
||
class t27 ok
|
||
class t28 ok
|
||
class t29 ok
|
||
class t30 ok
|
||
class t31 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></tr></thead><tbody><tr><td class="mono">TestFlurstueckSuchen<br><span class="testname">test_ohne_flurstueckslayer_erscheint_hinweisdialog</span></td><td>Prüft, dass ohne Layer „Flurstücke“ ein Dialog zum Laden von Verfahrensgebiet und Flurstücken erscheint.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlurstueckSuchen<br><span class="testname">test_eingabefehler_als_warnung</span></td><td>Prüft, dass eine ungültige Eingabe als Warnung in der Meldungsleiste erscheint, nicht als Dialog.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlurstueckSuchen<br><span class="testname">test_kein_treffer</span></td><td>Prüft, dass ohne Treffer ein Hinweis erscheint und keine Auswahl gesetzt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlurstueckSuchen<br><span class="testname">test_treffer_werden_ausgewaehlt_und_angezoomt</span></td><td>Prüft, dass Treffer im Flurstückslayer ausgewählt, angezoomt und gemeldet werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlurstueckSuchen<br><span class="testname">test_ohne_kartenansicht_bleibt_auswahl</span></td><td>Prüft, dass die Auswahl auch ohne Kartenansicht gesetzt und gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEigentuemerSuchen<br><span class="testname">test_ohne_eigentuemerdatei_warnung</span></td><td>Prüft, dass ohne gewählte Eigentümerdatei die Liste aufgefrischt und dann auf das Laden der CSV hingewiesen wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEigentuemerSuchen<br><span class="testname">test_suchfehler_als_warnung</span></td><td>Prüft, dass ein Fehler der Suche (z. B. leere Eingabe) als Warnung erscheint.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEigentuemerSuchen<br><span class="testname">test_kein_treffer_ohne_namen_in_meldung</span></td><td>Prüft, dass ohne Treffer ein Hinweis erscheint, der den gesuchten Namen nicht wiederholt (Datenschutz).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEigentuemerSuchen<br><span class="testname">test_treffer_oeffnen_trefferliste_und_ersetzen_die_alte</span></td><td>Prüft, dass Treffer in einer neuen Trefferliste mit Anzeige-Rückruf erscheinen, eine offene alte Liste geschlossen wird und die Eingaben an die Suche gehen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTrefferliste<br><span class="testname">test_trefferzeile_mit_hinweis</span></td><td>Prüft, dass die Trefferliste Name, Anschrift, E-Mail, den Rohwert von PER_RECHTSPERSON und das Kennzeichen „verstorben“ zeigt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTrefferliste<br><span class="testname">test_ausgewaehlte_eigentuemer</span></td><td>Prüft, dass das Trefferfenster die in der Tabelle gewählten Einträge zurückgibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTrefferliste<br><span class="testname">test_daten_anzeigen_gibt_auswahl_weiter</span></td><td>Prüft, dass „Daten anzeigen“ die Auswahl der Trefferliste an den Tab übergibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSitzung<br><span class="testname">test_sitzung_beginnen_oeffnet_leeres_fenster_mit_rahmen</span></td><td>Prüft, dass „Sitzung beginnen“ ein leeres Anzeigefenster als normales Fenster öffnet (ohne gemerkte Lage beim ersten Mal).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSitzung<br><span class="testname">test_lage_gilt_fuer_naechste_sitzung</span></td><td>Prüft, dass Größe und Lage des Fensters beim Beenden gemerkt und in der nächsten Sitzung wiederverwendet werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSitzung<br><span class="testname">test_daten_anzeigen_beginnt_sitzung_bei_bedarf</span></td><td>Prüft, dass „Daten anzeigen“ ohne laufende Sitzung diese beginnt und die Einträge zeigt; die Statuszeile nennt nur die Anzahl.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSitzung<br><span class="testname">test_daten_anzeigen_ohne_auswahl</span></td><td>Prüft, dass „Daten anzeigen“ ohne Auswahl nur einen Hinweis gibt und keine Sitzung beginnt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSitzung<br><span class="testname">test_anzeige_leeren_laesst_fenster_offen</span></td><td>Prüft, dass „Anzeige leeren“ die Daten entfernt, das Fenster aber nicht schließt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSitzung<br><span class="testname">test_sitzung_beenden_schliesst_fenster</span></td><td>Prüft, dass „Sitzung beenden“ das Anzeigefenster schließt und die angezeigten Daten vergisst.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSitzung<br><span class="testname">test_von_aussen_geschlossen_beendet_sitzung</span></td><td>Prüft, dass ein über den Fensterrahmen geschlossenes Anzeigefenster die Sitzung beendet und seine Lage gemerkt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrekturLabel<br><span class="testname">test_ohne_eigentuemerdatei</span></td><td>Prüft, dass ohne Eigentümerdatei unter den Knöpfen steht, dass keine gewählt ist.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrekturLabel<br><span class="testname">test_pfad_neben_der_eigentuemerdatei</span></td><td>Prüft, dass der Pfad der Korrektur-CSV angezeigt wird, mit Hinweis, solange sie noch nicht angelegt ist.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrekturLabel<br><span class="testname">test_ohne_csv_quelle_wird_abgefragt</span></td><td>Prüft, dass bei einer Quelle ohne CSV angekündigt wird, dass der Speicherort beim ersten Speichern abgefragt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrekturLabel<br><span class="testname">test_gewaehlter_pfad_wird_angezeigt</span></td><td>Prüft, dass ein einmal gewählter Speicherort angezeigt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrektur<br><span class="testname">test_korrektur_wird_festgehalten_und_angezeigt</span></td><td>Prüft, dass eine Korrektur in die Korrektur-CSV geschrieben, sofort angezeigt und ohne Namen gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrektur<br><span class="testname">test_ohne_aenderung_nichts_schreiben</span></td><td>Prüft, dass ein unverändert gespeicherter Dialog nichts schreibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrektur<br><span class="testname">test_abbruch_nichts_schreiben</span></td><td>Prüft, dass ein abgebrochener Korrekturdialog nichts schreibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrektur<br><span class="testname">test_schreibfehler_warnung_und_anzeige_unveraendert</span></td><td>Prüft, dass bei einem Schreibfehler gewarnt, die Anzeige nicht geändert und der Pfad beim nächsten Mal neu bestimmt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrektur<br><span class="testname">test_ohne_anzeige_keine_korrektur</span></td><td>Prüft, dass ohne angezeigte Daten kein Korrekturdialog erscheint.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrekturDatei<br><span class="testname">test_vorschlag_neben_der_eigentuemerdatei</span></td><td>Prüft, dass die Korrektur-CSV ohne Rückfrage neben der Eigentümerdatei liegt, wenn der Ordner beschreibbar ist, und gemerkt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKorrekturDatei<br><span class="testname">test_ohne_csv_quelle_wird_gefragt</span></td><td>Prüft, dass ohne verwertbare CSV-Quelle nach dem Speicherort gefragt wird; Abbrechen liefert keinen Pfad.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestDockWidgetTabs<br><span class="testname">test_tab_ist_im_dockwidget_eingetragen</span></td><td>Prüft, dass der Tab „Eigentümer“ im DockWidget direkt nach dem Bearbeitungs-Tab steht.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_flurstueck_alkis.py testflurstueckalkis test_user_cancel_returns_none testflurstueckalkis test_empty_text_after_confirmation_returns_none testflurstueckalkis test_invalid_wfs_layer_returns_none testflurstueckalkis test_success_returns_layer_and_first_status testflurstueckalkis test_sql_filter_contains_all_schluessel testflurstueckalkis test_existing_layer_reload_yes testflurstueckalkis test_existing_layer_abbrechen_returns_none testflurstueckalkis test_vorgabe_schluessel_prefills_default_text testflurstueckalkis test_vorgabe_namen_appears_in_label testflurstueckalkis test_backwards_compatible_no_new_params testflurstueckalkis test_ohne_schluessel_abfrage_ueberspringt_ask_text testflurstueckalkisanhaengendedup test_append_ueberspringt_bereits_vorhandene_flurstuecke testflurstueckalkisanhaengendedup test_append_ohne_kennzeichen_feld_haengt_alles_an testflurstueckalkisanhaengendedup test_ohne_schluessel_abfrage_append_dedup" data-hasred="1" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-flurstueck-alkis-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_flurstueck_alkis.py</span><span class="card-meta"><span class="count-total">14 Testfälle</span><span class="cpill cpill-ok">8</span><span class="cpill cpill-warn">6</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-flurstueck-alkis-py"><p class="filedesc">Unit-Tests für das flurstueck_alkis-Modul.</p><div class="gchips"><span class="gchip" title="">TestFlurstueckAlkis <b>11</b></span><span class="gchip" title="Anhängen an einen bestehenden Flurstück-Layer (Issue #28).">TestFlurstueckAlkisAnhaengenDedup <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_flurstueck_alkis.py"])
|
||
class root rootnode
|
||
root --> g1["TestFlurstueckAlkis (11)"]
|
||
class g1 groupnode
|
||
g1 --> t1("user_cancel_returns_none")
|
||
g1 --> t2("empty_text_after_confirmation_returns_none")
|
||
g1 --> t3("invalid_wfs_layer_returns_none")
|
||
g1 --> t4("success_returns_layer_and_first_status")
|
||
g1 --> t5("sql_filter_contains_all_schluessel")
|
||
g1 --> t6("existing_layer_reload_yes")
|
||
g1 --> t7("existing_layer_abbrechen_returns_none")
|
||
g1 --> t8("vorgabe_schluessel_prefills_default_text")
|
||
g1 --> t9("vorgabe_namen_appears_in_label")
|
||
g1 --> t10("backwards_compatible_no_new_params")
|
||
g1 --> t11("ohne_schluessel_abfrage_ueberspringt_ask_text")
|
||
root --> g2["TestFlurstueckAlkisAnhaengenDedup (3)"]
|
||
class g2 groupnode
|
||
g2 --> t12("append_ueberspringt_bereits_vorhandene_flurstuecke")
|
||
g2 --> t13("append_ohne_kennzeichen_feld_haengt_alles_an")
|
||
g2 --> t14("ohne_schluessel_abfrage_append_dedup")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 warn
|
||
class t5 warn
|
||
class t6 warn
|
||
class t7 ok
|
||
class t8 warn
|
||
class t9 warn
|
||
class t10 warn
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 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></tr></thead><tbody><tr><td class="mono">TestFlurstueckAlkis<br><span class="testname">test_user_cancel_returns_none</span></td><td>Prüft, dass ein Abbruch im Eingabedialog (ok=False) (None, LoadStatus.NONE) liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlurstueckAlkis<br><span class="testname">test_empty_text_after_confirmation_returns_none</span></td><td>Prüft, dass ein bestätigter, aber leerer Eingabetext ebenfalls (None, LoadStatus.NONE) liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlurstueckAlkis<br><span class="testname">test_invalid_wfs_layer_returns_none</span></td><td>Prüft, dass ein ungültiger WFS-Layer (None, LoadStatus.NONE) liefert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlurstueckAlkis<br><span class="testname">test_success_returns_layer_and_first_status</span></td><td>Prüft, dass ohne bestehenden Layer der von lade_flurstuecke_per_gemarkung gelieferte Layer mit LoadStatus.FIRST zurückgegeben wird.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestFlurstueckAlkis<br><span class="testname">test_sql_filter_contains_all_schluessel</span></td><td>Prüft, dass lade_flurstuecke_per_gemarkung für jeden Gemarkungsschlüssel eine eigene WFS-Anfrage mit dessen Schlüssel stellt.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestFlurstueckAlkis<br><span class="testname">test_existing_layer_reload_yes</span></td><td>Prüft, dass bei bestehendem Layer und Klick auf 'Überschreiben' der alte Layer entfernt und LoadStatus.RELOAD geliefert wird.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestFlurstueckAlkis<br><span class="testname">test_existing_layer_abbrechen_returns_none</span></td><td>Prüft, dass bei bestehendem Layer und Klick auf 'Abbrechen' nichts verändert wird und (None, LoadStatus.NONE) geliefert wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlurstueckAlkis<br><span class="testname">test_vorgabe_schluessel_prefills_default_text</span></td><td>Prüft, dass vorgabe_schluessel als vorbelegter default_text im Eingabedialog erscheint.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestFlurstueckAlkis<br><span class="testname">test_vorgabe_namen_appears_in_label</span></td><td>Prüft, dass vorgabe_namen im Beschriftungstext des Eingabedialogs erscheint.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestFlurstueckAlkis<br><span class="testname">test_backwards_compatible_no_new_params</span></td><td>Prüft, dass flurstueck_alkis() ohne die neuen optionalen Parameter weiterhin fehlerfrei einen Layer mit LoadStatus.FIRST liefert.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestFlurstueckAlkis<br><span class="testname">test_ohne_schluessel_abfrage_ueberspringt_ask_text</span></td><td>Prüft, dass ohne_schluessel_abfrage=True vorgabe_schluessel direkt verwendet und ask_text nicht aufgerufen wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlurstueckAlkisAnhaengenDedup<br><span class="testname">test_append_ueberspringt_bereits_vorhandene_flurstuecke</span></td><td>Prüft, dass beim Anhängen bereits vorhandene flurstueckskennzeichen nicht erneut hinzugefügt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlurstueckAlkisAnhaengenDedup<br><span class="testname">test_append_ohne_kennzeichen_feld_haengt_alles_an</span></td><td>Prüft, dass ohne flurstueckskennzeichen-Feld weiterhin alle Features angehängt werden (Rückfallverhalten).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlurstueckAlkisAnhaengenDedup<br><span class="testname">test_ohne_schluessel_abfrage_append_dedup</span></td><td>ohne_schluessel_abfrage=True: Anhängen dedupliziert trotzdem, ohne nach Schlüsseln zu fragen (#47).</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_flurstueck_suche.py testeingabe test_flurstuecksnummer_mit_und_ohne_nenner testeingabe test_ungueltige_flurstuecksnummer testeingabe test_kennzeichen_zerlegen testeingabe test_gemarkungsnummer_aus_ziffern testeingabe test_gemarkungsname_ueber_gemarkungslayer testeingabe test_gemarkungsname_ohne_layer_oder_unbekannt testsuche test_mit_nenner_genau_ein_treffer testsuche test_ohne_nenner_alle_mit_diesem_zaehler testsuche test_kein_treffer testsuche test_layer_ohne_kennzeichenfeld testsuche test_fehlender_flurstueckslayer_bricht_ab testsuche test_suche_im_projekt_mit_gemarkungsname" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-flurstueck-suche-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_flurstueck_suche.py</span><span class="card-meta"><span class="count-total">12 Testfälle</span><span class="cpill cpill-ok">12</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-flurstueck-suche-py"><p class="filedesc">Tests für die Flurstückssuche im Layer „Flurstücke“ (#56).</p><div class="gchips"><span class="gchip" title="">TestEingabe <b>6</b></span><span class="gchip" title="">TestSuche <b>6</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_flurstueck_suche.py"])
|
||
class root rootnode
|
||
root --> g1["TestEingabe (6)"]
|
||
class g1 groupnode
|
||
g1 --> t1("flurstuecksnummer_mit_und_ohne_nenner")
|
||
g1 --> t2("ungueltige_flurstuecksnummer")
|
||
g1 --> t3("kennzeichen_zerlegen")
|
||
g1 --> t4("gemarkungsnummer_aus_ziffern")
|
||
g1 --> t5("gemarkungsname_ueber_gemarkungslayer")
|
||
g1 --> t6("gemarkungsname_ohne_layer_oder_unbekannt")
|
||
root --> g2["TestSuche (6)"]
|
||
class g2 groupnode
|
||
g2 --> t7("mit_nenner_genau_ein_treffer")
|
||
g2 --> t8("ohne_nenner_alle_mit_diesem_zaehler")
|
||
g2 --> t9("kein_treffer")
|
||
g2 --> t10("layer_ohne_kennzeichenfeld")
|
||
g2 --> t11("fehlender_flurstueckslayer_bricht_ab")
|
||
g2 --> t12("suche_im_projekt_mit_gemarkungsname")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 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></tr></thead><tbody><tr><td class="mono">TestEingabe<br><span class="testname">test_flurstuecksnummer_mit_und_ohne_nenner</span></td><td>Prüft, dass Zähler und Nenner getrennt und führende Nullen entfernt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEingabe<br><span class="testname">test_ungueltige_flurstuecksnummer</span></td><td>Prüft, dass leere oder unzulässige Flurstücksnummern abgelehnt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEingabe<br><span class="testname">test_kennzeichen_zerlegen</span></td><td>Prüft, dass Gemarkung, Zähler und Nenner aus dem ALKIS-Kennzeichen gelesen werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEingabe<br><span class="testname">test_gemarkungsnummer_aus_ziffern</span></td><td>Prüft, dass Ziffern als Gemarkungsnummer gelten, auch ohne führende Nullen oder als langer Schlüssel.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEingabe<br><span class="testname">test_gemarkungsname_ueber_gemarkungslayer</span></td><td>Prüft, dass ein Gemarkungsname ohne Rücksicht auf Großschreibung in alle passenden Nummern übersetzt wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEingabe<br><span class="testname">test_gemarkungsname_ohne_layer_oder_unbekannt</span></td><td>Prüft, dass ein Name ohne Gemarkungslayer oder ohne Treffer eine verständliche Meldung ergibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_mit_nenner_genau_ein_treffer</span></td><td>Prüft, dass mit Nenner nur das passende Flurstück der Gemarkung gefunden wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_ohne_nenner_alle_mit_diesem_zaehler</span></td><td>Prüft, dass ohne Nenner alle Flurstücke mit dem Zähler gefunden werden, aber nur in der gesuchten Gemarkung.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_kein_treffer</span></td><td>Prüft, dass ein nicht vorhandenes Flurstück eine leere Trefferliste ergibt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_layer_ohne_kennzeichenfeld</span></td><td>Prüft, dass ein Flurstückslayer ohne Feld „flurstueckskennzeichen“ gemeldet wird.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_fehlender_flurstueckslayer_bricht_ab</span></td><td>Prüft, dass die Suche ohne Layer „Flurstücke“ mit dem Hinweis abbricht, zuerst Verfahrensgebiet und Flurstücke zu laden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSuche<br><span class="testname">test_suche_im_projekt_mit_gemarkungsname</span></td><td>Prüft, dass die Suche im Projekt den Gemarkungsnamen auflöst und Layer samt Treffern liefert.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_gemarkung_alkis.py testextractschluesselundname test_standard_attribute testextractschluesselundname test_fallback_attribute testextractschluesselundname test_missing_attribute_returns_empty testextractschluesselundname test_none_value_returns_empty testgemarkungschluesselbbox test_success_bbox_filter testgemarkungschluesselbbox test_fallback_when_bbox_fails testgemarkungschluesselbbox test_both_layers_fail_returns_empty testgemarkungschluesselbbox test_deduplication_and_sorting testgemarkungschluesselbbox test_feature_without_schluessel_skipped testgemarkungschluesselbbox test_exception_returns_empty testgemarkungschluesselnurnummern test_returns_only_nummern testgemarkungschluesselnurnummern test_empty_input_returns_empty testladegemarkungenlayer test_returns_layer_when_service_reachable testladegemarkungenlayer test_returns_none_when_service_unreachable" data-hasred="1" data-hasskip="1" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-gemarkung-alkis-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_gemarkung_alkis.py</span><span class="card-meta"><span class="count-total">14 Testfälle</span><span class="cpill cpill-ok">4</span><span class="cpill cpill-warn">2</span><span class="cpill cpill-skip">8</span><span class="docbadge" title="Anteil mit Docstring">57% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-gemarkung-alkis-py"><p class="filedesc">Unit-Tests für `sn_verfahrensgebiet.functions.gemarkung_alkis`.</p><div class="gchips"><span class="gchip" title="">TestExtractSchluesselUndName <b>4</b></span><span class="gchip" title="">TestGemarkungSchluesselbbox <b>6</b></span><span class="gchip" title="">TestGemarkungSchluesselnurNummern <b>2</b></span><span class="gchip" title="">TestLadeGemarkungenlayer <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_gemarkung_alkis.py"])
|
||
class root rootnode
|
||
root --> g1["TestExtractSchluesselUndName (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("standard_attribute")
|
||
g1 --> t2("fallback_attribute")
|
||
g1 --> t3("missing_attribute_returns_empty")
|
||
g1 --> t4("none_value_returns_empty")
|
||
root --> g2["TestGemarkungSchluesselbbox (6)"]
|
||
class g2 groupnode
|
||
g2 --> t5("success_bbox_filter")
|
||
g2 --> t6("fallback_when_bbox_fails")
|
||
g2 --> t7("both_layers_fail_returns_empty")
|
||
g2 --> t8("deduplication_and_sorting")
|
||
g2 --> t9("feature_without_schluessel_skipped")
|
||
g2 --> t10("exception_returns_empty")
|
||
root --> g3["TestGemarkungSchluesselnurNummern (2)"]
|
||
class g3 groupnode
|
||
g3 --> t11("returns_only_nummern")
|
||
g3 --> t12("empty_input_returns_empty")
|
||
root --> g4["TestLadeGemarkungenlayer (2)"]
|
||
class g4 groupnode
|
||
g4 --> t13("returns_layer_when_service_reachable")
|
||
g4 --> t14("returns_none_when_service_unreachable")
|
||
class t1 warn
|
||
class t2 warn
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 skip
|
||
class t6 skip
|
||
class t7 skip
|
||
class t8 skip
|
||
class t9 skip
|
||
class t10 skip
|
||
class t11 skip
|
||
class t12 skip
|
||
class t13 ok
|
||
class t14 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></tr></thead><tbody><tr><td class="mono">TestExtractSchluesselUndName<br><span class="testname">test_standard_attribute</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestExtractSchluesselUndName<br><span class="testname">test_fallback_attribute</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestExtractSchluesselUndName<br><span class="testname">test_missing_attribute_returns_empty</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExtractSchluesselUndName<br><span class="testname">test_none_value_returns_empty</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestGemarkungSchluesselbbox<br><span class="testname">test_success_bbox_filter</span></td><td>WFS-BBox-Filter liefert Features → korrekte Tupel-Liste.</td><td><span class="pill pill-skip" title="Legacy API (by_bbox) not available in current module">übersp.</span></td></tr><tr><td class="mono">TestGemarkungSchluesselbbox<br><span class="testname">test_fallback_when_bbox_fails</span></td><td>BBox-Filter schlägt fehl → Fallback auf Volllade + client-seitige Filterung.</td><td><span class="pill pill-skip" title="Legacy API (by_bbox) not available in current module">übersp.</span></td></tr><tr><td class="mono">TestGemarkungSchluesselbbox<br><span class="testname">test_both_layers_fail_returns_empty</span></td><td>Beide Lade-Strategien scheitern → leere Liste.</td><td><span class="pill pill-skip" title="Legacy API (by_bbox) not available in current module">übersp.</span></td></tr><tr><td class="mono">TestGemarkungSchluesselbbox<br><span class="testname">test_deduplication_and_sorting</span></td><td>Doppelte Schlüssel werden dedupliziert, Ergebnis ist sortiert.</td><td><span class="pill pill-skip" title="Legacy API (by_bbox) not available in current module">übersp.</span></td></tr><tr><td class="mono">TestGemarkungSchluesselbbox<br><span class="testname">test_feature_without_schluessel_skipped</span></td><td>Feature ohne Schlüssel-Attribut wird übersprungen.</td><td><span class="pill pill-skip" title="Legacy API (by_bbox) not available in current module">übersp.</span></td></tr><tr><td class="mono">TestGemarkungSchluesselbbox<br><span class="testname">test_exception_returns_empty</span></td><td>Exception im Ladevorgang → leere Liste (kein Crash).</td><td><span class="pill pill-skip" title="Legacy API (by_bbox) not available in current module">übersp.</span></td></tr><tr><td class="mono">TestGemarkungSchluesselnurNummern<br><span class="testname">test_returns_only_nummern</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-skip" title="Legacy API (by_bbox) not available in current module">übersp.</span></td></tr><tr><td class="mono">TestGemarkungSchluesselnurNummern<br><span class="testname">test_empty_input_returns_empty</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-skip" title="Legacy API (by_bbox) not available in current module">übersp.</span></td></tr><tr><td class="mono">TestLadeGemarkungenlayer<br><span class="testname">test_returns_layer_when_service_reachable</span></td><td>Dienst erreichbar (isValid=True) → Layer-Objekt zurückgegeben.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLadeGemarkungenlayer<br><span class="testname">test_returns_none_when_service_unreachable</span></td><td>Dienst nicht erreichbar (isValid=False) → None zurückgegeben.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_grenzpunkt_alkis.py testextrahieregmlids test_xlink_href_format testextrahieregmlids test_plain_gml_id testextrahieregmlids test_empty_value_skipped testextrahieregmlids test_deduplication testextrahieregmlids test_sorted_output testgrenzpunktalkis test_no_vg_layer_returns_none testgrenzpunktalkis test_invalid_punktort_layer testgrenzpunktalkis test_empty_punktort_layer testgrenzpunktalkis test_no_gml_ids_returns_pta_only testgrenzpunktalkis test_grenzpunkt_batch_empty testgrenzpunktalkis test_success_returns_both_layers testgrenzpunktalkis test_extent_derived_from_vg_layer testgrenzpunktegemarkungsweisestil test_stil_wird_nach_dem_laden_auf_den_ergebnis_layer_angewendet" data-hasred="1" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-grenzpunkt-alkis-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_grenzpunkt_alkis.py</span><span class="card-meta"><span class="count-total">13 Testfälle</span><span class="cpill cpill-ok">9</span><span class="cpill cpill-warn">4</span><span class="docbadge" title="Anteil mit Docstring">54% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-grenzpunkt-alkis-py"><p class="filedesc">Unit-Tests für `sn_verfahrensgebiet.functions.grenzpunkt_alkis`.</p><div class="gchips"><span class="gchip" title="">TestExtrahiereGmlIds <b>5</b></span><span class="gchip" title="">TestGrenzpunktAlkis <b>7</b></span><span class="gchip" title="">TestGrenzpunkteGemarkungsweiseStil <b>1</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_grenzpunkt_alkis.py"])
|
||
class root rootnode
|
||
root --> g1["TestExtrahiereGmlIds (5)"]
|
||
class g1 groupnode
|
||
g1 --> t1("xlink_href_format")
|
||
g1 --> t2("plain_gml_id")
|
||
g1 --> t3("empty_value_skipped")
|
||
g1 --> t4("deduplication")
|
||
g1 --> t5("sorted_output")
|
||
root --> g2["TestGrenzpunktAlkis (7)"]
|
||
class g2 groupnode
|
||
g2 --> t6("no_vg_layer_returns_none")
|
||
g2 --> t7("invalid_punktort_layer")
|
||
g2 --> t8("empty_punktort_layer")
|
||
g2 --> t9("no_gml_ids_returns_pta_only")
|
||
g2 --> t10("grenzpunkt_batch_empty")
|
||
g2 --> t11("success_returns_both_layers")
|
||
g2 --> t12("extent_derived_from_vg_layer")
|
||
root --> g3["TestGrenzpunkteGemarkungsweiseStil (1)"]
|
||
class g3 groupnode
|
||
g3 --> t13("stil_wird_nach_dem_laden_auf_den_ergebnis_layer_angewendet")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 warn
|
||
class t10 warn
|
||
class t11 warn
|
||
class t12 warn
|
||
class t13 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></tr></thead><tbody><tr><td class="mono">TestExtrahiereGmlIds<br><span class="testname">test_xlink_href_format</span></td><td>URN-Format 'urn:adv:oid:DEABC123' → nur 'DEABC123' extrahiert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExtrahiereGmlIds<br><span class="testname">test_plain_gml_id</span></td><td>Plain-GML-ID ohne Doppelpunkt → direkt übernommen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExtrahiereGmlIds<br><span class="testname">test_empty_value_skipped</span></td><td>Leerer gehoertZu-Wert wird übersprungen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExtrahiereGmlIds<br><span class="testname">test_deduplication</span></td><td>Doppelte Referenzen werden dedupliziert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExtrahiereGmlIds<br><span class="testname">test_sorted_output</span></td><td>Rückgabe ist aufsteigend sortiert.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestGrenzpunktAlkis<br><span class="testname">test_no_vg_layer_returns_none</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestGrenzpunktAlkis<br><span class="testname">test_invalid_punktort_layer</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestGrenzpunktAlkis<br><span class="testname">test_empty_punktort_layer</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestGrenzpunktAlkis<br><span class="testname">test_no_gml_ids_returns_pta_only</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestGrenzpunktAlkis<br><span class="testname">test_grenzpunkt_batch_empty</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestGrenzpunktAlkis<br><span class="testname">test_success_returns_both_layers</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestGrenzpunktAlkis<br><span class="testname">test_extent_derived_from_vg_layer</span></td><td>Wenn kein extent übergeben → Extent aus VG-Layer holen.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestGrenzpunkteGemarkungsweiseStil<br><span class="testname">test_stil_wird_nach_dem_laden_auf_den_ergebnis_layer_angewendet</span></td><td>Prüft, dass grenzpunkte_gemarkungsweise() nach dem Laden apply_style() mit dem neuen ALKIS-Grenzpunkt-Stil auf den fertigen Join-Layer anwendet (#53).</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_knickpunkt_pruefung.py testextrahiereknickpunkte test_leerer_layer_gibt_leere_liste testextrahiereknickpunkte test_keine_gueltige_geometrie_gibt_leere_liste testextrahiereknickpunkte test_feature_mit_leerer_geometrie_gibt_leere_liste testextrahiereknickpunkte test_qgis_nicht_verfuegbar_gibt_leere_liste testknickpunktpruefunginputvalidierung test_keine_knickpunkte_gibt_none_zurueck testknickpunktpruefunginputvalidierung test_kein_punktort_layer_gibt_none_zurueck testknickpunktpruefunginputvalidierung test_abbruch_via_progress_gibt_none_zurueck testknickpunktpruefungklassifizierung test_identischer_punkt_wird_gruen_gezaehlt testknickpunktpruefungklassifizierung test_kein_pta_an_knickpunkt_wird_rot_gezaehlt testfehlendknickpunkteviaverbindungslinien test_leere_union_gibt_null_zurueck testfehlendknickpunkteviaverbindungslinien test_weniger_als_zwei_pta_auf_ring_kein_orange testfehlendknickpunkteviaverbindungslinien test_ungematchter_pta_im_puffer_wird_orange testfehlendknickpunkteviaverbindungslinien test_ungematchter_pta_ausserhalb_puffer_kein_orange" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-knickpunkt-pruefung-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_knickpunkt_pruefung.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">54% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-knickpunkt-pruefung-py"><p class="filedesc">Unit-Tests für `sn_verfahrensgebiet.functions.knickpunkt_pruefung`.</p><div class="gchips"><span class="gchip" title="">TestExtrahiereKnickpunkte <b>4</b></span><span class="gchip" title="">TestKnickpunktPruefungInputvalidierung <b>3</b></span><span class="gchip" title="Testet die Grün/Rot/Orange-Klassifizierung mit gesteuertem QGIS-Mock.">TestKnickpunktPruefungKlassifizierung <b>2</b></span><span class="gchip" title="Direkte Tests für `_fehlende_knickpunkte_via_verbindungslinien`.">TestFehlendKnickpunkteViaVerbindungslinien <b>4</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_knickpunkt_pruefung.py"])
|
||
class root rootnode
|
||
root --> g1["TestExtrahiereKnickpunkte (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("leerer_layer_gibt_leere_liste")
|
||
g1 --> t2("keine_gueltige_geometrie_gibt_leere_liste")
|
||
g1 --> t3("feature_mit_leerer_geometrie_gibt_leere_liste")
|
||
g1 --> t4("qgis_nicht_verfuegbar_gibt_leere_liste")
|
||
root --> g2["TestKnickpunktPruefungInputvalidierung (3)"]
|
||
class g2 groupnode
|
||
g2 --> t5("keine_knickpunkte_gibt_none_zurueck")
|
||
g2 --> t6("kein_punktort_layer_gibt_none_zurueck")
|
||
g2 --> t7("abbruch_via_progress_gibt_none_zurueck")
|
||
root --> g3["TestKnickpunktPruefungKlassifizierung (2)"]
|
||
class g3 groupnode
|
||
g3 --> t8("identischer_punkt_wird_gruen_gezaehlt")
|
||
g3 --> t9("kein_pta_an_knickpunkt_wird_rot_gezaehlt")
|
||
root --> g4["TestFehlendKnickpunkteViaVerbindungslinien (4)"]
|
||
class g4 groupnode
|
||
g4 --> t10("leere_union_gibt_null_zurueck")
|
||
g4 --> t11("weniger_als_zwei_pta_auf_ring_kein_orange")
|
||
g4 --> t12("ungematchter_pta_im_puffer_wird_orange")
|
||
g4 --> t13("ungematchter_pta_ausserhalb_puffer_kein_orange")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 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></tr></thead><tbody><tr><td class="mono">TestExtrahiereKnickpunkte<br><span class="testname">test_leerer_layer_gibt_leere_liste</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExtrahiereKnickpunkte<br><span class="testname">test_keine_gueltige_geometrie_gibt_leere_liste</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExtrahiereKnickpunkte<br><span class="testname">test_feature_mit_leerer_geometrie_gibt_leere_liste</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestExtrahiereKnickpunkte<br><span class="testname">test_qgis_nicht_verfuegbar_gibt_leere_liste</span></td><td>Wenn qgis.core kein QgsPointXY hat (ImportError in Funktion), leere Liste.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKnickpunktPruefungInputvalidierung<br><span class="testname">test_keine_knickpunkte_gibt_none_zurueck</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKnickpunktPruefungInputvalidierung<br><span class="testname">test_kein_punktort_layer_gibt_none_zurueck</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKnickpunktPruefungInputvalidierung<br><span class="testname">test_abbruch_via_progress_gibt_none_zurueck</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKnickpunktPruefungKlassifizierung<br><span class="testname">test_identischer_punkt_wird_gruen_gezaehlt</span></td><td>PunktortTA exakt am Knickpunkt → identisch_count == 1.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestKnickpunktPruefungKlassifizierung<br><span class="testname">test_kein_pta_an_knickpunkt_wird_rot_gezaehlt</span></td><td>Kein PunktortTA am Knickpunkt → kein_pta_count == 1.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFehlendKnickpunkteViaVerbindungslinien<br><span class="testname">test_leere_union_gibt_null_zurueck</span></td><td>bror_union.isEmpty() == True → (0, []).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFehlendKnickpunkteViaVerbindungslinien<br><span class="testname">test_weniger_als_zwei_pta_auf_ring_kein_orange</span></td><td>Nur 1 gematchter PunktortTA auf Ring → keine fehlenden Knickpunkte.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFehlendKnickpunkteViaVerbindungslinien<br><span class="testname">test_ungematchter_pta_im_puffer_wird_orange</span></td><td>Nicht-gematchter PunktortTA innerhalb 3-cm-Puffer → orange gezählt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFehlendKnickpunkteViaVerbindungslinien<br><span class="testname">test_ungematchter_pta_ausserhalb_puffer_kein_orange</span></td><td>Nicht-gematchter PunktortTA außerhalb Puffer → nicht orange gezählt.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_main.py testpluginmain test_init_sets_services_and_names testpluginmain test_initgui_registers_action_when_basis_ui_exists testpluginmain test_run_creates_dock_and_marks_toolbar_active testpluginmain test_unload_removes_dock_and_action" data-hasred="0" data-hasskip="0" data-nodoc="1"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-main-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_main.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">0% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-main-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestPluginMain <b>4</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_main.py"])
|
||
class root rootnode
|
||
root --> g1["TestPluginMain (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("init_sets_services_and_names")
|
||
g1 --> t2("initGui_registers_action_when_basis_ui_exists")
|
||
g1 --> t3("run_creates_dock_and_marks_toolbar_active")
|
||
g1 --> t4("unload_removes_dock_and_action")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 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></tr></thead><tbody><tr><td class="mono">TestPluginMain<br><span class="testname">test_init_sets_services_and_names</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPluginMain<br><span class="testname">test_initGui_registers_action_when_basis_ui_exists</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPluginMain<br><span class="testname">test_run_creates_dock_and_marks_toolbar_active</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPluginMain<br><span class="testname">test_unload_removes_dock_and_action</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_verfahrensgebiet_alkis.py testverfahrensgebietalkis test_check_existing_layer_first_load testverfahrensgebietalkis test_check_existing_layer_keep_existing testverfahrensgebietalkis test_verfahrensgebiet_alkis_fails_when_verfahrensnummer_missing testverfahrensgebietalkis test_verfahrensgebiet_alkis_fails_on_invalid_wfs_layer testverfahrensgebietalkis test_verfahrensgebiet_alkis_success_single_kombination testverfahrensgebietalkis test_verfahrensgebiet_alkis_multi_kombination_dialog_auswahl testverfahrensgebietalkis test_verfahrensgebiet_alkis_multi_kombination_dialog_abbruch testverfahrensgebietalkis test_verfahrensgebiet_alkis_multi_kombination_mehrfachauswahl" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-verfahrensgebiet-alkis-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_verfahrensgebiet_alkis.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">50% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-verfahrensgebiet-alkis-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestVerfahrensgebietAlkis <b>8</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_verfahrensgebiet_alkis.py"])
|
||
class root rootnode
|
||
root --> g1["TestVerfahrensgebietAlkis (8)"]
|
||
class g1 groupnode
|
||
g1 --> t1("check_existing_layer_first_load")
|
||
g1 --> t2("check_existing_layer_keep_existing")
|
||
g1 --> t3("verfahrensgebiet_alkis_fails_when_verfahrensnummer_missing")
|
||
g1 --> t4("verfahrensgebiet_alkis_fails_on_invalid_wfs_layer")
|
||
g1 --> t5("verfahrensgebiet_alkis_success_single_kombination")
|
||
g1 --> t6("verfahrensgebiet_alkis_multi_kombination_dialog_auswahl")
|
||
g1 --> t7("verfahrensgebiet_alkis_multi_kombination_dialog_abbruch")
|
||
g1 --> t8("verfahrensgebiet_alkis_multi_kombination_mehrfachauswahl")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 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></tr></thead><tbody><tr><td class="mono">TestVerfahrensgebietAlkis<br><span class="testname">test_check_existing_layer_first_load</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkis<br><span class="testname">test_check_existing_layer_keep_existing</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkis<br><span class="testname">test_verfahrensgebiet_alkis_fails_when_verfahrensnummer_missing</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkis<br><span class="testname">test_verfahrensgebiet_alkis_fails_on_invalid_wfs_layer</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkis<br><span class="testname">test_verfahrensgebiet_alkis_success_single_kombination</span></td><td>Einzelne (adv_name, bezeichnung)-Kombination → kein Dialog, Memory-Layer zurück.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkis<br><span class="testname">test_verfahrensgebiet_alkis_multi_kombination_dialog_auswahl</span></td><td>Zwei verschiedene Kombinationen → Dialog wird gezeigt, gewählte Features genutzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkis<br><span class="testname">test_verfahrensgebiet_alkis_multi_kombination_dialog_abbruch</span></td><td>Zwei verschiedene Kombinationen → Nutzer bricht Dialog ab → NONE.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkis<br><span class="testname">test_verfahrensgebiet_alkis_multi_kombination_mehrfachauswahl</span></td><td>Zwei verschiedene Kombinationen → beide ausgewählt → beide Feature-Gruppen genutzt.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_verfahrensgebiet_alkis_komplett.py testselectbylocation test_processing_not_available_returns_zero testselectbylocation test_processing_success_returns_count testselectbylocation test_processing_exception_returns_zero testfuegevkzfeldhinzu test_empty_vkz_does_nothing testfuegevkzfeldhinzu test_none_vkz_does_nothing testfuegevkzfeldhinzu test_vkz_field_added testflaechenvergleich test_gleiche_flaeche_stimmt_ueberein testflaechenvergleich test_verschiedene_flaeche_stimmt_nicht_ueberein testflaechenvergleich test_differenz_innerhalb_toleranz testflaechenvergleich test_differenz_ausserhalb_toleranz testflaechenvergleich test_flaechen_werte_korrekt testflaechenvergleich test_lese_toleranz_default_ist_null testflaechenvergleich test_lese_toleranz_parst_string testflaechenvergleich test_lese_toleranz_ungueltig_fallback_null testverfahrensgebietalkiskomplett test_vg_alkis_none_aborts testverfahrensgebietalkiskomplett test_flst_none_aborts testverfahrensgebietalkiskomplett test_no_selection_returns_none_enriched testverfahrensgebietalkiskomplett test_invalid_enriched_layer_returns_none testverfahrensgebietalkiskomplett test_progress_cancel_after_step1_returns_none testverfahrensgebietalkiskomplett test_success_flaechen_match_zeigt_info testverfahrensgebietalkiskomplett test_no_vkz_variable_passes_empty_string testverfahrensgebietalkiskomplett test_flaechen_abweichung_abbrechen_kein_detailcheck testverfahrensgebietalkiskomplett test_flaechen_abweichung_als_vg_laden testverfahrensgebietalkiskomplett test_flaechen_abweichung_detailpruefung_startet_knickpruefung testverfahrensgebietalkiskomplett test_bror_layer_bleibt_bei_erfolg_im_projekt testverfahrensgebietalkiskomplett test_bror_layer_wird_bei_fehler_entfernt testverfahrensgebietalkiskomplett test_kein_vkz_kein_landkreis_dialog_abgebrochen testverfahrensgebietalkiskomplett test_kein_vkz_kein_landkreis_dialog_liefert_landkreis testverfahrensgebietalkiskomplett test_landkreis_modus_wird_bei_fehlender_vkz_verwendet testverfahrensgebietalkiskomplett test_landkreis_modus_nur_laden_ueberspringt_dialog2" data-hasred="0" data-hasskip="0" data-nodoc="1"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-verfahrensgebiet-alkis-komplett-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_verfahrensgebiet_alkis_komplett.py</span><span class="card-meta"><span class="count-total">30 Testfälle</span><span class="cpill cpill-ok">30</span><span class="docbadge" title="Anteil mit Docstring">37% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-verfahrensgebiet-alkis-komplett-py"><p class="filedesc">Unit-Tests für `sn_verfahrensgebiet.functions.verfahrensgebiet_alkis_komplett`.</p><div class="gchips"><span class="gchip" title="">TestSelectByLocation <b>3</b></span><span class="gchip" title="">TestFuegeVkzFeldHinzu <b>3</b></span><span class="gchip" title="">TestFlaechenvergleich <b>8</b></span><span class="gchip" title="">TestVerfahrensgebietAlkisKomplett <b>16</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_verfahrensgebiet_alkis_komplett.py"])
|
||
class root rootnode
|
||
root --> g1["TestSelectByLocation (3)"]
|
||
class g1 groupnode
|
||
g1 --> t1("processing_not_available_returns_zero")
|
||
g1 --> t2("processing_success_returns_count")
|
||
g1 --> t3("processing_exception_returns_zero")
|
||
root --> g2["TestFuegeVkzFeldHinzu (3)"]
|
||
class g2 groupnode
|
||
g2 --> t4("empty_vkz_does_nothing")
|
||
g2 --> t5("none_vkz_does_nothing")
|
||
g2 --> t6("vkz_field_added")
|
||
root --> g3["TestFlaechenvergleich (8)"]
|
||
class g3 groupnode
|
||
g3 --> t7("gleiche_flaeche_stimmt_ueberein")
|
||
g3 --> t8("verschiedene_flaeche_stimmt_nicht_ueberein")
|
||
g3 --> t9("differenz_innerhalb_toleranz")
|
||
g3 --> t10("differenz_ausserhalb_toleranz")
|
||
g3 --> t11("flaechen_werte_korrekt")
|
||
g3 --> t12("lese_toleranz_default_ist_null")
|
||
g3 --> t13("lese_toleranz_parst_string")
|
||
g3 --> t14("lese_toleranz_ungueltig_fallback_null")
|
||
root --> g4["TestVerfahrensgebietAlkisKomplett (16)"]
|
||
class g4 groupnode
|
||
g4 --> t15("vg_alkis_none_aborts")
|
||
g4 --> t16("flst_none_aborts")
|
||
g4 --> t17("no_selection_returns_none_enriched")
|
||
g4 --> t18("invalid_enriched_layer_returns_none")
|
||
g4 --> t19("progress_cancel_after_step1_returns_none")
|
||
g4 --> t20("success_flaechen_match_zeigt_info")
|
||
g4 --> t21("no_vkz_variable_passes_empty_string")
|
||
g4 --> t22("flaechen_abweichung_abbrechen_kein_detailcheck")
|
||
g4 --> t23("flaechen_abweichung_als_vg_laden")
|
||
g4 --> t24("flaechen_abweichung_detailpruefung_startet_knickpruefung")
|
||
g4 --> t25("bror_layer_bleibt_bei_erfolg_im_projekt")
|
||
g4 --> t26("bror_layer_wird_bei_fehler_entfernt")
|
||
g4 --> t27("kein_vkz_kein_landkreis_dialog_abgebrochen")
|
||
g4 --> t28("kein_vkz_kein_landkreis_dialog_liefert_landkreis")
|
||
g4 --> t29("landkreis_modus_wird_bei_fehlender_vkz_verwendet")
|
||
g4 --> t30("landkreis_modus_nur_laden_ueberspringt_dialog2")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 ok
|
||
class t21 ok
|
||
class t22 ok
|
||
class t23 ok
|
||
class t24 ok
|
||
class t25 ok
|
||
class t26 ok
|
||
class t27 ok
|
||
class t28 ok
|
||
class t29 ok
|
||
class t30 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></tr></thead><tbody><tr><td class="mono">TestSelectByLocation<br><span class="testname">test_processing_not_available_returns_zero</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSelectByLocation<br><span class="testname">test_processing_success_returns_count</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestSelectByLocation<br><span class="testname">test_processing_exception_returns_zero</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFuegeVkzFeldHinzu<br><span class="testname">test_empty_vkz_does_nothing</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFuegeVkzFeldHinzu<br><span class="testname">test_none_vkz_does_nothing</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFuegeVkzFeldHinzu<br><span class="testname">test_vkz_field_added</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlaechenvergleich<br><span class="testname">test_gleiche_flaeche_stimmt_ueberein</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlaechenvergleich<br><span class="testname">test_verschiedene_flaeche_stimmt_nicht_ueberein</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlaechenvergleich<br><span class="testname">test_differenz_innerhalb_toleranz</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlaechenvergleich<br><span class="testname">test_differenz_ausserhalb_toleranz</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlaechenvergleich<br><span class="testname">test_flaechen_werte_korrekt</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlaechenvergleich<br><span class="testname">test_lese_toleranz_default_ist_null</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlaechenvergleich<br><span class="testname">test_lese_toleranz_parst_string</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFlaechenvergleich<br><span class="testname">test_lese_toleranz_ungueltig_fallback_null</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_vg_alkis_none_aborts</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_flst_none_aborts</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_no_selection_returns_none_enriched</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_invalid_enriched_layer_returns_none</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_progress_cancel_after_step1_returns_none</span></td><td>Abbruch nach Schritt 1 → sofortiger sauberer Rückgabestatus.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_success_flaechen_match_zeigt_info</span></td><td>Flächenübereinstimmung → show_info_dialog mit erwartetem Text.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_no_vkz_variable_passes_empty_string</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_flaechen_abweichung_abbrechen_kein_detailcheck</span></td><td>Abweichung + Abbrechen → knickpunkt_pruefung wird NICHT aufgerufen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_flaechen_abweichung_als_vg_laden</span></td><td>Abweichung + Als VG laden → BROR-Layer wird umbenannt und als</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_flaechen_abweichung_detailpruefung_startet_knickpruefung</span></td><td>Abweichung + Detailprüfung → lade_punktort_ta + knickpunkt_pruefung</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_bror_layer_bleibt_bei_erfolg_im_projekt</span></td><td>Bei Erfolg darf der BROR-Layer NICHT entfernt werden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_bror_layer_wird_bei_fehler_entfernt</span></td><td>Bei Fehler (flst_alkis NONE) wird der BROR-Layer aus dem Projekt entfernt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_kein_vkz_kein_landkreis_dialog_abgebrochen</span></td><td>Weder Verfahrensnummer noch Landkreis gesetzt, Nutzer bricht den</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_kein_vkz_kein_landkreis_dialog_liefert_landkreis</span></td><td>Weder Verfahrensnummer noch Landkreis gesetzt, Nutzer wählt einen</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_landkreis_modus_wird_bei_fehlender_vkz_verwendet</span></td><td>Keine Verfahrensnummer, aber Landkreis gesetzt → Landkreis-Suchpfad</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietAlkisKomplett<br><span class="testname">test_landkreis_modus_nur_laden_ueberspringt_dialog2</span></td><td>nur_laden=True → Funktion kehrt sofort zurück, Dialog 2 (Gemarkung</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_verfahrensgebiet_dialoge.py testauswahltabelle test_suchfilter_ueber_alle_spalten testauswahltabelle test_auswahl_nach_umsortieren" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-verfahrensgebiet-dialoge-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_verfahrensgebiet_dialoge.py</span><span class="card-meta"><span class="count-total">2 Testfälle</span><span class="cpill cpill-ok">2</span><span class="docbadge" title="Anteil mit Docstring">100% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-verfahrensgebiet-dialoge-py"><p class="filedesc">Tests für die gemeinsame Auswahltabelle in verfahrensgebiet_dialoge (#56).</p><div class="gchips"><span class="gchip" title="">TestAuswahltabelle <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_verfahrensgebiet_dialoge.py"])
|
||
class root rootnode
|
||
root --> g1["TestAuswahltabelle (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("suchfilter_ueber_alle_spalten")
|
||
g1 --> t2("auswahl_nach_umsortieren")
|
||
class t1 ok
|
||
class t2 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></tr></thead><tbody><tr><td class="mono">TestAuswahltabelle<br><span class="testname">test_suchfilter_ueber_alle_spalten</span></td><td>Prüft, dass der Suchfilter Teilstrings in jeder Spalte ohne Groß-/Kleinschreibung findet und leer alles zeigt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestAuswahltabelle<br><span class="testname">test_auswahl_nach_umsortieren</span></td><td>Prüft, dass die Auswahl über den gespeicherten Index auf die ursprünglichen Zeilen zurückgeführt wird, auch wenn die Tabelle umsortiert ist.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_verfahrensgebiet_edit_service.py testpruefeflurstuecklayer test_layer_ok_passes testpruefeflurstuecklayer test_layer_missing_field_fails testpruefeflurstuecklayer test_layer_wrong_geometry_fails testpruefeauswahl test_no_selection_fails testpruefeauswahl test_with_selection_passes testpruefeauswahl test_selectedfeaturecount_exception_treated_as_zero testgetkennzeichenmenge test_returns_set_of_ids testgetkennzeichenmenge test_empty_layer_returns_empty_set testgetkennzeichenmenge test_single_kennzeichen_without_comma testerstelle test_success_counts testerstelle test_partial_failure_on_empty_geometry testerstelle test_all_fail_on_empty_geometries testergaenzeverfahrensgebiet test_adds_only_new_ids testergaenzeverfahrensgebiet test_skip_empty_geometry_counts_as_failed testergaenzeverfahrensgebiet test_all_already_present testentferneausverfahrensgebiet test_removes_present_ids testentferneausverfahrensgebiet test_counts_ids_not_in_layer testentferneausverfahrensgebiet test_none_present_in_layer testentferneausverfahrensgebiet test_empty_selection_removes_nothing testentferneausverfahrensgebiet test_removes_last_id_deletes_feature testersetze test_ersetze_delegates_to_erstelle" data-hasred="0" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-verfahrensgebiet-edit-service-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_verfahrensgebiet_edit_service.py</span><span class="card-meta"><span class="count-total">21 Testfälle</span><span class="cpill cpill-ok">21</span><span class="docbadge" title="Anteil mit Docstring">81% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-verfahrensgebiet-edit-service-py"><p class="filedesc">Unit-Tests für das Verfahrensgebiet-Edit-Service-Modul.</p><div class="gchips"><span class="gchip" title="">TestPruefeFlurstueckLayer <b>3</b></span><span class="gchip" title="">TestPruefeAuswahl <b>3</b></span><span class="gchip" title="">TestGetKennzeichenMenge <b>3</b></span><span class="gchip" title="">TestErstelle <b>3</b></span><span class="gchip" title="">TestErgaenzeVerfahrensgebiet <b>3</b></span><span class="gchip" title="">TestEntferneAusVerfahrensgebiet <b>5</b></span><span class="gchip" title="">TestErsetze <b>1</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_verfahrensgebiet_edit_service.py"])
|
||
class root rootnode
|
||
root --> g1["TestPruefeFlurstueckLayer (3)"]
|
||
class g1 groupnode
|
||
g1 --> t1("layer_ok_passes")
|
||
g1 --> t2("layer_missing_field_fails")
|
||
g1 --> t3("layer_wrong_geometry_fails")
|
||
root --> g2["TestPruefeAuswahl (3)"]
|
||
class g2 groupnode
|
||
g2 --> t4("no_selection_fails")
|
||
g2 --> t5("with_selection_passes")
|
||
g2 --> t6("selectedFeatureCount_exception_treated_as_zero")
|
||
root --> g3["TestGetKennzeichenMenge (3)"]
|
||
class g3 groupnode
|
||
g3 --> t7("returns_set_of_ids")
|
||
g3 --> t8("empty_layer_returns_empty_set")
|
||
g3 --> t9("single_kennzeichen_without_comma")
|
||
root --> g4["TestErstelle (3)"]
|
||
class g4 groupnode
|
||
g4 --> t10("success_counts")
|
||
g4 --> t11("partial_failure_on_empty_geometry")
|
||
g4 --> t12("all_fail_on_empty_geometries")
|
||
root --> g5["TestErgaenzeVerfahrensgebiet (3)"]
|
||
class g5 groupnode
|
||
g5 --> t13("adds_only_new_ids")
|
||
g5 --> t14("skip_empty_geometry_counts_as_failed")
|
||
g5 --> t15("all_already_present")
|
||
root --> g6["TestEntferneAusVerfahrensgebiet (5)"]
|
||
class g6 groupnode
|
||
g6 --> t16("removes_present_ids")
|
||
g6 --> t17("counts_ids_not_in_layer")
|
||
g6 --> t18("none_present_in_layer")
|
||
g6 --> t19("empty_selection_removes_nothing")
|
||
g6 --> t20("removes_last_id_deletes_feature")
|
||
root --> g7["TestErsetze (1)"]
|
||
class g7 groupnode
|
||
g7 --> t21("ersetze_delegates_to_erstelle")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 ok
|
||
class t21 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></tr></thead><tbody><tr><td class="mono">TestPruefeFlurstueckLayer<br><span class="testname">test_layer_ok_passes</span></td><td>Gültiger Polygon-Vektor-Layer mit Pflichtfeldern → ok=True.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefeFlurstueckLayer<br><span class="testname">test_layer_missing_field_fails</span></td><td>Layer ohne Pflichtfelder → ok=False, aktion=felder_fehlen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefeFlurstueckLayer<br><span class="testname">test_layer_wrong_geometry_fails</span></td><td>Layer mit falschem Geometrietyp → ok=False, aktion=falscher_geotyp.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefeAuswahl<br><span class="testname">test_no_selection_fails</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefeAuswahl<br><span class="testname">test_with_selection_passes</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestPruefeAuswahl<br><span class="testname">test_selectedFeatureCount_exception_treated_as_zero</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestGetKennzeichenMenge<br><span class="testname">test_returns_set_of_ids</span></td><td>Kommagetrennte Kennzeichen im Single-Feature werden korrekt geparst.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestGetKennzeichenMenge<br><span class="testname">test_empty_layer_returns_empty_set</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestGetKennzeichenMenge<br><span class="testname">test_single_kennzeichen_without_comma</span></td><td>Einzelnes Kennzeichen ohne Komma wird korrekt erkannt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErstelle<br><span class="testname">test_success_counts</span></td><td>3 gültige Features → erfolgreich=3, fehlgeschlagen=0, 1 Union-Feature im Layer.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErstelle<br><span class="testname">test_partial_failure_on_empty_geometry</span></td><td>2 ok + 1 leere Geometrie → erfolgreich=2, fehlgeschlagen=1.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErstelle<br><span class="testname">test_all_fail_on_empty_geometries</span></td><td>Alle Features haben leere Geometrie → erfolgreich=0, kein Feature im Layer.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErgaenzeVerfahrensgebiet<br><span class="testname">test_adds_only_new_ids</span></td><td>Auswahl enthält 1 neue + 1 bereits vorhandene ID → hinzugefügt=1.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErgaenzeVerfahrensgebiet<br><span class="testname">test_skip_empty_geometry_counts_as_failed</span></td><td>Neue ID mit leerer Geometrie → fehlgeschlagen=1, hinzugefügt=0.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErgaenzeVerfahrensgebiet<br><span class="testname">test_all_already_present</span></td><td>Alle ausgewählten IDs bereits vorhanden → bereits_vorhanden=n, hinzugefügt=0.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEntferneAusVerfahrensgebiet<br><span class="testname">test_removes_present_ids</span></td><td>Auswahl enthält 1 vorhandene ID → entfernt=1, nicht_enthalten=0.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEntferneAusVerfahrensgebiet<br><span class="testname">test_counts_ids_not_in_layer</span></td><td>Auswahl enthält ID, die nicht im Verfahrensgebiet ist → nicht_enthalten=1.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEntferneAusVerfahrensgebiet<br><span class="testname">test_none_present_in_layer</span></td><td>Auswahl hat IDs, die alle nicht im Layer sind → entfernt=0, nicht_enthalten=n.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEntferneAusVerfahrensgebiet<br><span class="testname">test_empty_selection_removes_nothing</span></td><td>Leere Auswahl → nichts entfernt, nichts nicht_enthalten.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestEntferneAusVerfahrensgebiet<br><span class="testname">test_removes_last_id_deletes_feature</span></td><td>Wird das letzte Kennzeichen entfernt, wird das Feature gelöscht.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErsetze<br><span class="testname">test_ersetze_delegates_to_erstelle</span></td><td>ersetze_verfahrensgebiet gibt dasselbe Ergebnis wie erstelle zurück.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_verfahrensgebiet_shape_komplett.py testfindshp test_findet_shp_in_root testfindshp test_findet_shp_in_unterordner testfindshp test_kein_shp_gibt_none_zurueck testfindshp test_case_insensitive_erkennung testerstellememorylayerausshp test_leere_geometrien_geben_none testerstellememorylayerausshp test_keine_features_gibt_none testerstellememorylayerausshp test_attribute_von_erstem_feature_werden_gesetzt testladevgauszip test_dialog_abgebrochen_gibt_none_zurueck testladevgauszip test_zip_fehler_gibt_none_und_warning testladevgauszip test_kein_shp_in_zip_gibt_none_und_warning testladevgauszip test_invalider_qgslayer_gibt_none_und_warning testladevgauszip test_leere_geometrien_geben_none_und_warning testladevgauszip test_erfolg_gibt_memory_layer_zurueck testverfahrensgebietshapekomplett test_lade_zip_none_aborts testverfahrensgebietshapekomplett test_shape_vg_sofort_ins_projekt_nach_laden testverfahrensgebietshapekomplett test_shape_vg_wird_bei_abbruch_aus_projekt_entfernt testverfahrensgebietshapekomplett test_shape_vg_bleibt_im_projekt_bei_erfolg testverfahrensgebietshapekomplett test_flst_none_aborts testverfahrensgebietshapekomplett test_keine_flurstuecke_selektiert_gibt_warning testverfahrensgebietshapekomplett test_flaechen_uebereinstimmung_gibt_info_und_kein_dialog testverfahrensgebietshapekomplett test_abweichung_abbrechen_gibt_shape_vg_zurueck testverfahrensgebietshapekomplett test_abweichung_detailpruefung_ruft_knickpunkt_pruefung_auf testverfahrensgebietshapekomplett test_punktort_ta_none_gibt_shape_vg_zurueck_und_zeigt_fehler testverfahrensgebietshapekomplett test_temp_layer_wird_stets_entfernt testverfahrensgebietshapekomplett test_bror_layer_ist_stets_none testverfahrensgebietshapekomplett test_bror_geladen_und_zurueckgegeben_wenn_vkz_gesetzt testverfahrensgebietshapekomplett test_bror_wird_vor_shape_vg_ins_projekt_eingefuegt testverfahrensgebietshapekomplett test_bror_wird_bei_abbruch_aus_projekt_entfernt testverfahrensgebietshapekomplett test_verfahrensgebiet_alkis_nicht_aufgerufen_wenn_vkz_leer testverfahrensgebietshapekomplett test_bror_als_erstes_argument_beim_flaechenvergleich testverfahrensgebietshapekomplett test_fallback_auf_temp_enriched_wenn_bror_ladeversagen" data-hasred="1" data-hasskip="0" data-nodoc="1"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-verfahrensgebiet-shape-komplett-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_verfahrensgebiet_shape_komplett.py</span><span class="card-meta"><span class="count-total">31 Testfälle</span><span class="cpill cpill-ok">14</span><span class="cpill cpill-warn">17</span><span class="docbadge" title="Anteil mit Docstring">35% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-verfahrensgebiet-shape-komplett-py"><p class="filedesc">Unit-Tests für `sn_verfahrensgebiet.functions.verfahrensgebiet_shape_komplett`.</p><div class="gchips"><span class="gchip" title="">TestFindShp <b>4</b></span><span class="gchip" title="">TestErstelleMemoryLayerAusShp <b>3</b></span><span class="gchip" title="">TestLadeVgAusZip <b>6</b></span><span class="gchip" title="">TestVerfahrensgebietShapeKomplett <b>18</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_verfahrensgebiet_shape_komplett.py"])
|
||
class root rootnode
|
||
root --> g1["TestFindShp (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("findet_shp_in_root")
|
||
g1 --> t2("findet_shp_in_unterordner")
|
||
g1 --> t3("kein_shp_gibt_none_zurueck")
|
||
g1 --> t4("case_insensitive_erkennung")
|
||
root --> g2["TestErstelleMemoryLayerAusShp (3)"]
|
||
class g2 groupnode
|
||
g2 --> t5("leere_geometrien_geben_none")
|
||
g2 --> t6("keine_features_gibt_none")
|
||
g2 --> t7("attribute_von_erstem_feature_werden_gesetzt")
|
||
root --> g3["TestLadeVgAusZip (6)"]
|
||
class g3 groupnode
|
||
g3 --> t8("dialog_abgebrochen_gibt_none_zurueck")
|
||
g3 --> t9("zip_fehler_gibt_none_und_warning")
|
||
g3 --> t10("kein_shp_in_zip_gibt_none_und_warning")
|
||
g3 --> t11("invalider_qgslayer_gibt_none_und_warning")
|
||
g3 --> t12("leere_geometrien_geben_none_und_warning")
|
||
g3 --> t13("erfolg_gibt_memory_layer_zurueck")
|
||
root --> g4["TestVerfahrensgebietShapeKomplett (18)"]
|
||
class g4 groupnode
|
||
g4 --> t14("lade_zip_none_aborts")
|
||
g4 --> t15("shape_vg_sofort_ins_projekt_nach_laden")
|
||
g4 --> t16("shape_vg_wird_bei_abbruch_aus_projekt_entfernt")
|
||
g4 --> t17("shape_vg_bleibt_im_projekt_bei_erfolg")
|
||
g4 --> t18("flst_none_aborts")
|
||
g4 --> t19("keine_flurstuecke_selektiert_gibt_warning")
|
||
g4 --> t20("flaechen_uebereinstimmung_gibt_info_und_kein_dialog")
|
||
g4 --> t21("abweichung_abbrechen_gibt_shape_vg_zurueck")
|
||
g4 --> t22("abweichung_detailpruefung_ruft_knickpunkt_pruefung_auf")
|
||
g4 --> t23("punktort_ta_none_gibt_shape_vg_zurueck_und_zeigt_fehler")
|
||
g4 --> t24("temp_layer_wird_stets_entfernt")
|
||
g4 --> t25("bror_layer_ist_stets_none")
|
||
g4 --> t26("bror_geladen_und_zurueckgegeben_wenn_vkz_gesetzt")
|
||
g4 --> t27("bror_wird_vor_shape_vg_ins_projekt_eingefuegt")
|
||
g4 --> t28("bror_wird_bei_abbruch_aus_projekt_entfernt")
|
||
g4 --> t29("verfahrensgebiet_alkis_nicht_aufgerufen_wenn_vkz_leer")
|
||
g4 --> t30("bror_als_erstes_argument_beim_flaechenvergleich")
|
||
g4 --> t31("fallback_auf_temp_enriched_wenn_bror_ladeversagen")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 warn
|
||
class t9 warn
|
||
class t10 warn
|
||
class t11 warn
|
||
class t12 warn
|
||
class t13 warn
|
||
class t14 ok
|
||
class t15 warn
|
||
class t16 warn
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 warn
|
||
class t21 warn
|
||
class t22 warn
|
||
class t23 warn
|
||
class t24 ok
|
||
class t25 ok
|
||
class t26 warn
|
||
class t27 warn
|
||
class t28 warn
|
||
class t29 ok
|
||
class t30 warn
|
||
class t31 warn
|
||
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></tr></thead><tbody><tr><td class="mono">TestFindShp<br><span class="testname">test_findet_shp_in_root</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFindShp<br><span class="testname">test_findet_shp_in_unterordner</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFindShp<br><span class="testname">test_kein_shp_gibt_none_zurueck</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestFindShp<br><span class="testname">test_case_insensitive_erkennung</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErstelleMemoryLayerAusShp<br><span class="testname">test_leere_geometrien_geben_none</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErstelleMemoryLayerAusShp<br><span class="testname">test_keine_features_gibt_none</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestErstelleMemoryLayerAusShp<br><span class="testname">test_attribute_von_erstem_feature_werden_gesetzt</span></td><td>Attributwerte des ersten Features werden auf das Union-Feature übertragen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestLadeVgAusZip<br><span class="testname">test_dialog_abgebrochen_gibt_none_zurueck</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestLadeVgAusZip<br><span class="testname">test_zip_fehler_gibt_none_und_warning</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestLadeVgAusZip<br><span class="testname">test_kein_shp_in_zip_gibt_none_und_warning</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestLadeVgAusZip<br><span class="testname">test_invalider_qgslayer_gibt_none_und_warning</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestLadeVgAusZip<br><span class="testname">test_leere_geometrien_geben_none_und_warning</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestLadeVgAusZip<br><span class="testname">test_erfolg_gibt_memory_layer_zurueck</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_lade_zip_none_aborts</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_shape_vg_sofort_ins_projekt_nach_laden</span></td><td>Shape-VG wird unmittelbar nach dem Laden ins Projekt eingefügt.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_shape_vg_wird_bei_abbruch_aus_projekt_entfernt</span></td><td>Shape-VG wird bei Fehler/Abbruch aus dem Projekt entfernt.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_shape_vg_bleibt_im_projekt_bei_erfolg</span></td><td>Bei erfolgreichem Abschluss wird shape_vg NICHT aus dem Projekt entfernt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_flst_none_aborts</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_keine_flurstuecke_selektiert_gibt_warning</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_flaechen_uebereinstimmung_gibt_info_und_kein_dialog</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_abweichung_abbrechen_gibt_shape_vg_zurueck</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_abweichung_detailpruefung_ruft_knickpunkt_pruefung_auf</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_punktort_ta_none_gibt_shape_vg_zurueck_und_zeigt_fehler</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_temp_layer_wird_stets_entfernt</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_bror_layer_ist_stets_none</span></td><td>Dritter Rückgabewert ist im Shape-Workflow immer None (kein BROR).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_bror_geladen_und_zurueckgegeben_wenn_vkz_gesetzt</span></td><td>VKZ gesetzt → verfahrensgebiet_alkis aufgerufen, bror_layer zurückgegeben.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_bror_wird_vor_shape_vg_ins_projekt_eingefuegt</span></td><td>BROR wird VOR shape_vg ins Projekt eingefügt (kein Namenskonflikt).</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_bror_wird_bei_abbruch_aus_projekt_entfernt</span></td><td>BROR und shape_vg werden bei Fehler aus dem Projekt entfernt.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_verfahrensgebiet_alkis_nicht_aufgerufen_wenn_vkz_leer</span></td><td>Leere VKZ → verfahrensgebiet_alkis wird NICHT aufgerufen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_bror_als_erstes_argument_beim_flaechenvergleich</span></td><td>Mit BROR: _vergleiche_flaechen wird (bror, shape_vg, ...) aufgerufen.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestVerfahrensgebietShapeKomplett<br><span class="testname">test_fallback_auf_temp_enriched_wenn_bror_ladeversagen</span></td><td>BROR-Ladeversagen → Fallback: _vergleiche_flaechen mit shape_vg vs temp_enriched.</td><td><span class="pill pill-warn">rot</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_verfahrensgebiet/tests/test_working_tab.py testworkingtab test_set_busy_updates_button_state testworkingtab test_on_verf_layer_changed_valid_sets_variable testworkingtab test_on_verf_layer_changed_none_clears_variable testworkingtab test_handle_verf_alkis_success_path testworkingtab test_handle_verf_alkis_failure_clears_layer_var testworkingtab test_handle_flurst_alkis_first_load_uebernimmt_layer testworkingtab test_handle_flurst_aus_gemarkungen_ruft_flurstueck_alkis_ohne_schluessel_abfrage testworkingtab test_handle_flurst_aus_gemarkungen_abbruch_zeigt_keine_zusaetzliche_meldung testworkingtab test_handle_grenz_alkis_success_sets_haken testworkingtab test_handle_grenz_alkis_none_result_sets_no_haken testworkingtab test_handle_flurst_alkis_success_sets_haken_and_style testworkingtab test_handle_flurst_alkis_existing_layer_keep_path testworkingtab test_handle_flurst_alkis_invalid_input_returns_early testworkingtab test_handle_verfahrensgebiet_from_selection_requires_active_layer testworkingtab test_handle_verfahrensgebiet_from_selection_requires_required_fields testworkingtab test_handle_verfahrensgebiet_from_selection_requires_selection testworkingtab test_handle_verfahrensgebiet_from_selection_new_layer_success testworkingtab test_handle_verfahrensgebiet_from_selection_existing_layer_ergaenzen_dispatch testworkingtab test_handle_verfahrensgebiet_from_selection_existing_layer_entfernen_dispatch testworkingtab test_handle_verfahrensgebiet_from_selection_existing_layer_ersetzen_dispatch testworkingtab test_aus_liste_button_shows_not_implemented_hint testworkingtab test_handle_gem_alkis_service_reachable_adds_layer testworkingtab test_handle_gem_alkis_service_unreachable_shows_warning testworkingtab test_handle_gem_alkis_layer_already_exists_shows_info testhandleverfshape test_status_none_clears_layer_variable testhandleverfshape test_button_always_re_enabled_on_failure testhandleverfshape test_verfahrensnummer_nicht_gesetzt_nein_bricht_ab testhandleverfshape test_verfahrensnummer_nicht_gesetzt_ja_fuehrt_fort testhandleverfshape test_verfahrensnummer_gesetzt_kein_rueckfrage_dialog testhandleverfshape test_success_path_applies_style_and_sets_haken testhandleverfshape test_bror_layer_erhaelt_qml_stil testhandleverfshape test_enriched_layer_already_in_project_not_added_again testhandleverfshape test_busy_state_set_during_execution testzoomimprojektkbs test_alkis_zoom_ueber_zoom_auf_layer testzoomimprojektkbs test_shape_zoom_ueber_zoom_auf_layer" data-hasred="1" data-hasskip="0" data-nodoc="0"><button class="card-toggle" data-target="plugin-sn-verfahrensgebiet-tests-test-working-tab-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Verfahrensgebiet/tests/test_working_tab.py</span><span class="card-meta"><span class="count-total">35 Testfälle</span><span class="cpill cpill-ok">30</span><span class="cpill cpill-warn">5</span><span class="docbadge" title="Anteil mit Docstring">83% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-verfahrensgebiet-tests-test-working-tab-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestWorkingTab <b>24</b></span><span class="gchip" title="">TestHandleVerfShape <b>9</b></span><span class="gchip" title="Zoom auf das neue Verfahrensgebiet rechnet in das KBS der Kartenansicht um (Basis #99).">TestZoomImProjektKbs <b>2</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_working_tab.py"])
|
||
class root rootnode
|
||
root --> g1["TestWorkingTab (24)"]
|
||
class g1 groupnode
|
||
g1 --> t1("set_busy_updates_button_state")
|
||
g1 --> t2("on_verf_layer_changed_valid_sets_variable")
|
||
g1 --> t3("on_verf_layer_changed_none_clears_variable")
|
||
g1 --> t4("handle_verf_alkis_success_path")
|
||
g1 --> t5("handle_verf_alkis_failure_clears_layer_var")
|
||
g1 --> t6("handle_flurst_alkis_first_load_uebernimmt_layer")
|
||
g1 --> t7("handle_flurst_aus_gemarkungen_ruft_flurstueck_alkis_ohne_schluessel_abfrage")
|
||
g1 --> t8("handle_flurst_aus_gemarkungen_abbruch_zeigt_keine_zusaetzliche_meldung")
|
||
g1 --> t9("handle_grenz_alkis_success_sets_haken")
|
||
g1 --> t10("handle_grenz_alkis_none_result_sets_no_haken")
|
||
g1 --> t11("handle_flurst_alkis_success_sets_haken_and_style")
|
||
g1 --> t12("handle_flurst_alkis_existing_layer_keep_path")
|
||
g1 --> t13("handle_flurst_alkis_invalid_input_returns_early")
|
||
g1 --> t14("handle_verfahrensgebiet_from_selection_requires_active_layer")
|
||
g1 --> t15("handle_verfahrensgebiet_from_selection_requires_required_fields")
|
||
g1 --> t16("handle_verfahrensgebiet_from_selection_requires_selection")
|
||
g1 --> t17("handle_verfahrensgebiet_from_selection_new_layer_success")
|
||
g1 --> t18("handle_verfahrensgebiet_from_selection_existing_layer_ergaenzen_dispatch")
|
||
g1 --> t19("handle_verfahrensgebiet_from_selection_existing_layer_entfernen_dispatch")
|
||
g1 --> t20("handle_verfahrensgebiet_from_selection_existing_layer_ersetzen_dispatch")
|
||
g1 --> t21("aus_liste_button_shows_not_implemented_hint")
|
||
g1 --> t22("handle_gem_alkis_service_reachable_adds_layer")
|
||
g1 --> t23("handle_gem_alkis_service_unreachable_shows_warning")
|
||
g1 --> t24("handle_gem_alkis_layer_already_exists_shows_info")
|
||
root --> g2["TestHandleVerfShape (9)"]
|
||
class g2 groupnode
|
||
g2 --> t25("status_none_clears_layer_variable")
|
||
g2 --> t26("button_always_re_enabled_on_failure")
|
||
g2 --> t27("verfahrensnummer_nicht_gesetzt_nein_bricht_ab")
|
||
g2 --> t28("verfahrensnummer_nicht_gesetzt_ja_fuehrt_fort")
|
||
g2 --> t29("verfahrensnummer_gesetzt_kein_rueckfrage_dialog")
|
||
g2 --> t30("success_path_applies_style_and_sets_haken")
|
||
g2 --> t31("bror_layer_erhaelt_qml_stil")
|
||
g2 --> t32("enriched_layer_already_in_project_not_added_again")
|
||
g2 --> t33("busy_state_set_during_execution")
|
||
root --> g3["TestZoomImProjektKbs (2)"]
|
||
class g3 groupnode
|
||
g3 --> t34("alkis_zoom_ueber_zoom_auf_layer")
|
||
g3 --> t35("shape_zoom_ueber_zoom_auf_layer")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 warn
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 warn
|
||
class t10 warn
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 ok
|
||
class t21 ok
|
||
class t22 ok
|
||
class t23 ok
|
||
class t24 ok
|
||
class t25 ok
|
||
class t26 ok
|
||
class t27 warn
|
||
class t28 warn
|
||
class t29 ok
|
||
class t30 ok
|
||
class t31 ok
|
||
class t32 ok
|
||
class t33 ok
|
||
class t34 ok
|
||
class t35 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></tr></thead><tbody><tr><td class="mono">TestWorkingTab<br><span class="testname">test_set_busy_updates_button_state</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_on_verf_layer_changed_valid_sets_variable</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_on_verf_layer_changed_none_clears_variable</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_verf_alkis_success_path</span></td><td>verfahrensgebiet_alkis_komplett → 4-Tupel (enriched, flst, bror, FIRST).</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_verf_alkis_failure_clears_layer_var</span></td><td>Status NONE → Layer-Variable wird auf '' gesetzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_flurst_alkis_first_load_uebernimmt_layer</span></td><td>Erstmaliges Laden über 'Flurstücke laden' fügt den Layer dem Projekt hinzu.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_flurst_aus_gemarkungen_ruft_flurstueck_alkis_ohne_schluessel_abfrage</span></td><td>Der Gemarkungen-Auswahl-Button ruft dieselbe Ladefunktion mit ohne_schluessel_abfrage=True auf (#47).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_flurst_aus_gemarkungen_abbruch_zeigt_keine_zusaetzliche_meldung</span></td><td>Bricht flurstueck_alkis() ab (None, NONE), zeigt der Button keine eigene Meldung – flurstueck_alkis() hat das schon getan (#47).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_grenz_alkis_success_sets_haken</span></td><td>Grenzpunkte erfolgreich geladen → haken_grenz wird gesetzt.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_grenz_alkis_none_result_sets_no_haken</span></td><td>grenzpunkt_alkis liefert (None, None) → kein Haken.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_flurst_alkis_success_sets_haken_and_style</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_flurst_alkis_existing_layer_keep_path</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_flurst_alkis_invalid_input_returns_early</span></td><td>Status NONE (z. B. Nutzerabbruch) → kein Layer, kein Haken.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_verfahrensgebiet_from_selection_requires_active_layer</span></td><td>Kein aktiver Layer → warning, kein Layer wird erstellt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_verfahrensgebiet_from_selection_requires_required_fields</span></td><td>Layer ohne Pflichtfelder → warning, kein Layer wird erstellt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_verfahrensgebiet_from_selection_requires_selection</span></td><td>Keine Flurstück-Auswahl → warning, kein Layer erstellt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_verfahrensgebiet_from_selection_new_layer_success</span></td><td>Erstlauf ohne bestehenden Layer → Layer wird erstellt und hinzugefügt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_verfahrensgebiet_from_selection_existing_layer_ergaenzen_dispatch</span></td><td>Entscheidung 'ergaenzen' → ergaenze_verfahrensgebiet wird aufgerufen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_verfahrensgebiet_from_selection_existing_layer_entfernen_dispatch</span></td><td>Entscheidung 'entfernen' → entferne_aus_verfahrensgebiet wird aufgerufen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_verfahrensgebiet_from_selection_existing_layer_ersetzen_dispatch</span></td><td>Entscheidung 'ersetzen' → alter Layer entfernt, neuer hinzugefügt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_aus_liste_button_shows_not_implemented_hint</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_gem_alkis_service_reachable_adds_layer</span></td><td>Dienst erreichbar → Layer ins Projekt, Stil angewendet, Haken gesetzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_gem_alkis_service_unreachable_shows_warning</span></td><td>Dienst nicht erreichbar (None) → warning, kein addMapLayer.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestWorkingTab<br><span class="testname">test_handle_gem_alkis_layer_already_exists_shows_info</span></td><td>Layer 'Gemarkungen' bereits vorhanden → info, kein erneutes Laden.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHandleVerfShape<br><span class="testname">test_status_none_clears_layer_variable</span></td><td>Status NONE → Layer-Variable wird auf '' gesetzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHandleVerfShape<br><span class="testname">test_button_always_re_enabled_on_failure</span></td><td>Button muss nach Status NONE wieder freigegeben sein (finally).</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHandleVerfShape<br><span class="testname">test_verfahrensnummer_nicht_gesetzt_nein_bricht_ab</span></td><td>Verfahrensnummer leer + Nutzer wählt 'Nein' → Vorgang abgebrochen.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestHandleVerfShape<br><span class="testname">test_verfahrensnummer_nicht_gesetzt_ja_fuehrt_fort</span></td><td>Verfahrensnummer leer + Nutzer wählt 'Ja' → Pipeline wird aufgerufen.</td><td><span class="pill pill-warn">rot</span></td></tr><tr><td class="mono">TestHandleVerfShape<br><span class="testname">test_verfahrensnummer_gesetzt_kein_rueckfrage_dialog</span></td><td>Verfahrensnummer gesetzt → kein ask_yes_no-Dialog.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHandleVerfShape<br><span class="testname">test_success_path_applies_style_and_sets_haken</span></td><td>Erfolg → verfahrensgebiet.qml angewendet, haken_verf gesetzt, success aufgerufen.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHandleVerfShape<br><span class="testname">test_bror_layer_erhaelt_qml_stil</span></td><td>Wenn bror_layer zurückgegeben → BauRaumOderBodenordnungsrecht.qml angewendet.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHandleVerfShape<br><span class="testname">test_enriched_layer_already_in_project_not_added_again</span></td><td>Layer bereits im Projekt → kein erneutes addMapLayer für VG-Layer.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestHandleVerfShape<br><span class="testname">test_busy_state_set_during_execution</span></td><td>Button wird während der Ausführung auf busy gesetzt.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestZoomImProjektKbs<br><span class="testname">test_alkis_zoom_ueber_zoom_auf_layer</span></td><td>Prüft, dass nach dem Laden aus ALKIS über zoom_auf_layer auf das Verfahrensgebiet gezoomt wird und nicht mit der unumgerechneten Layer-Ausdehnung.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestZoomImProjektKbs<br><span class="testname">test_shape_zoom_ueber_zoom_auf_layer</span></td><td>Prüft, dass nach dem Laden aus einem Shape über zoom_auf_layer auf das Verfahrensgebiet gezoomt wird und nicht mit der unumgerechneten Layer-Ausdehnung.</td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article></div>
|
||
</section>
|
||
|
||
|
||
<section class="pkg-section" id="pkg-sn_plan41">
|
||
<div class="pkg-head">
|
||
<div>
|
||
<h2>sn_plan41</h2>
|
||
<p class="pkg-sub">Fachplugin · Ordner <span class="mono">Plugin_SN_Plan41</span> · 5 Testdateien · 44 Testfälle</p>
|
||
</div>
|
||
<div class="pkg-bar" 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>
|
||
</div>
|
||
</div>
|
||
<div class="card-grid"><article class="filecard" data-search="plugin_sn_plan41/tests/test_listenauswerter.py testlistenauswerter test_validate_rows_accepts_valid_row_and_normalizes_provider testlistenauswerter test_validate_rows_rejects_missing_required_fields testlistenauswerter test_validate_rows_sets_stildatei_none_on_style_failure testlistenauswerter test_validate_rows_handles_non_mapping_rows_edge_case" data-hasred="0" data-hasskip="0" data-nodoc="1"><button class="card-toggle" data-target="plugin-sn-plan41-tests-test-listenauswerter-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Plan41/tests/test_listenauswerter.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">0% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-plan41-tests-test-listenauswerter-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestListenauswerter <b>4</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_listenauswerter.py"])
|
||
class root rootnode
|
||
root --> g1["TestListenauswerter (4)"]
|
||
class g1 groupnode
|
||
g1 --> t1("validate_rows_accepts_valid_row_and_normalizes_provider")
|
||
g1 --> t2("validate_rows_rejects_missing_required_fields")
|
||
g1 --> t3("validate_rows_sets_stildatei_none_on_style_failure")
|
||
g1 --> t4("validate_rows_handles_non_mapping_rows_edge_case")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 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></tr></thead><tbody><tr><td class="mono">TestListenauswerter<br><span class="testname">test_validate_rows_accepts_valid_row_and_normalizes_provider</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestListenauswerter<br><span class="testname">test_validate_rows_rejects_missing_required_fields</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestListenauswerter<br><span class="testname">test_validate_rows_sets_stildatei_none_on_style_failure</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestListenauswerter<br><span class="testname">test_validate_rows_handles_non_mapping_rows_edge_case</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_plan41/tests/test_tab_a_logic.py testtabalogic test_verfahrens_db_set_and_load_roundtrip testtabalogic test_verfahrens_db_clear testtabalogic test_linkliste_set_and_load_existing_path testtabalogic test_linkliste_load_returns_none_when_file_missing testtabalogic test_resolve_linkliste_empty_uses_standard_and_persists testtabalogic test_resolve_linkliste_returns_none_when_pruefmanager_rejects testtabalogic test_resolve_raumfilter_without_filter_returns_none testtabalogic test_resolve_raumfilter_verfahrensgebiet_uses_layer_lookup testtabalogic test_extract_datenabruf_error_maps_merges_reason_maps" data-hasred="0" data-hasskip="0" data-nodoc="1"><button class="card-toggle" data-target="plugin-sn-plan41-tests-test-tab-a-logic-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Plan41/tests/test_tab_a_logic.py</span><span class="card-meta"><span class="count-total">9 Testfälle</span><span class="cpill cpill-ok">9</span><span class="docbadge" title="Anteil mit Docstring">0% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-plan41-tests-test-tab-a-logic-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestTabALogic <b>9</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_tab_a_logic.py"])
|
||
class root rootnode
|
||
root --> g1["TestTabALogic (9)"]
|
||
class g1 groupnode
|
||
g1 --> t1("verfahrens_db_set_and_load_roundtrip")
|
||
g1 --> t2("verfahrens_db_clear")
|
||
g1 --> t3("linkliste_set_and_load_existing_path")
|
||
g1 --> t4("linkliste_load_returns_none_when_file_missing")
|
||
g1 --> t5("resolve_linkliste_empty_uses_standard_and_persists")
|
||
g1 --> t6("resolve_linkliste_returns_none_when_pruefmanager_rejects")
|
||
g1 --> t7("resolve_raumfilter_without_filter_returns_none")
|
||
g1 --> t8("resolve_raumfilter_verfahrensgebiet_uses_layer_lookup")
|
||
g1 --> t9("extract_datenabruf_error_maps_merges_reason_maps")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 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></tr></thead><tbody><tr><td class="mono">TestTabALogic<br><span class="testname">test_verfahrens_db_set_and_load_roundtrip</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTabALogic<br><span class="testname">test_verfahrens_db_clear</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTabALogic<br><span class="testname">test_linkliste_set_and_load_existing_path</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTabALogic<br><span class="testname">test_linkliste_load_returns_none_when_file_missing</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTabALogic<br><span class="testname">test_resolve_linkliste_empty_uses_standard_and_persists</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTabALogic<br><span class="testname">test_resolve_linkliste_returns_none_when_pruefmanager_rejects</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTabALogic<br><span class="testname">test_resolve_raumfilter_without_filter_returns_none</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTabALogic<br><span class="testname">test_resolve_raumfilter_verfahrensgebiet_uses_layer_lookup</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTabALogic<br><span class="testname">test_extract_datenabruf_error_maps_merges_reason_maps</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_plan41/tests/test_tab_a_preconditions.py testtabapreconditions test_get_verfahrensgebiet_layer_shows_hint_when_layer_id_missing testtabapreconditions test_get_verfahrensgebiet_layer_shows_hint_when_layer_not_in_project testtabapreconditions test_pipeline_aborts_and_shows_hint_when_verfahrensgebiet_missing" data-hasred="0" data-hasskip="0" data-nodoc="1"><button class="card-toggle" data-target="plugin-sn-plan41-tests-test-tab-a-preconditions-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Plan41/tests/test_tab_a_preconditions.py</span><span class="card-meta"><span class="count-total">3 Testfälle</span><span class="cpill cpill-ok">3</span><span class="docbadge" title="Anteil mit Docstring">0% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-plan41-tests-test-tab-a-preconditions-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestTabAPreconditions <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_tab_a_preconditions.py"])
|
||
class root rootnode
|
||
root --> g1["TestTabAPreconditions (3)"]
|
||
class g1 groupnode
|
||
g1 --> t1("get_verfahrensgebiet_layer_shows_hint_when_layer_id_missing")
|
||
g1 --> t2("get_verfahrensgebiet_layer_shows_hint_when_layer_not_in_project")
|
||
g1 --> t3("pipeline_aborts_and_shows_hint_when_verfahrensgebiet_missing")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 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></tr></thead><tbody><tr><td class="mono">TestTabAPreconditions<br><span class="testname">test_get_verfahrensgebiet_layer_shows_hint_when_layer_id_missing</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTabAPreconditions<br><span class="testname">test_get_verfahrensgebiet_layer_shows_hint_when_layer_not_in_project</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTabAPreconditions<br><span class="testname">test_pipeline_aborts_and_shows_hint_when_verfahrensgebiet_missing</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_plan41/tests/test_tab_a_ui.py testtabaui test_tab_a_callbacks_can_be_called_without_crash testtabaui test_tab_a_raumfilter_callback_persists_value testtabaui test_set_services_initializes_logic_and_injects_data_grabber" data-hasred="1" data-hasskip="0" data-nodoc="1"><button class="card-toggle" data-target="plugin-sn-plan41-tests-test-tab-a-ui-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Plan41/tests/test_tab_a_ui.py</span><span class="card-meta"><span class="count-total">3 Testfälle</span><span class="cpill cpill-ok">2</span><span class="cpill cpill-warn">1</span><span class="docbadge" title="Anteil mit Docstring">0% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-plan41-tests-test-tab-a-ui-py"><p class="filedesc">— (Docstring fehlt)</p><div class="gchips"><span class="gchip" title="">TestTabAUI <b>3</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_tab_a_ui.py"])
|
||
class root rootnode
|
||
root --> g1["TestTabAUI (3)"]
|
||
class g1 groupnode
|
||
g1 --> t1("tab_a_callbacks_can_be_called_without_crash")
|
||
g1 --> t2("tab_a_raumfilter_callback_persists_value")
|
||
g1 --> t3("set_services_initializes_logic_and_injects_data_grabber")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 warn
|
||
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></tr></thead><tbody><tr><td class="mono">TestTabAUI<br><span class="testname">test_tab_a_callbacks_can_be_called_without_crash</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTabAUI<br><span class="testname">test_tab_a_raumfilter_callback_persists_value</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestTabAUI<br><span class="testname">test_set_services_initializes_logic_and_injects_data_grabber</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-warn">rot</span></td></tr></tbody></table></div></article><article class="filecard" data-search="plugin_sn_plan41/tests/test_vln_api_logic.py testvlnapilogicavailability test_is_available_reflects_import_state testvlnapilogicavailability test_is_available_false_when_vln_karten_missing testvlnapilogiccredentials test_save_api_key_calls_qsettings testvlnapilogiccredentials test_clear_api_key_calls_remove testvlnapilogiccredentials test_load_stored_credentials_returns_api_key_and_mail testvlnapilogiccredentials test_load_stored_credentials_returns_none_for_empty testvlnapilogiclogin test_login_sets_client_and_saves_key testvlnapilogiclogin test_login_raises_runtime_error_without_qgis_modules testvlnapilogiclogin test_login_propagates_api_error testvlnapilogiclogin test_logout_clears_client testvlnapilogiclogin test_is_authenticated_false_after_logout testvlnapilogiclogin test_handle_session_expired_clears_key_and_client testvlnapilogicverfahren test_get_verfahren_raises_when_not_authenticated testvlnapilogicverfahren test_get_verfahren_delegates_to_client testvlnapilogicvkz test_load_stored_vkz_reads_from_project testvlnapilogicvkz test_load_stored_vkz_returns_none_for_empty testvlnapilogicvkz test_save_vkz_writes_to_project testvlnapilogicvkz test_save_vkz_does_nothing_for_none testvlnapilogicloadp41 test_load_p41_raises_without_vln_karten testvlnapilogicloadp41 test_load_p41_applies_styles_to_polygon_and_line_layers testvlnapilogicloadp41 test_load_p41_no_style_for_point_layer testvlnapilogicupload test_upload_returns_error_for_layer_without_api_path testvlnapilogicupload test_upload_returns_error_for_none_layer testvlnapilogicupload test_upload_returns_false_without_qgis_modules testvlnapilogicupload test_upload_calls_save_feature_collection" data-hasred="0" data-hasskip="0" data-nodoc="1"><button class="card-toggle" data-target="plugin-sn-plan41-tests-test-vln-api-logic-py" aria-expanded="false"><span class="card-path mono">Plugin_SN_Plan41/tests/test_vln_api_logic.py</span><span class="card-meta"><span class="count-total">25 Testfälle</span><span class="cpill cpill-ok">25</span><span class="docbadge" title="Anteil mit Docstring">4% beschrieben</span><span class="chev" aria-hidden="true">▾</span></span></button><div class="card-body" id="body-plugin-sn-plan41-tests-test-vln-api-logic-py"><p class="filedesc">Tests für sn_plan41/modules/vln_api_logic.py</p><div class="gchips"><span class="gchip" title="">TestVlnApiLogicAvailability <b>2</b></span><span class="gchip" title="">TestVlnApiLogicCredentials <b>4</b></span><span class="gchip" title="">TestVlnApiLogicLogin <b>6</b></span><span class="gchip" title="">TestVlnApiLogicVerfahren <b>2</b></span><span class="gchip" title="">TestVlnApiLogicVkz <b>4</b></span><span class="gchip" title="">TestVlnApiLogicLoadP41 <b>3</b></span><span class="gchip" title="">TestVlnApiLogicUpload <b>4</b></span></div><div class="diagram-wrap"><pre class="mermaid">flowchart TD
|
||
root(["test_vln_api_logic.py"])
|
||
class root rootnode
|
||
root --> g1["TestVlnApiLogicAvailability (2)"]
|
||
class g1 groupnode
|
||
g1 --> t1("is_available_reflects_import_state")
|
||
g1 --> t2("is_available_false_when_vln_karten_missing")
|
||
root --> g2["TestVlnApiLogicCredentials (4)"]
|
||
class g2 groupnode
|
||
g2 --> t3("save_api_key_calls_qsettings")
|
||
g2 --> t4("clear_api_key_calls_remove")
|
||
g2 --> t5("load_stored_credentials_returns_api_key_and_mail")
|
||
g2 --> t6("load_stored_credentials_returns_none_for_empty")
|
||
root --> g3["TestVlnApiLogicLogin (6)"]
|
||
class g3 groupnode
|
||
g3 --> t7("login_sets_client_and_saves_key")
|
||
g3 --> t8("login_raises_runtime_error_without_qgis_modules")
|
||
g3 --> t9("login_propagates_api_error")
|
||
g3 --> t10("logout_clears_client")
|
||
g3 --> t11("is_authenticated_false_after_logout")
|
||
g3 --> t12("handle_session_expired_clears_key_and_client")
|
||
root --> g4["TestVlnApiLogicVerfahren (2)"]
|
||
class g4 groupnode
|
||
g4 --> t13("get_verfahren_raises_when_not_authenticated")
|
||
g4 --> t14("get_verfahren_delegates_to_client")
|
||
root --> g5["TestVlnApiLogicVkz (4)"]
|
||
class g5 groupnode
|
||
g5 --> t15("load_stored_vkz_reads_from_project")
|
||
g5 --> t16("load_stored_vkz_returns_none_for_empty")
|
||
g5 --> t17("save_vkz_writes_to_project")
|
||
g5 --> t18("save_vkz_does_nothing_for_none")
|
||
root --> g6["TestVlnApiLogicLoadP41 (3)"]
|
||
class g6 groupnode
|
||
g6 --> t19("load_p41_raises_without_vln_karten")
|
||
g6 --> t20("load_p41_applies_styles_to_polygon_and_line_layers")
|
||
g6 --> t21("load_p41_no_style_for_point_layer")
|
||
root --> g7["TestVlnApiLogicUpload (4)"]
|
||
class g7 groupnode
|
||
g7 --> t22("upload_returns_error_for_layer_without_api_path")
|
||
g7 --> t23("upload_returns_error_for_none_layer")
|
||
g7 --> t24("upload_returns_false_without_qgis_modules")
|
||
g7 --> t25("upload_calls_save_feature_collection")
|
||
class t1 ok
|
||
class t2 ok
|
||
class t3 ok
|
||
class t4 ok
|
||
class t5 ok
|
||
class t6 ok
|
||
class t7 ok
|
||
class t8 ok
|
||
class t9 ok
|
||
class t10 ok
|
||
class t11 ok
|
||
class t12 ok
|
||
class t13 ok
|
||
class t14 ok
|
||
class t15 ok
|
||
class t16 ok
|
||
class t17 ok
|
||
class t18 ok
|
||
class t19 ok
|
||
class t20 ok
|
||
class t21 ok
|
||
class t22 ok
|
||
class t23 ok
|
||
class t24 ok
|
||
class t25 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></tr></thead><tbody><tr><td class="mono">TestVlnApiLogicAvailability<br><span class="testname">test_is_available_reflects_import_state</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicAvailability<br><span class="testname">test_is_available_false_when_vln_karten_missing</span></td><td>Wenn VLN_KARTEN_AVAILABLE=False, liefert is_available() False.</td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicCredentials<br><span class="testname">test_save_api_key_calls_qsettings</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicCredentials<br><span class="testname">test_clear_api_key_calls_remove</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicCredentials<br><span class="testname">test_load_stored_credentials_returns_api_key_and_mail</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicCredentials<br><span class="testname">test_load_stored_credentials_returns_none_for_empty</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicLogin<br><span class="testname">test_login_sets_client_and_saves_key</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicLogin<br><span class="testname">test_login_raises_runtime_error_without_qgis_modules</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicLogin<br><span class="testname">test_login_propagates_api_error</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicLogin<br><span class="testname">test_logout_clears_client</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicLogin<br><span class="testname">test_is_authenticated_false_after_logout</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicLogin<br><span class="testname">test_handle_session_expired_clears_key_and_client</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicVerfahren<br><span class="testname">test_get_verfahren_raises_when_not_authenticated</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicVerfahren<br><span class="testname">test_get_verfahren_delegates_to_client</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicVkz<br><span class="testname">test_load_stored_vkz_reads_from_project</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicVkz<br><span class="testname">test_load_stored_vkz_returns_none_for_empty</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicVkz<br><span class="testname">test_save_vkz_writes_to_project</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicVkz<br><span class="testname">test_save_vkz_does_nothing_for_none</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicLoadP41<br><span class="testname">test_load_p41_raises_without_vln_karten</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicLoadP41<br><span class="testname">test_load_p41_applies_styles_to_polygon_and_line_layers</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicLoadP41<br><span class="testname">test_load_p41_no_style_for_point_layer</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicUpload<br><span class="testname">test_upload_returns_error_for_layer_without_api_path</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicUpload<br><span class="testname">test_upload_returns_error_for_none_layer</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicUpload<br><span class="testname">test_upload_returns_false_without_qgis_modules</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr><tr><td class="mono">TestVlnApiLogicUpload<br><span class="testname">test_upload_calls_save_feature_collection</span></td><td><span class="nodoc">— (Docstring fehlt)</span></td><td><span class="pill pill-ok">grün</span></td></tr></tbody></table></div></article></div>
|
||
</section>
|
||
|
||
<footer>Erzeugt von <span class="mono">python scripts/testkatalog.py</span> aus den unittest-Suiten der sn_*-Plugins. Diagramme gruppieren Testfälle je Testdatei nach <span class="mono">unittest.TestCase</span>-Klasse; Farbe zeigt den Baseline-Status (grün / rot / übersprungen), nicht die fachliche Wichtigkeit.</footer>
|
||
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.9.1/mermaid.min.js"></script>
|
||
<script>
|
||
(function(){
|
||
function initMermaid(){
|
||
try{
|
||
mermaid.initialize({ startOnLoad:false, theme:"base", securityLevel:"loose",
|
||
themeVariables:{ fontFamily:'"IBM Plex Mono", monospace', fontSize:'12.5px' } });
|
||
mermaid.run({ querySelector: 'pre.mermaid' }).then(setupToggles).catch(function(e){
|
||
console.error('mermaid render failed', e); setupToggles();
|
||
});
|
||
}catch(e){ console.error(e); setupToggles(); }
|
||
}
|
||
function setupToggles(){
|
||
document.querySelectorAll('.card-toggle').forEach(function(btn){
|
||
var card = btn.closest('.filecard');
|
||
var body = card.querySelector('.card-body');
|
||
if (!body.querySelector('.card-body-inner')){
|
||
var inner = document.createElement('div');
|
||
inner.className = 'card-body-inner';
|
||
while (body.firstChild) inner.appendChild(body.firstChild);
|
||
body.appendChild(inner);
|
||
}
|
||
btn.addEventListener('click', function(){
|
||
var isOpen = card.classList.toggle('open');
|
||
btn.setAttribute('aria-expanded', isOpen ? 'true':'false');
|
||
body.style.maxHeight = isOpen ? (body.scrollHeight + 40) + 'px' : '0px';
|
||
});
|
||
});
|
||
}
|
||
function applyFilters(){
|
||
var active = document.querySelector('.chip[aria-pressed="true"]').dataset.filter;
|
||
var q = document.getElementById('searchInput').value.trim().toLowerCase();
|
||
document.querySelectorAll('.filecard').forEach(function(card){
|
||
var passFilter = active === 'all' || card.dataset[active] === '1';
|
||
var passSearch = !q || card.dataset.search.indexOf(q) !== -1;
|
||
card.hidden = !(passFilter && passSearch);
|
||
});
|
||
document.querySelectorAll('.pkg-section').forEach(function(sec){
|
||
sec.hidden = !sec.querySelector('.filecard:not([hidden])');
|
||
});
|
||
}
|
||
document.querySelectorAll('.chip').forEach(function(chip){
|
||
chip.addEventListener('click', function(){
|
||
document.querySelectorAll('.chip').forEach(function(c){ c.setAttribute('aria-pressed','false'); });
|
||
chip.setAttribute('aria-pressed','true');
|
||
applyFilters();
|
||
});
|
||
});
|
||
document.getElementById('searchInput').addEventListener('input', applyFilters);
|
||
if (document.readyState === 'loading'){ document.addEventListener('DOMContentLoaded', initMermaid); }
|
||
else { initMermaid(); }
|
||
})();
|
||
</script>
|
||
|