// ABOUTME: Playwright global setup - starts PocketBase and sets test environment variables. // ABOUTME: Runs before all e2e tests to provide a fresh database with test data. import * as fs from "node:fs"; import * as path from "node:path"; import { DEFAULT_CONFIG, start, TEST_USERS } from "./pocketbase-harness"; const STATE_FILE = path.join(__dirname, ".harness-state.json"); export default async function globalSetup(): Promise { console.log("Starting PocketBase for e2e tests..."); const state = await start(DEFAULT_CONFIG); // Save state for teardown fs.writeFileSync( STATE_FILE, JSON.stringify({ dataDir: state.dataDir, url: state.url, pid: state.process.pid, }), ); // Set environment variables for the test process process.env.NEXT_PUBLIC_POCKETBASE_URL = state.url; process.env.POCKETBASE_URL = state.url; // Export credentials for each test user type process.env.TEST_USER_ONBOARDING_EMAIL = TEST_USERS.onboarding.email; process.env.TEST_USER_ONBOARDING_PASSWORD = TEST_USERS.onboarding.password; process.env.TEST_USER_ESTABLISHED_EMAIL = TEST_USERS.established.email; process.env.TEST_USER_ESTABLISHED_PASSWORD = TEST_USERS.established.password; process.env.TEST_USER_CALENDAR_EMAIL = TEST_USERS.calendar.email; process.env.TEST_USER_CALENDAR_PASSWORD = TEST_USERS.calendar.password; process.env.TEST_USER_GARMIN_EMAIL = TEST_USERS.garmin.email; process.env.TEST_USER_GARMIN_PASSWORD = TEST_USERS.garmin.password; process.env.TEST_USER_GARMIN_EXPIRED_EMAIL = TEST_USERS.garminExpired.email; process.env.TEST_USER_GARMIN_EXPIRED_PASSWORD = TEST_USERS.garminExpired.password; // Keep backward compatibility - default to established user process.env.TEST_USER_EMAIL = TEST_USERS.established.email; process.env.TEST_USER_PASSWORD = TEST_USERS.established.password; console.log(`PocketBase running at ${state.url}`); console.log("Test users created:"); for (const [preset, user] of Object.entries(TEST_USERS)) { console.log(` ${preset}: ${user.email}`); } }