Menu
Public repository / 8b66e18ce8cb51ca3e4124f89fd1429a1d4792f3
AkurAI-Mail / src/framework/folder-expand.test.js
Latest change 10d19fe0941c186ec244d1f0e2af6b19200dcb0c - OLI-248: pure webmail logic as plain ES modules with JSDoc types; inline icon module by Ólafur Búi Ólafsson
import { expect, test } from "bun:test";
import { createFolderExpand } from "./folder-expand.js";
/** @param {Record<string, string>} [initial] */
const memoryStorage = (initial = {}) => {
/** @type {Record<string, string>} */
const data = { ...initial };
return {
getItem: (/** @type {string} */ k) => data[k] ?? null,
setItem: (/** @type {string} */ k, /** @type {string} */ v) => { data[k] = v; },
data,
};
};
test("folders default to open", () => {
expect(createFolderExpand(memoryStorage()).isOpen("INBOX")).toBe(true);
});
test("toggle collapses and persists", () => {
const storage = memoryStorage();
const store = createFolderExpand(storage);
store.toggle("INBOX");
expect(store.isOpen("INBOX")).toBe(false);
expect(JSON.parse(storage.data["akurai-mail-folder-expanded"])).toEqual({ INBOX: false });
expect(createFolderExpand(storage).isOpen("INBOX")).toBe(false);
});
test("corrupt or missing storage falls back to empty state", () => {
expect(createFolderExpand(memoryStorage({ "akurai-mail-folder-expanded": "{bad" })).isOpen("A")).toBe(true);
expect(createFolderExpand(undefined).isOpen("A")).toBe(true);
});
test("state snapshot is exposed for tree building", () => {
const store = createFolderExpand(memoryStorage());
store.toggle("A");
expect(store.state()).toEqual({ A: false });
});