AkurAI Build
Menu

Public repository / 10d19fe0941c186ec244d1f0e2af6b19200dcb0c

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 });
});