Files
q-edit/tests/init.prefs.test.mjs
2025-09-02 21:04:17 -04:00

62 lines
1.6 KiB
JavaScript

import { describe, it, expect, beforeEach } from "vitest";
import { initPrefs } from "../scripts/init-prefs.mjs";
function makeSelect(options = ["10", "25", "50", "100"]) {
const sel = document.createElement("select");
sel.id = "items-per-page-dropdown";
for (const v of options) {
const o = document.createElement("option");
o.value = v;
o.textContent = v;
sel.appendChild(o);
}
document.body.appendChild(sel);
return sel;
}
describe("init-prefs DOM binding", () => {
beforeEach(() => {
document.body.innerHTML = "";
localStorage.clear();
});
it("initializes select to default (25) when storage empty", () => {
const sel = makeSelect();
initPrefs();
expect(sel.value).toBe("25");
});
it("respects stored value when option exists", () => {
localStorage.setItem("qedit:itemsPerPage", "50");
const sel = makeSelect();
initPrefs();
expect(sel.value).toBe("50");
});
it("writes back on change and emits event", () => {
const sel = makeSelect();
let seen = null;
document.addEventListener(
"qedit:prefs:updated",
(e) => {
seen = e.detail.itemsPerPage;
},
{ once: true }
);
initPrefs();
sel.value = "100";
sel.dispatchEvent(new Event("change"));
expect(localStorage.getItem("qedit:itemsPerPage")).toBe("100");
expect(seen).toBe(100);
});
it("is idempotent (no double-binding)", () => {
const sel = makeSelect();
initPrefs();
initPrefs();
sel.value = "50";
sel.dispatchEvent(new Event("change"));
expect(localStorage.getItem("qedit:itemsPerPage")).toBe("50");
});
});