import { defineConfig, devices } from '@playwright/test'; /** * Playwright config for holdout scenarios. * * Holdout specs are cloned from the separate harb-holdout-scenarios repo * into .holdout-scenarios/ by evaluate.sh and reuse the existing tests/setup/ * infrastructure (wallet-provider, stack, navigate). * * The evaluator boots the stack first, then runs: * npx playwright test --config scripts/harb-evaluator/holdout.config.ts * * Required env vars (set by evaluate.sh): * STACK_RPC_URL – Anvil JSON-RPC endpoint * STACK_WEBAPP_URL – Vite dev server URL * STACK_GRAPHQL_URL – Ponder GraphQL endpoint * HOLDOUT_SCENARIOS_DIR – Path to cloned scenarios */ const scenariosDir = process.env.HOLDOUT_SCENARIOS_DIR; if (!scenariosDir) { throw new Error('HOLDOUT_SCENARIOS_DIR env var required — run via evaluate.sh'); } export default defineConfig({ testDir: scenariosDir, fullyParallel: false, // evaluate.sh sets CI=true before invoking playwright, so forbidOnly is always // active in the evaluator context. Accidental test.only() in any scenario file // causes an immediate failure rather than a silent partial run. forbidOnly: !!process.env.CI, retries: 0, workers: 1, reporter: 'list', timeout: 5 * 60 * 1000, // 5 min per test — scenarios involve on-chain txns expect: { timeout: 30_000, }, use: { headless: true, viewport: { width: 1280, height: 720 }, screen: { width: 1280, height: 720 }, actionTimeout: 60_000, launchOptions: { args: ['--disable-dev-shm-usage', '--no-sandbox'], }, }, projects: [ { name: 'chromium', use: { ...devices['Desktop Chrome'] }, }, ], });