diff --git a/scripts/verify-release-candidate.mjs b/scripts/verify-release-candidate.mjs index 2f39bca..a0e2ad2 100644 --- a/scripts/verify-release-candidate.mjs +++ b/scripts/verify-release-candidate.mjs @@ -4,6 +4,7 @@ import { chromium } from 'playwright'; const targetUrl = withDebugParam(process.env.RELEASE_QA_URL ?? 'http://127.0.0.1:4173/'); const screenshotDir = 'dist'; +const expectedTitle = '\uC0BC\uAD6D\uC9C0: \uC138 \uD615\uC81C\uC758 \uB9F9\uC138'; let serverProcess; let browser; @@ -37,6 +38,7 @@ try { await page.evaluate(() => window.localStorage.clear()); await page.reload({ waitUntil: 'domcontentloaded' }); await waitForTitle(page); + await assertReleaseShellReady(page); await page.screenshot({ path: `${screenshotDir}/rc-title-first-run.png`, fullPage: true }); await assertCanvasPainted(page, 'title first run'); @@ -218,6 +220,20 @@ async function waitForTitle(page) { }, undefined, { timeout: 90000 }); } +async function assertReleaseShellReady(page) { + const state = await page.evaluate(() => ({ + title: document.title, + canvasCount: document.querySelectorAll('canvas').length, + debugApiPresent: Boolean(window.__HEROS_DEBUG__), + gameApiPresent: Boolean(window.__HEROS_GAME__) + })); + + assert(state.title === expectedTitle, `Expected release page title "${expectedTitle}": ${JSON.stringify(state)}`); + assert(state.canvasCount === 1, `Expected exactly one release game canvas: ${JSON.stringify(state)}`); + assert(state.debugApiPresent === true, `Expected release QA debug API to be enabled: ${JSON.stringify(state)}`); + assert(state.gameApiPresent === true, `Expected release QA game handle to be enabled: ${JSON.stringify(state)}`); +} + async function waitForStoryReady(page) { await page.waitForFunction(() => { const activeScenes = window.__HEROS_DEBUG__?.activeScenes() ?? [];