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, []); });