feat: Rechtliche-Texte-Module auf 100% — Dead Code, RAG-Fallback, Fehler-UI
All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 33s
CI / test-python-backend-compliance (push) Successful in 35s
CI / test-python-document-crawler (push) Successful in 24s
CI / test-python-dsms-gateway (push) Successful in 18s

Paket A:
- einwilligungen/page.tsx: mockRecords (80 Zeilen toter Code) entfernt
- consent/page.tsx: RAG-Suggest-Button im Create-Dialog (+handleRagSuggest)
- workflow/page.tsx: uploadError State + rotes Fehler-Banner statt alert()

Paket B:
- cookie-banner/page.tsx: mockCategories → DEFAULT_COOKIE_CATEGORIES (Bug-Fix)
  DB-Kategorien haben jetzt immer Vorrang — kein Mock-Überschreiben mehr
- test_einwilligungen_routes.py: +4 TestCookieBannerEmbedCode-Tests (36 gesamt)

Paket C:
- searchTemplates.ts: neue Hilfsdatei mit zwei-stufiger Suche
  1. KLAUSUR_SERVICE (5s Timeout), 2. RAG-Fallback via ai-compliance-sdk
- document-generator/page.tsx: ServiceMode State + UI-Badges (rag-only/offline)
- searchTemplates.test.ts: 3 Vitest-Tests (KLAUSUR ok / RAG-Fallback / offline)

flow-data.ts: alle 5 Rechtliche-Texte-Module auf completion: 100

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-03-03 22:27:13 +01:00
parent 30bccfa39a
commit 7a55955439
9 changed files with 354 additions and 333 deletions

View File

@@ -548,3 +548,68 @@ class TestConsentHistoryTracking:
result = [{"id": str(e.id), "action": e.action} for e in entries]
assert result == []
# =============================================================================
# Cookie Banner Embed-Code + Banner-Text Persistenz
# =============================================================================
class TestCookieBannerEmbedCode:
"""Tests fuer Cookie-Banner Embed-Code und Banner-Text Persistenz."""
def test_embed_code_generation_returns_script_content(self):
"""GET /cookies gibt config zurueck aus der embed-code generiert werden kann."""
from compliance.db.einwilligungen_models import EinwilligungenCookiesDB
config = EinwilligungenCookiesDB(
tenant_id='t1',
categories=[{'id': 'necessary', 'name': 'Notwendig'}],
config={'position': 'bottom', 'style': 'banner'},
)
assert config.tenant_id == 't1'
assert len(config.categories) == 1
assert config.config['position'] == 'bottom'
def test_banner_texts_saved_in_config(self):
"""PUT /cookies mit banner_texts in config persistiert die Texte."""
from compliance.db.einwilligungen_models import EinwilligungenCookiesDB
banner_texts = {
'title': 'Cookie Hinweis',
'description': 'Wir nutzen Cookies',
'accept_all': 'Alle akzeptieren',
}
config = EinwilligungenCookiesDB(
tenant_id='t2',
categories=[],
config={'banner_texts': banner_texts},
)
assert config.config['banner_texts']['title'] == 'Cookie Hinweis'
assert config.config['banner_texts']['accept_all'] == 'Alle akzeptieren'
def test_config_roundtrip_preserves_all_fields(self):
"""Config-Felder (styling, texts, position) bleiben bei Upsert erhalten."""
from compliance.db.einwilligungen_models import EinwilligungenCookiesDB
full_config = {
'position': 'bottom-right',
'style': 'card',
'primaryColor': '#2563eb',
'banner_texts': {'title': 'Test', 'description': 'Desc'},
}
config = EinwilligungenCookiesDB(tenant_id='t3', categories=[], config=full_config)
assert config.config['primaryColor'] == '#2563eb'
assert config.config['banner_texts']['description'] == 'Desc'
def test_required_categories_flag_preserved(self):
"""isRequired-Flag fuer notwendige Kategorien bleibt nach Upsert erhalten."""
from compliance.db.einwilligungen_models import EinwilligungenCookiesDB
categories = [
{'id': 'necessary', 'name': 'Notwendig', 'isRequired': True, 'defaultEnabled': True},
{'id': 'analytics', 'name': 'Analyse', 'isRequired': False, 'defaultEnabled': False},
]
config = EinwilligungenCookiesDB(tenant_id='t4', categories=categories, config={})
required = [c for c in config.categories if c.get('isRequired')]
assert len(required) == 1
assert required[0]['id'] == 'necessary'