| Current File : /home/lastyfjz/werepairmobile.com/wp-content/plugins/extendify/tests/playwright/global-setup.ts |
import type { FullConfig } from '@playwright/test';
// wp-playground-cli opens its HTTP port before the blueprint finishes
// applying. Playwright's webServer.url check returns 200 from that
// pre-blueprint state, so tests can race past steps like installTheme +
// runPHP. Poll the REST root for the blogdescription sentinel that
// setup.php writes — last blueprint step, theme-agnostic, no auth needed.
const READY_MARKER = 'extendify-pw-blueprint-ready';
const TIMEOUT_MS = 180_000;
const POLL_MS = 1_000;
const isReady = async (baseURL: string) => {
try {
const res = await fetch(`${baseURL}/?rest_route=/`);
if (!res.ok) return false;
return (await res.text()).includes(READY_MARKER);
} catch {
return false;
}
};
export default async (config: FullConfig) => {
const baseURLs = Array.from(
new Set(
config.projects
.map((p) => p.use.baseURL)
.filter((u): u is string => Boolean(u)),
),
);
await Promise.all(
baseURLs.map(async (baseURL) => {
const start = Date.now();
while (Date.now() - start < TIMEOUT_MS) {
if (await isReady(baseURL)) return;
await new Promise((r) => setTimeout(r, POLL_MS));
}
throw new Error(
`Playground at ${baseURL} did not reach ready state within ${TIMEOUT_MS / 1000}s`,
);
}),
);
};