Files
deerflow-code/frontend-web/src/core/page-layout/compact-menu-overrides.test.ts
T

109 lines
3.3 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import {
applyCompactMenuOverrides,
isDefaultCompactMenuType,
normalizeCompactMenuType,
preserveUnknownCompactMenuOverrides,
snapshotCompactMenuOverrides,
} from "./compact-menu-overrides";
import type { MenuItem } from "./sidebar-menu";
const I = (() => null) as unknown as MenuItem["icon"];
test("normalizeCompactMenuType defaults to A", () => {
assert.equal(normalizeCompactMenuType(undefined), "A");
assert.equal(normalizeCompactMenuType(""), "A");
assert.equal(normalizeCompactMenuType("default"), "A");
assert.equal(normalizeCompactMenuType("b"), "B");
assert.equal(normalizeCompactMenuType("2"), "B");
assert.equal(normalizeCompactMenuType("alt"), "B");
assert.equal(isDefaultCompactMenuType(undefined), true);
assert.equal(isDefaultCompactMenuType(""), true);
assert.equal(isDefaultCompactMenuType("B"), false);
});
test("applyCompactMenuOverrides splits sidebar, settings, and toolbox", () => {
const items: MenuItem[] = [
{ id: "a", label: "对话", icon: I, path: "/a" },
{ id: "b", label: "智能体", icon: I, path: "/b" },
{ id: "c", label: "技能", icon: I, path: "/c" },
];
const applied = applyCompactMenuOverrides(items, [
{ nodeId: "b", placement: "settings", sortOrder: 0, label: "智能体设置" },
{ nodeId: "c", placement: "toolbox", sortOrder: 0, label: "技能工具" },
]);
assert.deepEqual(
applied.sidebarItems.map((item) => item.id),
["a"],
);
assert.equal(applied.settingsItems[0]?.id, "b");
assert.equal(applied.settingsItems[0]?.label, "智能体设置");
assert.equal(applied.toolboxItems[0]?.id, "c");
assert.equal(applied.toolboxItems[0]?.label, "技能工具");
});
test("snapshotCompactMenuOverrides keeps every personal item and lane order", () => {
const items = [
{
id: "a",
label: "我的对话",
defaultLabel: "对话",
defaultIndex: 0,
compactPlacement: "sidebar" as const,
compactOrder: 0,
icon: I,
path: "/a",
},
{
id: "b",
label: "我的工具",
defaultLabel: "工具",
defaultIndex: 1,
compactPlacement: "toolbox" as const,
compactOrder: 0,
icon: I,
path: "/b",
},
{
id: "c",
label: "设置",
defaultLabel: "设置",
defaultIndex: 2,
compactPlacement: "sidebar" as const,
compactOrder: 1,
icon: I,
path: "/c",
},
];
assert.deepEqual(
snapshotCompactMenuOverrides(items).map((item) => [item.nodeId, item.placement, item.sortOrder]),
[
["a", "sidebar", 0],
["b", "toolbox", 0],
["c", "sidebar", 1],
],
);
assert.equal(snapshotCompactMenuOverrides(items)[0]?.label, "我的对话");
});
test("personal compact snapshot preserves a temporarily absent old item", () => {
const visible = snapshotCompactMenuOverrides([
{
id: "a",
label: "对话",
defaultLabel: "对话",
defaultIndex: 0,
compactPlacement: "sidebar",
compactOrder: 0,
icon: I,
path: "/a",
},
]);
const combined = preserveUnknownCompactMenuOverrides(visible, [
{ nodeId: "temporarily-hidden", placement: "toolbox", sortOrder: 0, label: "旧工具" },
]);
assert.deepEqual(combined.map((item) => item.nodeId), ["a", "temporarily-hidden"]);
});