Studio full-stack regression tests
Run the real browser, API, authentication, tenancy, and PostgreSQL journeys before releasing Studio.
The Studio regression suite is deliberately different from a component test. Playwright starts production builds of the API and Studio, signs up a real Better Auth user, verifies that user in PostgreSQL, creates and activates an organization, and seeds a baseline experiment. Browser tests then reuse a saved session to exercise the same paths a customer uses.
What the release gate covers
- signup form constraints and the live Better Auth endpoint,
- email/password login and restoration of an existing organization,
- tenant-scoped experiment pipeline and table views,
- the five-stage experiment builder and detail page,
- invalid and valid YAML import,
- API-key creation, copy-once display, and revocation,
- WCAG A/AA scans on public authentication plus authenticated experiment, detail, and settings surfaces.
These scenarios contain no conditional skips. A missing database, migration, backend, or browser is a failed precondition and fails the job. CI retains screenshots, traces, and JUnit output when a journey fails.
Run it locally
You need Node 22, pnpm, Chromium for Playwright, and PostgreSQL 16. The example below uses Docker for the database:
docker run --rm --name fx-studio-e2e \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=fabric_experiments \
-p 55432:5432 \
-d postgres:16-alpine
export DATABASE_URL=postgres://postgres:postgres@localhost:55432/fabric_experiments
export BETTER_AUTH_SECRET=local-e2e-secret-at-least-32-bytes
pnpm install --frozen-lockfile
pnpm migrate
pnpm -r build
pnpm --filter @fabricorg/experiments-studio exec playwright install chromium
pnpm --filter @fabricorg/experiments-studio test:e2eThe runner writes authentication state and fixture metadata under
apps/studio/.auth/. That directory is ignored by Git. Delete it to force a
fresh browser fixture; the setup is otherwise idempotent for repeated local
runs.
CI behavior
The repository integration-test job provisions PostgreSQL, applies every
migration, runs API integration tests, installs Chromium, and runs the Studio
journeys with one worker. Keeping the browser suite in the same job proves that
the exact schema accepted by the migration runner also supports the deployed
control-plane and Studio contract.