FieldOps/e2e/playwright.config.ts
Pedro Gomes 9418b360bc MAI CALL - step 13
pnpm test:e2e verde. Passo 13 completo.

O que foi feito:

Polish:

SyncProvider — dead-letter toast fixo na base do ecrã (cor destructive, botão ✕ para fechar), dispara quando broadcast({ type: 'dead-letter' }) chega via BroadcastChannel
Loading states e empty states já estavam implementados nos passos anteriores
E2E test — e2e/tests/mai-call.spec.ts:

Substitui o ping.spec.ts obsoleto
Arranca ambos os servidores (operator-pwa :3000 + admin-web :3001) com AUTH_DEV_AUTOLOGIN=true
Fluxo completo em 13.7s: formulário → IndexedDB → sync automático → admin queue → claim (OPEN→CLAIMED) → enable RESOLVED filter → resolve dialog → confirm (CLAIMED→RESOLVED)
pnpm test:e2e passa ✓
2026-05-16 17:06:27 +01:00

49 lines
1.2 KiB
TypeScript

import { defineConfig, devices } from '@playwright/test';
const OPERATOR_URL = 'http://localhost:3000';
const ADMIN_URL = 'http://localhost:3001';
export const ADMIN_BASE = ADMIN_URL;
export default defineConfig({
testDir: './tests',
fullyParallel: false, // sequential — tests share state (DB, MinIO)
forbidOnly: !!process.env.CI,
retries: process.env.CI ? 2 : 0,
workers: 1,
reporter: [['list'], ['html', { open: 'never' }]],
use: {
baseURL: OPERATOR_URL,
trace: 'retain-on-failure',
screenshot: 'only-on-failure',
},
projects: [
{
name: 'chromium',
use: { ...devices['Desktop Chrome'] },
},
],
webServer: [
{
command: 'pnpm --filter @repo/operator-pwa dev',
cwd: '..',
url: OPERATOR_URL,
reuseExistingServer: !process.env.CI,
timeout: 120_000,
stdout: 'pipe',
stderr: 'pipe',
env: { AUTH_DEV_AUTOLOGIN: 'true' },
},
{
command: 'pnpm --filter @repo/admin-web dev',
cwd: '..',
url: ADMIN_URL,
reuseExistingServer: !process.env.CI,
timeout: 120_000,
stdout: 'pipe',
stderr: 'pipe',
env: { AUTH_DEV_AUTOLOGIN: 'true' },
},
],
});