Files
healer-man/server/manastorm-config.test.mjs
2026-09-01 14:35:56 -04:00

128 lines
3.5 KiB
JavaScript

import assert from "node:assert/strict";
import test from "node:test";
import {
GM_REVIEW_NOTE_MAX_LENGTH,
MANASTORM_ADMIN_CONFIG_SCHEMA_VERSION,
normalizeManastormAdminConfig,
stampManastormReviewMetadata,
} from "./manastorm-config.mjs";
const global = {
enabled: true,
levelingEnabled: true,
endgameEnabled: true,
affixesEnabled: true,
chaoticLinkEnabled: true,
milestoneEncountersEnabled: true,
};
test("migrates schema-v1 Manastorm configuration and preserves records", () => {
const migrated = normalizeManastormAdminConfig({
schemaVersion: 1,
global,
dungeonSpawns: {
deadmines: { footPosition: [1, 2, 3], yaw: 0.25 },
},
bosses: {
"boss:key": { status: "not-ready" },
},
});
assert.equal(migrated.schemaVersion, MANASTORM_ADMIN_CONFIG_SCHEMA_VERSION);
assert.deepEqual(migrated.dungeons, {});
assert.deepEqual(migrated.dungeonSpawns.deadmines, { footPosition: [1, 2, 3], yaw: 0.25 });
assert.equal(migrated.bosses["boss:key"].status, "not-ready");
});
test("accepts valid dungeon readiness and rejects invalid values", () => {
const normalized = normalizeManastormAdminConfig({
schemaVersion: 2,
global,
dungeonSpawns: {},
dungeons: { deadmines: { status: "ready" } },
bosses: {},
});
assert.equal(normalized.dungeons.deadmines.status, "ready");
assert.throws(() => normalizeManastormAdminConfig({
schemaVersion: 2,
global,
dungeonSpawns: {},
dungeons: { deadmines: { status: "unknown" } },
bosses: {},
}), /status is invalid/);
});
test("normalizes review notes and rejects oversized comments", () => {
const normalized = normalizeManastormAdminConfig({
schemaVersion: 2,
global,
dungeonSpawns: {},
dungeons: {
deadmines: {
status: "not-ready",
note: " Door trigger clips.\r\nRetest after the fix. ",
reviewedAt: 1_700_000_000_000,
reviewedBy: "Phenom",
},
},
bosses: {},
});
assert.deepEqual(normalized.dungeons.deadmines, {
status: "not-ready",
note: "Door trigger clips.\nRetest after the fix.",
reviewedAt: 1_700_000_000_000,
reviewedBy: "Phenom",
});
assert.throws(() => normalizeManastormAdminConfig({
schemaVersion: 2,
global,
dungeonSpawns: {},
dungeons: { deadmines: { status: "not-ready", note: "x".repeat(GM_REVIEW_NOTE_MAX_LENGTH + 1) } },
bosses: {},
}), /note must be a string no longer/);
});
test("stamps changed review records and ignores incoming metadata spoofing", () => {
const previous = normalizeManastormAdminConfig({
schemaVersion: 2,
global,
dungeonSpawns: {},
dungeons: {
deadmines: {
status: "not-ready",
note: "Existing note",
reviewedAt: 100,
reviewedBy: "OriginalGM",
},
},
bosses: {},
});
const incoming = normalizeManastormAdminConfig({
...previous,
dungeons: {
deadmines: {
...previous.dungeons.deadmines,
reviewedAt: 999,
reviewedBy: "SpoofedGM",
},
stockades: {
status: "needs-tested",
note: "Check the prison doors.",
reviewedAt: 999,
reviewedBy: "SpoofedGM",
},
},
});
const stamped = stampManastormReviewMetadata(previous, incoming, "Phenom", 200);
assert.deepEqual(stamped.dungeons.deadmines, previous.dungeons.deadmines);
assert.deepEqual(stamped.dungeons.stockades, {
status: "needs-tested",
note: "Check the prison doors.",
reviewedAt: 200,
reviewedBy: "Phenom",
});
});