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:
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user