e2e/studio/README.md
mise fullstackChoose the appropriate example file based on your testing scenario:
For self-hosted tests:
cp .env.local.self-hosted.example .env.local
For platform tests with email authentication:
cp .env.local.email.example .env.local
For platform tests with GitHub authentication:
cp .env.local.github.example .env.local
Edit .env.local and set the appropriate values based on your test environment (see Environment Variables section below).
⚠️ This should be done in the e2e/studio directory
cd e2e/studio
pnpm exec playwright install
Configure your tests by setting the following environment variables in .env.local. We have examples of what required on self hosted and platform:
STUDIO_URL: The URL where Studio is running (default: http://localhost:8082)API_URL: The Supabase API endpoint (default: https://localhost:8080)IS_PLATFORM: Set to true for platform tests, false for self-hosted (default: false)
true: Tests run serially (1 worker) due to API rate limitsfalse: Tests run in parallel (5 workers)⚠️ Before running platform tests, you must create an account and organization on the platform you're testing.
Authentication is automatically enabled when either email/password OR GitHub credentials are configured.
EMAIL: Your platform account emailPASSWORD: Your platform account passwordPROJECT_REF: Project reference (optional, will be auto-created if not provided)When both EMAIL and PASSWORD are set, the tests will authenticate using email/password. HCaptcha is mocked during test setup. Note this only works on local and staging environments
GITHUB_USER: Your GitHub usernameGITHUB_PASS: Your GitHub passwordGITHUB_TOTP: Your GitHub TOTP secret for 2FA (required, as GitHub enforces 2FA)When GITHUB_USER, GITHUB_PASS, and GITHUB_TOTP are all set, the tests will authenticate using GitHub OAuth with TOTP-based 2FA. The authentication flow handles:
Getting your GitHub TOTP secret:
When setting up 2FA on GitHub, you'll see a QR code. Click "enter this text code instead" to reveal the secret key. This is the value to use for GITHUB_TOTP.
IS_PLATFORM=true)ORG_SLUG: Organization slug (default: default)SUPA_REGION: Supabase region (default: us-east-1)SUPA_PAT: Personal Access Token for API authentication (default: test)BRANCH_NAME: Name for the test branch/project (default: e2e-test-local)OPENAI_API_KEY: Required for the AI Assistant test (assistant.spec.ts). Without this variable, the assistant test will be skipped.VERCEL_AUTOMATION_BYPASS_SELFHOSTED_STUDIO: Bypass token for Vercel protection (default: false)The test setup automatically runs different commands based on your environment:
IS_PLATFORM=true and STUDIO_URL=localhost): Runs pnpm run e2e:setup:platformIS_PLATFORM=true and remote STUDIO_URL): No web server setupIS_PLATFORM=false): Runs pnpm run e2e:setup:selfhostedCheck the package.json for the available commands and environments.
pnpm run e2e
With Playwright UI:
pnpm run e2e -- --ui
pnpm run e2e -- --ui to get the playwright UI.examples/examples.ts to Cursor as context.Example:
await expect(page.getByRole('heading', { name: 'Logs & Analytics' }), {
message: 'Logs heading should be visible',
}).toBeVisible()
import { test } from '../utils/test'
PWDEBUG=1 pnpm run e2e -- --ui
Read here: https://playwright.dev/docs/mock#mock-api-requests
Example:
await page.route(`*/**/logs.all*`, async (route) => {
await route.fulfill({ body: JSON.stringify(mockAPILogs) })
})