Release Healer Man 0.1.59

This commit is contained in:
phenom committed 2026-09-27 10:16:42 -04:00
1 parent 11934a3979
commit ab1434a3b8
44 files changed
+1242 -103

No files matched your search

+17 -1
View File
@@ -62,7 +62,8 @@ test("separates each rolled boss's board within its dungeon", () => withDatabase
for (const dungeonId of ["bite-sized-stormwind-stockade", "randomized-bite-sized-stormwind-stockade",
"randomized-bite-sized-stormwind-stockade-available",
"bite-sized-wailing-caverns", "bite-sized-deadmines-ship", "bite-sized-utgarde-pinnacle-skadi",
"bite-sized-forsaken-abbey-ancalon", "bite-sized-paspers-shrine-hafiz", "bite-sized-mystic-altar-golem"]) {
"bite-sized-forsaken-abbey-ancalon", "bite-sized-paspers-shrine-hafiz", "bite-sized-mystic-altar-golem",
"bite-sized-grafu-castle-barkud", "bite-sized-hoto-teeth", "bite-sized-hall-of-survivors-pursuer"]) {
const dungeon = catalog.dungeons.find((entry) => entry.id === dungeonId);
const difficulty = dungeon.difficulties[0];
assert.equal(difficulty.finalBossIds.length, dungeon.bosses.length);
@@ -87,6 +88,21 @@ test("separates each rolled boss's board within its dungeon", () => withDatabase
const bosses = catalog.dungeons.find((entry) => entry.id === id).difficulties[0].finalBossIds;
assert.equal(database.listDungeonLeaderboard({ dungeonId: id, bossId: bosses[1] }).total, 1);
}));
test("the one-boss RoM slices have their own final-boss boards", () => withDatabase((database) => {
for (const [dungeonId, sourceId] of [
["bite-sized-barren-caves-anglo", "barren-caves"],
["bite-sized-kawaks-tomb-linobia", "kawaks-tomb"],
]) {
const dungeon = catalog.dungeons.find((entry) => entry.id === dungeonId);
const bossId = dungeon.difficulties[0].finalBossIds[0];
assert.equal(dungeon.difficulties[0].finalBossIds.length, 1);
const payload = run(`${dungeonId}-run`, 2000, false, dungeonId);
payload.killedBossIds = [bossId];
assert.equal(database.submitDungeonRun(null, payload).placement.finalRank, 1);
assert.equal(database.listDungeonLeaderboard({ dungeonId, bossId }).total, 1);
assert.equal(database.listDungeonLeaderboard({ dungeonId: sourceId, bossId }).total, 0);
}
}));
test("public HTTP leaderboards accept completion records and return results with rank while rejecting unfinished runs", async () => {
const directory = mkdtempSync(path.join(os.tmpdir(), "healer-man-leaderboard-http-"));
const { server } = createGameServer({ dataDir: directory, enableShelvedModes: false });
+3 -1
View File
@@ -48,7 +48,9 @@ test("migrates existing race matches onto their seeded boss boards", () => {
const dungeonIds = ["bite-sized-stormwind-stockade", "randomized-bite-sized-stormwind-stockade",
"randomized-bite-sized-stormwind-stockade-available",
"bite-sized-wailing-caverns", "bite-sized-deadmines-ship", "bite-sized-utgarde-pinnacle-skadi",
"bite-sized-forsaken-abbey-ancalon", "bite-sized-paspers-shrine-hafiz", "bite-sized-mystic-altar-golem"];
"bite-sized-forsaken-abbey-ancalon", "bite-sized-paspers-shrine-hafiz", "bite-sized-mystic-altar-golem",
"bite-sized-grafu-castle-barkud", "bite-sized-barren-caves-anglo",
"bite-sized-hoto-teeth", "bite-sized-kawaks-tomb-linobia", "bite-sized-hall-of-survivors-pursuer"];
for (const dungeonId of dungeonIds) insert.run(`race-old-${dungeonId}`, dungeonId,
`race-old-${dungeonId}`, dungeon.defaultDifficultyId);
createDungeonRaceRepository(database, { ErrorType: Error });