Current state
- Playwright exists under
apps/web/e2e.
- Current tests are public-route smoke and visual coverage using deterministic fixtures.
- They assert pages render and capture screenshots for
/, /discover, /submit, /server-status, /deployment, public profile pages, world pages, and event pages.
- They do not yet exercise signed-in flows, mutations, claim flows, email verification, adapter verification, or deployed Convex data movement.
Goal
Build an E2E harness that clicks through the important product flows and asserts both UI state and backend data state.
Recommended environment model
- Keep local Convex Playwright for fast deterministic smoke and regression tests.
- Add a deployed development/staging Convex target for integration E2E against real hosted services.
- Keep production read-only for smoke checks only.
- Prefer a dedicated seeded E2E namespace/test account model so tests can create/delete their own data without touching real users.
- For PR previews, either wire Vercel preview to a disposable Convex preview deployment or explicitly run only route smoke until preview backend isolation is available.
Candidate flow coverage
- Account page signed-out and sign-in-required states.
- Email/password signup, SES verification code path, and post-verification account readiness.
- Profile submission creates an unclaimed person/community record and the public page/search reflects it.
- Field visibility changes affect direct profile pages versus discovery/search surfaces.
- Discord person claim path grants
claimed_unverified owner control.
- Discord community admin claim creates a pending request and adapter verification grants verified ownership when mocked or test-guild-backed evidence passes.
- VRChat/VRCLinking proof flow creates a proof code, test adapter returns verified/not verified, and ownership state updates correctly.
- Search/discovery flow shows only published, public-surfacing, visibility-allowed fields.
- Event/world/profile cross-link flows preserve public projections after mutations.
Acceptance criteria
pnpm test:e2e has at least one mutation-backed user journey, not only public render checks.
- CI separates public preview smoke from mutation-backed deployed integration tests.
- Test data is isolated by run ID and cleaned up or marked disposable.
- Tests can run against local Convex and against an explicitly selected deployed dev/staging Convex URL.
- Docs explain when to use local, preview, dev/staging, and production smoke modes.
Notes
This should be split before implementation if it becomes too large. The first useful slice is a signed-out/sign-in-required/public-submission smoke plus one authenticated profile submission against a seeded dev deployment.
Current state
apps/web/e2e./,/discover,/submit,/server-status,/deployment, public profile pages, world pages, and event pages.Goal
Build an E2E harness that clicks through the important product flows and asserts both UI state and backend data state.
Recommended environment model
Candidate flow coverage
claimed_unverifiedowner control.Acceptance criteria
pnpm test:e2ehas at least one mutation-backed user journey, not only public render checks.Notes
This should be split before implementation if it becomes too large. The first useful slice is a signed-out/sign-in-required/public-submission smoke plus one authenticated profile submission against a seeded dev deployment.