harb/scripts/harb-evaluator/holdout.config.ts

55 lines
1.7 KiB
TypeScript
Raw Permalink Normal View History

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'] },
},
],
});