Refactor org web content and simplify shared UI
All checks were successful
Build Org Website / build (push) Successful in 44s
All checks were successful
Build Org Website / build (push) Successful in 44s
This commit is contained in:
70
tests/archive-world-state.test.cjs
Normal file
70
tests/archive-world-state.test.cjs
Normal file
@@ -0,0 +1,70 @@
|
||||
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, []);
|
||||
});
|
||||
Reference in New Issue
Block a user