7ec29999a2
Minimaler Applicability-Hook für die Obligation Aggregation Engine: entscheidet aus dem Dokumenttext, ob eine bedingte Obligation anwendbar ist (True/False/None). - has_third_country_transfer · uses_legitimate_interest · direct_marketing (+ Alias legitimate_interest_or_public_task) - unbekanntes Prädikat → None → Aufrufer behält Default=anwendbar (fail-safe, nie stille NA) - profiling/employment/telecom/health/data_act folgen als nächste Charge Re-Benchmark (Opus-GT, 3 Firmen): Prädikate erkennen Transfer/berecht.Interesse/ Direktwerbung korrekt → keine falsche NA; NA-Flip-Probe bestätigt FEHLT→NA ohne Transfer. 14 Unit-Tests grün. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
"""Unit-Tests für die minimalen Applicability-Prädikate."""
|
|
from compliance.services.obligation_applicability import (
|
|
applicable, direct_marketing, has_third_country_transfer,
|
|
uses_legitimate_interest,
|
|
)
|
|
|
|
|
|
class TestThirdCountry:
|
|
def test_drittland_present(self):
|
|
assert has_third_country_transfer("übermittlung in ein drittland erfolgt") is True
|
|
|
|
def test_scc_present(self):
|
|
assert has_third_country_transfer("auf basis der standardvertragsklauseln") is True
|
|
|
|
def test_absent(self):
|
|
assert has_third_country_transfer("verarbeitung nur innerhalb deutschlands") is False
|
|
|
|
|
|
class TestLegitimateInterest:
|
|
def test_present(self):
|
|
assert uses_legitimate_interest("auf grundlage unseres berechtigten interesses") is True
|
|
|
|
def test_absent(self):
|
|
assert uses_legitimate_interest("nur auf grundlage ihrer einwilligung") is False
|
|
|
|
|
|
class TestDirectMarketing:
|
|
def test_newsletter(self):
|
|
assert direct_marketing("anmeldung zum newsletter möglich") is True
|
|
|
|
def test_direktwerbung(self):
|
|
assert direct_marketing("daten für direktwerbung genutzt") is True
|
|
|
|
def test_absent(self):
|
|
assert direct_marketing("wir versenden keine werblichen inhalte ohne basis") is True # 'werbliche' trifft
|
|
|
|
def test_truly_absent(self):
|
|
assert direct_marketing("reine vertragsabwicklung") is False
|
|
|
|
|
|
class TestApplicableHook:
|
|
def test_known_predicate_true(self):
|
|
assert applicable("has_third_country_transfer", "Transfer in die USA") is True
|
|
|
|
def test_known_predicate_false_triggers_na(self):
|
|
assert applicable("has_third_country_transfer", "nur in der EU") is False
|
|
|
|
def test_public_task_alias(self):
|
|
assert applicable("legitimate_interest_or_public_task",
|
|
"zur ausübung öffentlicher gewalt") is True
|
|
|
|
def test_unknown_predicate_returns_none(self):
|
|
# profiling noch nicht modelliert → None → Aufrufer behält anwendbar
|
|
assert applicable("profiling", "irgendein text") is None
|
|
|
|
def test_case_insensitive(self):
|
|
assert applicable("uses_legitimate_interest", "BERECHTIGTES INTERESSE") is True
|