Files
org_web/tests/archive-world-state.test.cjs
gitea-actions 7afc554f5d
All checks were successful
Build Org Website / build (push) Successful in 44s
Refactor org web content and simplify shared UI
2026-07-29 15:17:17 +01:00

71 lines
2.3 KiB
JavaScript

const test = require("node:test");
const assert = require("node:assert/strict");
const state = require("../assets/scripts/pages/archive-world-state.js");
test("fresh state applies defaults", () => {
assert.deepEqual(state.fresh(" Ada ", "moss"), {
version: 1,
name: "Ada",
palette: "moss",
discovered: [],
complete: false,
position: { x: 640, y: 830 },
soundEnabled: false
});
});
test("names are trimmed, collapsed, and limited to twenty characters", () => {
assert.equal(state.validateName(" Archive Guest "), "Archive Guest");
assert.equal(state.validateName(""), null);
assert.equal(state.validateName("x".repeat(21)), null);
});
test("only declared palettes are accepted", () => {
assert.equal(state.validatePalette("berry"), "berry");
assert.equal(state.validatePalette("ultraviolet"), null);
});
test("discoveries are deduplicated and completion requires all landmarks", () => {
let current = state.fresh("Ada", "brass");
current = state.discover(current, "gate");
current = state.discover(current, "gate");
assert.deepEqual(current.discovered, ["gate"]);
assert.equal(current.complete, false);
for (const id of state.LANDMARK_IDS) current = state.discover(current, id);
assert.equal(current.complete, true);
});
test("normalization filters unknown discoveries and clamps position", () => {
const candidate = {
version: 1,
name: "Zaine",
palette: "brass",
discovered: ["gate", "gate", "missing"],
complete: true,
position: { x: -20, y: 5000 },
soundEnabled: true
};
assert.deepEqual(state.normalize(candidate), {
version: 1,
name: "Zaine",
palette: "brass",
discovered: ["gate"],
complete: false,
position: { x: 36, y: 924 },
soundEnabled: true
});
});
test("parse rejects malformed, unsupported, and incomplete saves", () => {
assert.equal(state.parse("{"), null);
assert.equal(state.parse(JSON.stringify({ version: 2 })), null);
assert.equal(state.parse(JSON.stringify(state.fresh("", "brass"))), null);
});
test("a valid save round-trips and reset creates an empty state", () => {
const saved = state.discover(state.fresh("Mira", "berry"), "garden");
assert.deepEqual(state.parse(JSON.stringify(saved)), saved);
assert.deepEqual(state.fresh("Mira", "berry").discovered, []);
});