forked from phenom/healer-man
Update Healer Man server
This commit is contained in:
1 parent
39458d5de6
commit
6cc1b9217f
203 files changed
+133929
-31271
No files matched your search
@@ -276,7 +276,7 @@ async function readStatsPanelPage(page) {
|
||||
}));
|
||||
return {
|
||||
...stats,
|
||||
caption: await page.locator('.equipment-character-stats__note').innerText().catch(() => ''),
|
||||
caption: await page.locator('.equipment-character-stats__note').first().innerText().catch(() => ''),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -509,10 +509,19 @@ async function readStatsPanelPage(page) {
|
||||
assert.ok(nativeRuntime.inventory.some((item) => item.instanceId === 'qa-robes-native'));
|
||||
assert.equal(nativeRuntime.playerEquipment.chest, 'qa-robes-native', 'The equipped test item reaches the actual dungeon runtime.');
|
||||
for (const member of nativeRuntime.party) {
|
||||
if (member.classId.startsWith('rom-')) assert.equal(member.statRuleset, 'rom', `${member.name} keeps its own RoM ruleset.`);
|
||||
if (member.classId.startsWith('rom-')) {
|
||||
assert.equal(member.statRuleset, 'rom', `${member.name} keeps its own RoM ruleset.`);
|
||||
assert.ok(['rom-knight', 'rom-priest', 'rom-rogue', 'rom-scout', 'rom-mage'].includes(member.classId),
|
||||
'Ordinary generated RoM companions stay inside the active five classes.');
|
||||
}
|
||||
}
|
||||
results.observations.nativeDungeonRuntime = nativeRuntime;
|
||||
await openStatsPanel(page);
|
||||
const trainingGearText = await page.locator('.equipment-loadout').innerText();
|
||||
assert.match(trainingGearText, /Training gear scales automatically through level 79\./);
|
||||
assert.match(trainingGearText, /Training gear 30/i);
|
||||
assert.doesNotMatch(trainingGearText, /\bHeirloom\b/i, 'RoM automatic gear uses training labels, not authentic heirloom claims.');
|
||||
results.observations.romTrainingGearLabels = true;
|
||||
const nativePanelPages = {};
|
||||
for (const [index, pageName] of ['attributes', 'offense', 'defense'].entries()) {
|
||||
if (pageName !== 'attributes') {
|
||||
@@ -528,7 +537,7 @@ async function readStatsPanelPage(page) {
|
||||
const labels = new Set(panelPage.rows.map((row) => row.label));
|
||||
const missing = requiredNativeRows[pageName].filter((label) => !labels.has(label));
|
||||
assert.deepEqual(missing, [], `Native RoM ${pageName} page is missing fields: ${missing.join(', ')}`);
|
||||
assert.equal(panelPage.caption, 'Native RoM stats · shared dungeon combat rules');
|
||||
assert.equal(panelPage.caption, 'Native RoM stats');
|
||||
nativePanelPages[pageName] = panelPage;
|
||||
results.screenshots[`nativeStats${pageName[0].toUpperCase()}${pageName.slice(1)}Desktop`] = await capture(
|
||||
page,
|
||||
@@ -560,6 +569,32 @@ async function readStatsPanelPage(page) {
|
||||
assert.ok(nativePanelPages.attributes.vitals.some((row) => row.includes(`Combat health ${Math.round(nativeRuntime.maxHealth).toLocaleString()}`)));
|
||||
results.observations.nativePanelPages = { ...nativePanelPages, renderedMeters };
|
||||
await page.locator('.equipment-stat-tabs').getByRole('tab', { name: 'attributes', exact: true }).click();
|
||||
const npcMember = nativeRuntime.party.find((member) => member.classId === 'rom-mage')
|
||||
?? nativeRuntime.party.find((member) => member.classId.startsWith('rom-') && member.statRuleset === 'rom');
|
||||
assert.ok(npcMember, 'The live party contains a native RoM companion owner to inspect.');
|
||||
const npcOwnerButton = page.locator('.equipment-panel__owners .equipment-owner').filter({ hasText: npcMember.name });
|
||||
await npcOwnerButton.waitFor();
|
||||
await npcOwnerButton.click();
|
||||
await page.waitForFunction((name) => (
|
||||
document.querySelector('.equipment-loadout > header strong')?.textContent?.trim() === name
|
||||
), npcMember.name);
|
||||
const npcNativeStats = await readStatsPanelPage(page);
|
||||
const npcNativeLabels = new Set(npcNativeStats.rows.map((row) => row.label));
|
||||
const missingNpcRows = requiredNativeRows.attributes.filter((label) => !npcNativeLabels.has(label));
|
||||
assert.deepEqual(missingNpcRows, [], `Native RoM NPC attributes page is missing fields: ${missingNpcRows.join(', ')}`);
|
||||
assert.equal(npcNativeStats.caption, 'Native RoM stats');
|
||||
const npcTrainingGearText = await page.locator('.equipment-loadout').innerText();
|
||||
assert.match(npcTrainingGearText, /Training gear scales automatically through level 79\./);
|
||||
assert.match(npcTrainingGearText, /Training gear 30/i);
|
||||
assert.doesNotMatch(npcTrainingGearText, /\bHeirloom\b/i, 'RoM NPC automatic gear uses training labels.');
|
||||
assert.equal(npcMember?.statRuleset, 'rom', 'The selected NPC owner keeps its own native ruleset.');
|
||||
results.observations.nativeNpcOwnerPanel = { member: npcMember, stats: npcNativeStats };
|
||||
results.screenshots.nativeNpcStatsAttributesDesktop = await capture(page, '05-native-npc-stats-attributes-desktop');
|
||||
const playerOwnerButton = page.locator('.equipment-panel__owners .equipment-owner').filter({ hasText: nativeCreated.name });
|
||||
await playerOwnerButton.click();
|
||||
await page.waitForFunction((name) => (
|
||||
document.querySelector('.equipment-loadout > header strong')?.textContent?.trim() === name
|
||||
), nativeCreated.name);
|
||||
await page.locator('.equipment-panel .equipment-character-stats').scrollIntoViewIfNeeded();
|
||||
await page.setViewportSize({ width: 390, height: 844 });
|
||||
await page.waitForTimeout(350);
|
||||
|
||||
Reference in new issue
Block a user