Testing
E2E Tests Playwright end-to-end test suite organized by feature area
Specs live in domain folders under apps/web/e2e/ (plus fixtures/ and helpers/ — see Maildev helper ). List current cases with npx playwright test --list in apps/web.
Default projects in apps/web/playwright.config.ts:
Project Matches Depends on auth-setupsetup/auth.setup.ts — ensureVerifiedUser writes e2e/.auth/user.json— org-setupsetup/org.setup.ts — writes org slugauth-setupno-auth(public|auth)/*.spec.ts — no login— authenticated(account|admin|dashboard|members|payment)/*.spec.tsauth-setup, org-setupcapture (opt-in)e2e/capture/*.capture.tsCAPTURE=1 / pnpm --filter app capture
globalSetup (e2e/setup/global-setup.ts) clears MailDev. pnpm --filter app test:e2e is plain playwright test and does not load capture.
Local infra: docker compose -f docker-compose.e2e.yml up -d (Postgres on 5433 , Maildev). CI (.github/workflows/e2e.yml) is gated behind the e2e PR label .
File Tests Covers delete-account.spec.ts1 Account deletion confirmation, and being unable to sign in again afterward home.spec.ts2 /account redirect to profile + unauthenticated guard on protected routesnew-org.spec.ts2 Create-organization form — slug auto-generation, name validation profile.spec.ts3 Profile editing — populated name/read-only email, validation, persistence security.spec.ts1 Security page render — change-password form, 2FA section, sessions list
File Tests Covers admin-access.spec.ts4 Admin area access control across regular, moderator, and staff/admin roles
File Tests Covers magic-link.spec.ts1 Full magic-link sign-in round trip — request, email, click password-reset.spec.ts3 Forgot-password form, reset-confirmation email, full reset-and-restore flow sign-in.spec.ts3 Sign-in form render, redirect on success, sign-out sign-up.spec.ts3 Sign-up form render, password-mismatch validation, verification-email flow two-factor.spec.ts1 /auth/2fa challenge page render with no pending sessionverify-email.spec.ts2 Resend button visibility + resend-verification-email flow
File Tests Covers overview.spec.ts2 Org dashboard heading + sidebar navigation to Members selection.spec.ts1 /org resolves to the test organizationsettings.spec.ts2 Org settings form — populated name/read-only slug, persistence
File Tests Covers invitations.spec.ts2 Pending-invitations table + empty search results invite-accept.spec.ts4 Invite-accept error states, email-mismatch guard, Free-plan member-limit guard invite-links.spec.ts2 Invite-link create dialog + generated URL appearing in the table invite-preview.spec.ts1 Invalid invite-token error card list.spec.ts4 Member list — current-user row, sidebar navigation, invite validation, Free-plan member-limit guard
File Tests Covers billing-page.spec.ts4 Current Plan/Change Plan sections, Free/Pro/Enterprise tiers, monthly/annual toggle, disabled Current-Plan button checkout-canceled.spec.ts2 Checkout-canceled page render + Try Again navigation checkout-success.spec.ts1 Checkout-error card when the session can't be verified checkout.spec.ts1 Upgrade-to-Pro checkout server action
File Tests Covers home.spec.ts2 Hero/CTA/pricing/footer sections + monthly/annual pricing toggle
docker compose -f docker-compose.e2e.yml up -d
pnpm --filter app test:e2e
pnpm --filter app test:e2e:ui
pnpm --filter app test:e2e:auth # --project=no-auth
pnpm --filter app test:e2e:app # --project=authenticated
pnpm --filter app capture # CAPTURE=1
pnpm --filter app test:e2e -- e2e/payment