EntwicklerMitarbeiter-Handbuch

Testing

Test-Strategie für den sellx Hub - Vitest fuer das Frontend, xUnit fuer das Sidecar, Playwright fuer E2E, plus Coverage-Ziele und manuelle Tests.

Entwickler-Handbuch · Development

Test-Pyramide

texttest-pyramide.txt
         /\
        /  \       E2E (Playwright)
       /----\
      /      \     Integration (.NET: SqlExecutorService, PluginLoader)
     /--------\
    /          \   Unit (xUnit .NET, Vitest TypeScript)
   /------------\

Frontend-Tests (Vitest)

Datei: sellx-hub/src/test/

bashfrontend-test.sh
cd sellx-hub && npm run test

Tests:

DateiWas getestet wird
src/test/sql-formatter.test.tsSQL-Formatierung und Validator-Output
src/test/plugin-loader.test.tsPlugin-Manifest-Parsing
src/test/csv-export.test.tsCSV-Export-Determinismus

Tests sind absichtlich isoliert — kein Tauri-IPC, kein DOM. Reine Logik.

Sidecar-Tests (xUnit)

Datei: sellx-sidecar/SellxSidecar.Tests/

bashsidecar-test.sh
cd sellx-sidecar && dotnet test

Tests:

Test-KlasseWas getestet wird
SqlSecurityValidatorTestsAlle Verbots-Patterns
SqlExecutorServiceTestsParametrisierung, Timeout, Row-Limit
LicenseServiceTestsJWT-Validierung, Token-Version-Check
PluginLoaderTestsZIP-Parsing, Manifest-Validierung

Tests verwenden eine In-Memory-SQLite-DB und einen Mock-JTL-Server (nicht enthalten).

Mock-Infrastruktur

Im MVP gibt es einen CentralMockService, der die sellx Central-API simuliert:

Datei: sellx-sidecar/SellxSidecar/Services/CentralMockService.cs

Endpoints:

EndpointVerhalten
POST /api/hub/activateGibt gültiges JWT + Master-Key-Seed zurück
POST /api/hub/heartbeatBestätigt, gibt Update-Liste leer zurück
GET /api/pluginsGibt Demo-Plugin-Liste zurück

Der Mock wird per appsettings.Development.json aktiviert:

jsonappsettings.Development.json
{
  "Central": {
    "UseMock": true,
    "MockUrl": "http://localhost:5500"
  }
}

E2E-Tests (Playwright, geplant)

Datei: sellx-hub/e2e/ (geplant)

Setup:

bashe2e-setup.sh
cd sellx-hub
npm run tauri dev &
sleep 10   # Tauri + Sidecar brauchen Zeit
npx playwright test

Test-Journeys:

JourneyWas geprüft wird
Setup-Wizard durchlaufen3 Schritte, Validation, DB-Rolle erkannt
Demo-Plugin ladenPlugin erscheint im Workspace
Query ausführenDataTable zeigt Ergebnisse
Plugin deinstallierenPlugin verschwindet aus Liste

Test-Fixtures

Lokal-development-für-Tests:

FixturePfad
eazybusiness-sample.bakMock-JTL-Wawi (geplant)
demo.sellxpkgDemo-Plugin-Datei
master-key-test.binDeterministischer Test-Key

Coverage-Ziele

BereichZielAktuell
Sidecar SqlSecurityValidator100%~95%
Sidecar SqlExecutorService90%~70%
Sidecar LicenseService90%~60%
Frontend Utility-Funktionen80%~50%
Frontend React-Components50%~20% (visual regression bevorzugt)

Coverage-Reports:

bashcoverage.sh
# Sidecar
cd sellx-sidecar
dotnet test --collect:"XPlat Code Coverage"

# Frontend
cd sellx-hub
npm run test:coverage

Manuelle Tests

Trotz automatisierter Tests sind manuelle Tests gegen echte JTL-Wawi-Instanzen wichtig:

TestAnleitung
Setup mit echter JTLHub installieren, Registry lesen, Verbindung testen
Plugin mit echtem Mandanten100k+ Artikel, prüfen ob UI responsive bleibt
Timeout-VerhaltenQuery mit WAITFOR DELAY '00:01:00' → soll nach 30s abbrechen
Grace-PeriodSubscription deaktivieren, Heartbeat blockieren, nach 7 Tagen prüfen