diff --git a/tests/js/gallery-settings.test.js b/tests/js/gallery-settings.test.js new file mode 100644 index 0000000..44098a5 --- /dev/null +++ b/tests/js/gallery-settings.test.js @@ -0,0 +1,57 @@ +// Run with: node --test tests/js/ +const test = require("node:test"); +const assert = require("node:assert/strict"); +const { + DEFAULT_SETTINGS, + normalizeGallerySettings, + gridColumnsStyle, + LIMIT_OPTIONS, +} = require("../../web/js/gallery-settings.js"); + +test("defaults are a complete, sane settings object", () => { + const s = normalizeGallerySettings(null); + assert.deepEqual(s, DEFAULT_SETTINGS); + assert.equal(s.defaultViewMode, "grid"); + assert.equal(s.defaultLimit, 100); + assert.equal(s.gridColumns, 8); + assert.equal(s.showImageInfo, true); + assert.equal(s.sidebarCollapsedByDefault, false); +}); + +test("stored values override defaults and unknown keys are kept", () => { + const s = normalizeGallerySettings({ defaultViewMode: "list", defaultLimit: 500, gridColumns: 10, showImageInfo: false, videoLoop: false, extra: 1 }); + assert.equal(s.defaultViewMode, "list"); + assert.equal(s.defaultLimit, 500); + assert.equal(s.gridColumns, 10); + assert.equal(s.showImageInfo, false); + assert.equal(s.videoLoop, false); + assert.equal(s.extra, 1); +}); + +test("invalid stored values fall back to defaults instead of breaking the page", () => { + const s = normalizeGallerySettings({ defaultViewMode: "mosaic", defaultLimit: 7, gridColumns: "lots", showImageInfo: "no" }); + assert.equal(s.defaultViewMode, "grid"); + assert.equal(s.defaultLimit, 100); + assert.equal(s.gridColumns, 8); + assert.equal(s.showImageInfo, true); +}); + +test("numeric strings from