Simmetric Chat usa Jest (unit + integration) e Playwright (E2E), orchestrati da Turborepo.
Livelli
| Livello | Runner | DB | Scope |
|---|---|---|---|
| Unit | Jest | mock Prisma | servizi, utility, validazione |
| Integration | Jest | PostgreSQL worker reale | route, middleware, flussi DB |
| E2E | Playwright | app completa | UI 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_SECRETtest, 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
- Convenzioni: 10 — Development
- Internals testati: 05 — Feature Guide