fix(consent-tester): Edge-Case-Befunde auch im no-banner-Frühreturn

#1/#2 (kein-Banner-affirmativ) feuerte nicht, weil der no-banner-Pfad bei
Zeile 220 früh zurückkehrt — vor dem Edge-Case-Block am Funktionsende.
Logik in _apply_edge_case_findings extrahiert und an BEIDEN Return-Pfaden
aufgerufen (Früh-Return + Ende). Damit greift #1 jetzt auf statischen Seiten.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-06-12 19:55:42 +02:00
parent c2422138e6
commit 2b928dcb33
+25 -21
View File
@@ -83,6 +83,29 @@ class ConsentTestResult:
banner_screenshot_b64: str = "" banner_screenshot_b64: str = ""
def _apply_edge_case_findings(result) -> None:
"""Edge-Case-Befunde nach dem Scan — an ALLEN Return-Pfaden aufrufen (auch
im no-banner-Fruehreturn): #1/#2 kein-Banner-affirmativ (statisch / nur
technisch notwendig → konform, inkl. Geo-Caveat) + #3 Non-Cookie-Tracking
(Pixel/Fingerprinting; §25 gilt auch ohne Cookies)."""
try:
from services.banner_text_checker import (
build_no_banner_finding, detect_non_cookie_tracking,
build_non_cookie_tracking_finding,
)
if (not result.banner_detected and not result.before_violations
and not result.before_tracking):
result.banner_text_violations.append(
build_no_banner_finding(result.banner_has_dse_link))
nct = detect_non_cookie_tracking(
(result.before_scripts or []) + (result.accept_scripts or []))
if nct:
result.banner_text_violations.append(
build_non_cookie_tracking_finding(nct))
except Exception as e:
logger.warning("Edge-case findings skipped: %s", e)
async def run_consent_test( async def run_consent_test(
url: str, wait_secs: int = 10, categories: list[str] | None = None, url: str, wait_secs: int = 10, categories: list[str] | None = None,
) -> ConsentTestResult: ) -> ConsentTestResult:
@@ -217,6 +240,7 @@ async def run_consent_test(
if not banner.detected: if not banner.detected:
logger.info("No consent banner detected — skipping Phase B/C") logger.info("No consent banner detected — skipping Phase B/C")
await browser.close() await browser.close()
_apply_edge_case_findings(result)
return result return result
# ── Phase B: After rejecting ───────────────────────── # ── Phase B: After rejecting ─────────────────────────
@@ -541,27 +565,7 @@ async def run_consent_test(
len(result.category_tests), len(result.cmp_payloads), len(result.category_tests), len(result.cmp_payloads),
) )
# Edge-Cases: kein Banner affirmativ einordnen (#1/#2) + Non-Cookie-Tracking (#3). _apply_edge_case_findings(result)
try:
from services.banner_text_checker import (
build_no_banner_finding, detect_non_cookie_tracking,
build_non_cookie_tracking_finding,
)
# #1/#2: KEIN Banner + KEIN Tracking vor Consent → konform (statisch /
# nur technisch notwendig), nicht still "Banner fehlt". Inkl. Geo-Caveat.
if (not result.banner_detected and not result.before_violations
and not result.before_tracking):
result.banner_text_violations.append(
build_no_banner_finding(result.banner_has_dse_link))
# #3: Pixel/Fingerprinting (cookieloses Tracking) → §25 gilt auch ohne Cookies.
_nct = detect_non_cookie_tracking(
(result.before_scripts or []) + (result.accept_scripts or []))
if _nct:
result.banner_text_violations.append(
build_non_cookie_tracking_finding(_nct))
except Exception as e:
logger.warning("Edge-case findings skipped: %s", e)
return result return result