openpencil/playwright.config.ts
2026-09-10 21:41:10 +03:00

78 lines
2 KiB
TypeScript

import { defineConfig } from '@playwright/test'
const appPort = process.env.OPENPENCIL_TEST_PORT ?? '1420'
const mcpPort = process.env.OPENPENCIL_TEST_MCP_PORT ?? '7600'
for (const port of [appPort, mcpPort]) {
if (!/^\d+$/.test(port) || Number(port) < 1024 || Number(port) > 65535) {
throw new Error('Browser test ports must be integers between 1024 and 65535')
}
}
if (Number(appPort) === Number(mcpPort)) throw new Error('App and MCP test ports must differ')
const origin = `http://localhost:${appPort}`
const reuse = process.env.OPENPENCIL_TEST_REUSE_SERVER
if (reuse !== undefined && reuse !== '0' && reuse !== '1') {
throw new Error('OPENPENCIL_TEST_REUSE_SERVER must be 0 or 1')
}
export default defineConfig({
testDir: './tests',
timeout: 15_000,
workers: 1,
expect: {
toHaveScreenshot: {
maxDiffPixelRatio: 0.01,
threshold: 0.3
},
toMatchSnapshot: {
maxDiffPixelRatio: 0.01,
threshold: 0.3
}
},
use: {
baseURL: origin,
testIdAttribute: 'data-test-id',
viewport: { width: 1280, height: 800 },
deviceScaleFactor: 2,
colorScheme: 'dark',
launchOptions: {
args: ['--enable-unsafe-swiftshader']
}
},
projects: [
{
name: 'openpencil',
testDir: './tests/e2e',
testIgnore: '**/native/**',
fullyParallel: false
},
{
name: 'openpencil-webkit',
testDir: './tests/e2e',
testMatch: [
'**/*.webkit.spec.ts',
'**/design/panel.spec.ts',
'**/export/basic.spec.ts',
'**/fonts/settings.spec.ts'
],
use: {
browserName: 'webkit'
}
},
{
name: 'figma',
testDir: './tests/figma'
}
],
webServer: {
command: `bun run dev --port ${appPort} --strictPort`,
cwd: import.meta.dirname,
url: origin,
env: {
OPENPENCIL_DEV_ORIGIN: origin,
OPENPENCIL_DEV_MCP_PORT: mcpPort,
PORTLESS_URL: ''
},
reuseExistingServer: !process.env.CI && reuse === '1'
}
})