Back to docs
Guide 11

Testing

Unit, integration and E2E strategy for Simmetric Chat.

Simmetric Chat usa Jest (unit + integration) e Playwright (E2E), orchestrati da Turborepo.

Livelli

LivelloRunnerDBScope
UnitJestmock Prismaservizi, utility, validazione
IntegrationJestPostgreSQL worker realeroute, middleware, flussi DB
E2EPlaywrightapp completaUI user-facing (13 spec)

Unit test

Mock di Prisma via jest.mock (no DB reale). Test di: servizi (RAG, backup, encryption, DLP, agent budget), utility (RBAC, license, chunker), schema Zod, webhook dispatch.

pnpm test               # tutti i package
pnpm --filter server test
pnpm --filter shared test

Convenzioni: file *.test.ts affiancati al sorgente o in __tests__/. Snapshot solo per output deterministici (non per LLM). Usa jest.mock('../prisma') per isolare DB.

Integration test

Worker DB PostgreSQL reale. Template simmetricchat_test_template clonato per-test-run per isolamento. Test di route Express (supertest), middleware (auth, RBAC, license, rate limit), flussi DB completi (workspace, chat, documenti, backup restore).

Setup:

  • Variabili env di test (DB test, JWT_SECRET test, secret shared).
  • Migrazioni applicate al template; ogni run clona in DB fresh.
  • Teardown: drop DB test + cleanup LanceDB temp.
pnpm --filter server test:integration

E2E (Playwright)

13 spec in e2e/. Coprono flussi user-facing: auth/login, chat streaming, document upload, widget embed, MCP install, admin settings, backup, RBAC UI, i18n.

pnpm test:e2e
# con UI: pnpm exec playwright test --ui

Prerequisiti: app up (pnpm dev o compose), DB seeded, browser installati (pnpm exec playwright install). Config in playwright.config.ts.

Coverage

Jest coverage via --coverage. Focus su servizi critici: agent orchestrator, hybridSearch, backup, encryption, license, RBAC. Target indicative: ≥ 70% sui servizi core (verifica threshold in jest.config.* per-package).

Test di flussi critici (checklist)

  • RAG ibrido: vector + FTS + RRF fusion + fallback archive (D-07) + guard embedding mismatch (D-01).
  • Agent ReAct: loop detection, circuit breaker unknown-tool (BOT-03), budget wallclock/token/context, per-user concurrency, fallback provider.
  • Widget: sessione anonima + scadenza, rate limit doppio layer, lead capture, IDOR prevention (whitelist WidgetWorkspace), proxy SSE trasparente.
  • Backup: dump → archive → checksum → upload retry → restore atomicity (psql single-transaction) + retention.
  • MCP: transport fallback (D-09), install/uninstall, pin resolution, health check.
  • License: graceful degradation Enterprise→Community, gating 402, limiti numerici.

Debug test

pnpm --filter server test -- --testNamePattern="hybrid" --verbose
pnpm --filter server test:integration -- --runInBand   # seriale per DB
DEBUG=1 pnpm test:e2e -- --headed

CI

Turborepo cachea test; pipeline tipica: lint → typecheck → test → test:integration → build → test:e2e. Worker DB per integration richiede service PostgreSQL in CI.

Cross-link