"""DSEAgent — kuratierte Art-13/14-Checkliste (kein Library-Firehose).""" from __future__ import annotations import asyncio from compliance.services.specialist_agents import REGISTRY, AgentInput def _run(text: str): return asyncio.run( REGISTRY.get("dse").evaluate(AgentInput(doc_type="dse", text=text))) def test_dse_agent_registered(): assert REGISTRY.get("dse") is not None def test_dse_detects_core_obligations(): text = ( "Datenschutzerklaerung. Verantwortlich im Sinne der DSGVO ist die " "Muster GmbH, Musterstrasse 1, 12345 Berlin. E-Mail: info@muster.de. " "Datenschutzbeauftragter: dsb@muster.de. Zwecke der Verarbeitung und " "Rechtsgrundlage Art. 6 Abs. 1. Empfaenger Ihrer Daten. Speicherdauer " "der Daten. Ihre Rechte: Auskunft, Loeschung, Widerspruch, Beschwerde " "bei der Aufsichtsbehoerde. ") * 3 out = _run(text) assert out.agent == "dse" assert out.mc_total == 33 # ART13_CHECKLIST komplett ok = [c.label for c in out.mc_coverage if c.status == "ok"] assert any("Verantwortlich" in lbl for lbl in ok) assert any("Rechtsgrundlage" in lbl for lbl in ok) def test_dse_missing_obligations_are_findings(): out = _run("Lorem ipsum dolor sit amet consectetur adipiscing elit. " * 6) assert out.findings assert any(f.severity == "HIGH" for f in out.findings) def test_dse_short_text_skips(): out = _run("zu kurz") assert out.confidence == 0.0 assert all(c.status == "skipped" for c in out.mc_coverage)