test: support public objective journal verification

This commit is contained in:
2026-07-28 12:17:25 +09:00
parent 91607cfd4c
commit 3c817175f0

View File

@@ -54,10 +54,15 @@ const baseUrl =
process.env.VERIFY_CAMPAIGN_OBJECTIVE_JOURNAL_URL ??
'http://127.0.0.1:41808/heros_web/';
const targetUrl = withDebugOptions(baseUrl, renderer);
const localSeedUrl = withDebugOptions(
'http://127.0.0.1:41808/heros_web/',
renderer
);
const screenshotPath =
`dist/verification-campaign-objective-journal-${renderer}-1920x1080.png`;
let serverProcess;
let seedServerProcess;
let browser;
try {
@@ -90,13 +95,41 @@ try {
}
});
await page.addInitScript(() => window.localStorage.clear());
await page.addInitScript(() => {
const marker =
'heros-web:qa:campaign-objective-journal-storage-cleared';
if (window.sessionStorage.getItem(marker) === '1') {
return;
}
window.localStorage.clear();
window.sessionStorage.setItem(marker, '1');
});
await page.goto(targetUrl, {
waitUntil: 'domcontentloaded',
timeout: 90000
});
await waitForDebugApi(page);
const seeded = await seedFirstVictoryCamp(page);
let seeded;
if (isLocalUrl(targetUrl)) {
seeded = await seedFirstVictoryCamp(page);
} else {
const seedBridge = await createFirstVictorySeedBridge(
browser,
localSeedUrl
);
seedServerProcess = seedBridge.serverProcess;
seeded = seedBridge.seeded;
await page.evaluate((campaignSaves) => {
for (const [key, value] of Object.entries(campaignSaves)) {
window.localStorage.setItem(key, value);
}
}, seedBridge.campaignSaves);
await page.reload({
waitUntil: 'domcontentloaded',
timeout: 90000
});
await waitForDebugApi(page);
}
assert.deepEqual(
seeded,
{
@@ -229,6 +262,7 @@ try {
} finally {
await browser?.close();
await stopServerProcess(serverProcess);
await stopServerProcess(seedServerProcess);
}
function withDebugOptions(url, requestedRenderer) {
@@ -238,6 +272,12 @@ function withDebugOptions(url, requestedRenderer) {
return parsed.toString();
}
function isLocalUrl(url) {
return ['localhost', '127.0.0.1', '0.0.0.0'].includes(
new URL(url).hostname
);
}
async function waitForDebugApi(page) {
await page.waitForFunction(
() =>
@@ -303,6 +343,39 @@ async function seedFirstVictoryCamp(page) {
}, sourceBattleId);
}
async function createFirstVictorySeedBridge(activeBrowser, seedUrl) {
const localServerProcess = await ensureLocalServer(seedUrl);
const context = await activeBrowser.newContext(
desktopBrowserContextOptions
);
try {
const page = await context.newPage();
page.setDefaultTimeout(30000);
await page.addInitScript(() => window.localStorage.clear());
await page.goto(seedUrl, {
waitUntil: 'domcontentloaded',
timeout: 90000
});
await waitForDebugApi(page);
const seeded = await seedFirstVictoryCamp(page);
const campaignSaves = await readCampaignSaves(page);
assert(
Object.keys(campaignSaves).length > 0,
'Local seed bridge did not create a campaign save.'
);
return {
campaignSaves,
seeded,
serverProcess: localServerProcess
};
} catch (error) {
await stopServerProcess(localServerProcess);
throw error;
} finally {
await context.close();
}
}
async function waitForCampJournalReady(page) {
try {
await page.waitForFunction(