import { defineConfig, devices } from '@playwright/test'; // E2E_BASE_URL points at a THROWAWAY stack — the compose in docker-compose.e2e.yml // or a local dev server. Never at testfuegos.comunes.org or anything else with // data in it: these tests create users and subscriptions, and the seed step wipes // collections. const baseURL = process.env.E2E_BASE_URL || 'http://localhost:3100'; if (/testfuegos|fuegos\.comunes|fires\.comunes/.test(baseURL)) { throw new Error(`Refusing to run the e2e suite against ${baseURL}: it seeds and writes data.`); } export default defineConfig({ testDir: './tests', // Meteor's first page load compiles and ships a big bundle; the map then waits // for tiles and DDP subscriptions. timeout: 90 * 1000, expect: { timeout: 20 * 1000 }, // Every spec creates its own user, but they share one Mongo and one union // recompute queue; running them in parallel makes failures much harder to read // for very little wall-clock on a runner that only has one job slot anyway. workers: 1, fullyParallel: false, forbidOnly: !!process.env.CI, retries: process.env.CI ? 1 : 0, reporter: process.env.CI ? [['list'], ['html', { open: 'never', outputFolder: 'playwright-report' }]] : [['list']], use: { baseURL, // Both on first retry only: a trace per test would be gigabytes of artifacts // for a suite that is green most of the time. trace: 'retain-on-failure', screenshot: 'only-on-failure', video: 'retain-on-failure', actionTimeout: 20 * 1000, locale: 'es-ES' }, projects: [ { name: 'chromium', use: { ...devices['Desktop Chrome'] } } ] });