/** * Runs every Freezmo browser suite in order. * * npm run test:e2e # everything * npm run test:e2e -- phase1 # only suites whose name contains "phase1" * * Each suite is a standalone script that talks to the running app on :3207 * (FREEZMO_URL overrides). Suites that need a stub Ollama or extra server * instance start their own on their own port and clean up after themselves. */ import { spawn } from "node:child_process"; import path from "node:path"; const SUITES = [ "regression", "activities-test", "aero-music-test", "bubbles-test", "mobile-test", "wizard-test", "native-test", "i18n-test", "freeze-loading-test", "phase1-test", "phase2-test", "phase3-test", "security-test", "chat-test", "providers-test", "review-test", ]; const filters = process.argv.slice(2); const list = filters.length ? SUITES.filter((name) => filters.some((f) => name.includes(f))) : SUITES; const here = path.dirname(new URL(import.meta.url).pathname); const repo = path.resolve(here, ".."); let failed = 0; for (const suite of list) { console.log(`\n===== ${suite} =====`); const code = await new Promise((resolve) => { const child = spawn(process.execPath, [path.join(here, `${suite}.mjs`)], { cwd: repo, stdio: "inherit" }); child.on("close", resolve); }); if (code !== 0) failed += 1; } console.log(`\n${list.length - failed}/${list.length} suites passed`); process.exit(failed ? 1 : 0);