-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathplaywright.config.ts
More file actions
115 lines (108 loc) · 4.42 KB
/
playwright.config.ts
File metadata and controls
115 lines (108 loc) · 4.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import { defineConfig, devices } from '@playwright/test'
import {
ADDR,
ANVIL_DEFAULT_PRIVATE_KEY,
DEFAULT_CHAIN_ID,
LEVERAGE_TOKEN_KEY,
LEVERAGE_TOKEN_ADDRESS,
LEVERAGE_TOKEN_LABEL,
TOKEN_SOURCE,
RPC,
} from './tests/shared/env'
const BASE_RPC_URL = RPC.primary
const ADMIN_RPC_URL = RPC.admin
const E2E_TOKEN_SOURCE = (process.env['E2E_TOKEN_SOURCE'] ?? TOKEN_SOURCE).toLowerCase()
// Prefer explicit env from scripts/run-tests; fall back to source-based heuristic
const INCLUDE_TEST_TOKENS =
process.env['VITE_INCLUDE_TEST_TOKENS'] === 'true' || E2E_TOKEN_SOURCE !== 'prod'
// Ensure the process env is populated so tests can read the resolved value
process.env['E2E_TOKEN_SOURCE'] = E2E_TOKEN_SOURCE
process.env['E2E_LEVERAGE_TOKEN_ADDRESS'] = LEVERAGE_TOKEN_ADDRESS
process.env['E2E_LEVERAGE_TOKEN_LABEL'] = LEVERAGE_TOKEN_LABEL
process.env['E2E_CHAIN_ID'] = String(DEFAULT_CHAIN_ID)
process.env['E2E_LEVERAGE_TOKEN_KEY'] = LEVERAGE_TOKEN_KEY
process.env['VITE_TEST_RPC_URL'] = BASE_RPC_URL
process.env['TENDERLY_ADMIN_RPC_URL'] = ADMIN_RPC_URL
process.env['VITE_CONTRACT_ADDRESS_OVERRIDES'] =
process.env['VITE_CONTRACT_ADDRESS_OVERRIDES'] ?? ''
process.env['VITE_LIFI_INTEGRATOR'] = process.env['VITE_LIFI_INTEGRATOR'] ?? ''
process.env['VITE_LIFI_API_KEY'] = process.env['VITE_LIFI_API_KEY'] ?? ''
export default defineConfig({
testDir: './tests/e2e',
fullyParallel: true,
forbidOnly: !!process.env['CI'],
// Fail fast in CI to avoid long timeouts stacking up
maxFailures: process.env['CI'] ? 1 : 0,
retries: 0,
workers: 1, // Sequential execution to avoid funding conflicts in shared Anvil state
// Keep tests short by default; individual expects can override
timeout: 45_000,
expect: {
timeout: 2_500,
},
reporter: 'list',
// Global setup to start Anvil before tests (skipped when using non-Anvil backend)
globalSetup: './tests/e2e/global-setup.ts',
use: {
baseURL: 'http://127.0.0.1:3000',
// Slightly relaxed navigation timeout to deflake initial loads
navigationTimeout: 45_000,
actionTimeout: 10_000,
serviceWorkers: 'block',
trace: 'on-first-retry',
},
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
],
webServer: {
// Run dev server in test mode with mock wallet; RPC URL is determined automatically
command: `bunx --bun vite --port 3000 --host 127.0.0.1 --strictPort`,
url: 'http://127.0.0.1:3000', // Explicit URL for Playwright to wait for
env: {
VITE_E2E: '1',
VITE_TEST_MODE: 'mock',
VITE_BASE_RPC_URL: BASE_RPC_URL,
VITE_ANVIL_RPC_URL: BASE_RPC_URL,
VITE_TEST_RPC_URL: BASE_RPC_URL,
// Forward LiFi integrator/API key if provided to avoid rate limits in tests
...(process.env['VITE_LIFI_INTEGRATOR'] || process.env['LIFI_INTEGRATOR']
? {
VITE_LIFI_INTEGRATOR:
process.env['VITE_LIFI_INTEGRATOR'] ?? process.env['LIFI_INTEGRATOR']!,
}
: {}),
...(process.env['VITE_LIFI_API_KEY'] || process.env['LIFI_API_KEY']
? {
VITE_LIFI_API_KEY:
process.env['VITE_LIFI_API_KEY'] ?? process.env['LIFI_API_KEY']!,
}
: {}),
VITE_TEST_PRIVATE_KEY: ANVIL_DEFAULT_PRIVATE_KEY,
// Minimum required env vars for app bootstrap during tests
VITE_WALLETCONNECT_PROJECT_ID:
process.env['VITE_WALLETCONNECT_PROJECT_ID'] ?? 'playwright-test-walletconnect',
VITE_ETHEREUM_RPC_URL:
process.env['VITE_ETHEREUM_RPC_URL'] ?? BASE_RPC_URL,
VITE_THEGRAPH_API_KEY: process.env['VITE_THEGRAPH_API_KEY'] ?? 'playwright-test-thegraph-key',
VITE_ROUTER_V2_ADDRESS: ADDR.routerV2 ?? ADDR.router ?? '',
VITE_MANAGER_V2_ADDRESS: ADDR.managerV2 ?? ADDR.manager ?? '',
VITE_MULTICALL_EXECUTOR_ADDRESS: ADDR.multicallExecutor ?? '',
VITE_CONTRACT_ADDRESS_OVERRIDES: process.env['VITE_CONTRACT_ADDRESS_OVERRIDES'] ?? '',
TENDERLY_ADMIN_RPC_URL: ADMIN_RPC_URL,
E2E_TOKEN_SOURCE,
E2E_LEVERAGE_TOKEN_KEY: LEVERAGE_TOKEN_KEY,
E2E_LEVERAGE_TOKEN_ADDRESS: LEVERAGE_TOKEN_ADDRESS,
E2E_LEVERAGE_TOKEN_LABEL: LEVERAGE_TOKEN_LABEL,
E2E_CHAIN_ID: String(DEFAULT_CHAIN_ID),
...(INCLUDE_TEST_TOKENS ? { VITE_INCLUDE_TEST_TOKENS: 'true' } : {}),
},
// Always start a fresh dev server so env is applied deterministically
reuseExistingServer: false,
timeout: 120_000, // Give Vite + plugins extra time in CI
stdout: 'pipe',
stderr: 'pipe',
},
})