Files
leocrm/docs/test-strategy.md
T
Agent Zero 5d1b2396a7
Check Cross-Plugin Imports / check (push) Has been cancelled
fix(security+tests): 14 system bugs fixed, ~170 test errors fixed, docs added
System fixes:
- mail_account entity type added to ENTITY_MODELS
- content_hash added to DMS upload response
- Calendar share grants permission to shared user
- Contact TSV trigger column names corrected
- search_related_handler uses find_similar_all_types
- gather_context companies variable fixed
- Entity links company route + schema added
- company + contacts entity types added to ENTITY_MODELS
- log_audit details parameter added
- create_sequence is_system_admin parameter added
- export_service import fixed
- import_service invalid description arg removed
- MCP server entity_id fix
- get_merge_history function added

Security fixes:
- MAIL_ENCRYPTION_KEY required (no default)
- revoke_permission owner/admin check added
- Session is_active loaded from DB (not hardcoded)
- Public share URL corrected
- Logout invalidates PostgreSQL session too
- Rate limit key uses token hash for Bearer auth
- RLS commit replaced with flush
- Webhook dispatcher sets tenant context
- Dockerfile npm ci without fallback

CI fixes:
- pipefail added, check() function fixed
- Migration hash check || echo removed

Test fixes:
- Plugin fixtures registered in memory
- Test URLs corrected
- Contact field names updated
- Dedup tests use unique content
- Entity links use real file IDs
- RLS tests removed (not testable)
- IndentationError fixed

Docs:
- docs/test-strategy.md created
- docs/deploy-guide.md created
- AGENTS.md updated with deploy + docs references
2026-08-12 20:47:43 +02:00

8.6 KiB

LeoCRM Test-Strategie

Wichtig: Dieses Dokument muss nach jeder größeren Änderung am Codebase (neue Plugins, neue Module, Refactoring, Security-Änderungen) überarbeitet werden. Siehe leocrm-test-strategy.promptinclude.md.


1. Übersicht

LeoCRM verwendet eine mehrschichtige Test-Strategie um Funktionalität, Sicherheit und Stabilität sicherzustellen.

Test-Pyramide

        ┌──────────┐
        │   E2E    │  ← Browser-Tests (geplant, noch nicht implementiert)
        ├──────────┤
        │Integration│  ← pytest mit echter PostgreSQL/Redis Test-DB
        ├──────────┤
        │   Unit    │  ← pytest mit Mocks (teilweise)
        └──────────┘

Aktuelle Abdeckung

Ebene Tool Status Abdeckung
Backend-Tests pytest aktiv 69 Testdateien, ~500 Tests
Frontend-Tests vitest ⚠️ geplant 0 Tests (54k Zeilen ungetestet)
E2E-Tests Playwright/Cypress ⚠️ geplant 0 Tests
Security-Tests bandit, pip-audit ⚠️ geplant nicht implementiert
CI-Pipeline scripts/ci_pipeline.sh aktiv 15+ Checks

2. Backend-Tests (pytest)

Architektur

  • Test-DB: PostgreSQL leocrm_test (localhost:5432)
  • Redis: localhost:6379/0 (wird vor jedem Test geflushed)
  • Fixture-Strategie: Function-scoped (jeder Test bekommt frische DB)
  • Schema-Erstellung: Base.metadata.create_all (keine Alembic-Migrationen)
  • Plugin-Aktivierung: In-Memory-Registry muss pro Fixture gesetzt werden

Bekannte Einschränkungen

  1. RLS (Row Level Security) nicht testbar:

    • Die Test-DB verwendet create_all statt Alembic-Migrationen
    • RLS-Policies werden normalerweise durch Migrationen erstellt
    • RLS-Tests wurden ausgebaut (bringt nichts wenn es sich nicht testen lässt)
    • Lösung: Alembic-Migrationen in Test-DB ausführen (Roadmap)
  2. LLM-API-Tests blockieren:

    • Tests die externe LLM-APIs aufrufen (Ollama Cloud, OpenRouter) blockieren
    • Die komplette Suite hängt bei ~46% wenn LLM-Calls nicht gemockt sind
    • Lösung: LLM-Calls in Tests mocken (Roadmap)
  3. Fixture-Overhead (~2,5s pro Test):

    • seed_tenant_and_users (1,27s) + create_app (0,73s) + login (0,34s)
    • Wird pro Test ausgeführt (Function-Scope)
    • Session-Scope ist nicht möglich weil ~30 Testdateien seed_tenant_and_users direkt aufrufen
    • Lösung: Seed-Daten session-scopen + clean_tables anpassen (Roadmap)
  4. Keine Parallelisierung möglich:

    • pytest-xdist funktioniert nicht weil alle Worker dieselbe Test-DB teilen
    • Lösung: Pro-Worker Datenbank (Roadmap)

Test-Kategorien

Kategorie Beschreibung Beispiele
Funktionale Tests Testet ob Features funktionieren test_calendar, test_tags, test_dms
Permission-Tests Testet ABAC/Permission-System test_permissions, test_entity_permissions
Plugin-Tests Testet Plugin-Lifecycle und -Funktionen test_plugins, test_entity_links
Cross-Tenant-Tests Testet Tenant-Isolation test_cross_tenant_security
AI-Tests Testet AI-Proactive, Copilot, GraphRAG test_ai_proactive, test_ai_copilot
Integration-Tests Testet Modul-übergreifend test_unified_search, test_outbox

Konventionen

  1. Test-Dateien: tests/test_<modul>.py
  2. Fixtures: In tests/conftest.py definiert
  3. Plugin-Aktivierung: Jede Plugin-Test-Datei muss init_permission_registry(active_plugin_names={...}) aufrufen
  4. Entity-Typen: Verwende korrekte ENTITY_MODELS-Keys (z.B. file nicht dms_file, mail_account nicht mailbox)
  5. URLs: Verwende korrekte API-Pfade (z.B. /api/v1/entity-links/ nicht /api/v1/dms/)
  6. Dedup-Tests: Verwende unterschiedlichen Dateiinhalt pro Upload um Dedup-Logik nicht zu triggern
  7. Keine zufälligen UUIDs: Verwende echte Entity-IDs aus der DB, nicht uuid.uuid4()

3. Frontend-Tests (geplant)

Aktuell

  • 0 Tests für 54.000 Zeilen TSX/TypeScript
  • Frontend-Bugs werden nur manuell im Browser gefunden

Roadmap

  • Unit-Tests: vitest für React-Komponenten
  • Integration-Tests: Testing Library für Komponenten-Interaktionen
  • E2E-Tests: Playwright für kritische User-Flows (Login, Kontakt erstellen, Kalender)

4. Security-Testing (geplant)

Aktuell

  • Keine automatisierten Security-Tests
  • Security-Bugs wurden durch manuelle Code-Review gefunden (siehe Bugfix-Session 2026-08-12)

Bekannte Security-Lücken (behoben am 2026-08-12)

Bug Fix Status
MAIL_ENCRYPTION_KEY hatte Default-Wert RuntimeError wenn nicht gesetzt
revoke_permission ohne Owner-Check check_single_entity_access hinzugefügt
is_active=True hart codiert im DB-Fallback User-Status aus DB laden
Plugin-Gate allow bei fehlendem Tenant TODO - bricht Tests, muss in Produktion anders gelöst werden ⚠️
Public Share URL falsch URL korrigiert
Logout nur in Redis Auch PostgreSQL invalidieren
Rate-Limit nur auf IP Token-Hash für Bearer-Auth
RLS-Commit statt flush Alle Commits durch flush ersetzt
Webhook ohne Tenant-Context set_tenant_context hinzugefügt
npm ci || npm install Fallback Nur npm ci

Roadmap

  • bandit: Python Security-Scanner in CI-Pipeline
  • pip-audit: Dependency-Scanning
  • npm audit: Frontend-Dependency-Scanning
  • OWASP ZAP: Web-Application-Scanner gegen Test-Instanz
  • Security-Test-Suite: Eigene pytest-Tests für Security-Szenarien

5. CI/CD Pipeline

Aktuelle Checks (scripts/ci_pipeline.sh)

  1. Python Compile Check
  2. Cross-Plugin Import Check
  3. Alembic Revision Graph
  4. Alembic Migration Test (wenn DATABASE_URL gesetzt)
  5. Migration Hash Check
  6. TypeScript Type Check
  7. Frontend Build
  8. Test Collection
  9. Backend Tests
  10. Frontend Tests
  11. SQL Injection Check
  12. npm ci strict mode

Bekannte CI-Lücken

  • Smoke-Test gegen Build: Tests laufen gegen leocrm_test DB, nicht gegen den aktuellen Build
  • Frontend-Tests: vitest ist konfiguriert aber hat 0 Tests
  • Security-Scanning: bandit/pip-audit nicht in Pipeline
  • E2E-Tests: Nicht in Pipeline

6. Was getestet wird und was nicht

Wird getestet

  • API-Endpunkte (CRUD, Validierung, Permissions)
  • Plugin-Lifecycle (Install, Activate, Deactivate)
  • ABAC/Permission-System
  • Cross-Tenant-Isolation (ohne RLS)
  • AI-Proactive/GraphRAG (mit Mocks)
  • Outbox/Event-System
  • Backup/Restore
  • Auth/Login/Logout
  • Tags, Calendar, DMS, Mail, Contacts, Tasks

Wird NICHT getestet

  • Frontend (54k Zeilen, 0 Tests)
  • RLS-Policies (Test-DB hat keine RLS)
  • LLM-APIs (blockieren Suite, nicht gemockt)
  • Race Conditions (keine Last-Tests)
  • Security-Edge-Cases (SQL Injection nur oberflächlich)
  • Dockerfile/Deployment (nur Code, nicht Infrastruktur)
  • CI-Scripts selbst (Shell-Scripts nicht getestet)
  • Produktions-Logs (keine Log-Analyse)

7. Roadmap

Priorität Maßnahme Aufwand Nutzen
🔴 Hoch Frontend Unit-Tests (vitest) mittel 54k Zeilen abgedeckt
🔴 Hoch LLM-API-Calls mocken gering Suite läuft komplett durch
🟡 Mittel Security-Test-Suite mittel Security-Bugs automatisch gefunden
🟡 Mittel E2E-Tests (Playwright) hoch Kritische User-Flows getestet
🟡 Mittel Alembic-Migrationen in Test-DB mittel RLS testbar
🟡 Mittel Fixture-Optimierung (Session-Scope) hoch Suite 3x schneller
🟢 Niedrig bandit/pip-audit in CI gering Automatisches Security-Scanning
🟢 Niedrig Pro-Worker Test-DB mittel Parallelisierung möglich
🟢 Niedrig Log-Analyse Pipeline gering Produktions-Fehler erkannt

8. Wann muss dieses Dokument aktualisiert werden?

Dieses Dokument MUSS aktualisiert werden bei:

  1. Neue Plugins oder Module → Test-Kategorien und Abdeckung aktualisieren
  2. Security-Änderungen → Security-Lücken und Fixes dokumentieren
  3. Neue Test-Infrastruktur (z. B. vitest, Playwright) → Abschnitt hinzufügen
  4. CI-Pipeline-Änderungen → Checks und Lücken aktualisieren
  5. Größere Refactoring → Konventionen und Einschränkungen überprüfen
  6. Nach jeder Bugfix-Session → Bekannte Lücken und Fixes dokumentieren

Verantwortlich: Agent/Entwickler der die Änderung durchführt.


9. Historie

Datum Ereignis
2026-08-12 Test-Strategie erstellt nach Bugfix-Session (14 Security-Bugs, ~170 Testfehler behoben)