Files
plainleaf/client/components/plainleaf_workspace.test.ts
T
wushenghua c4c622b204
CI / config (push) Canceled after 0s
CI / test-frontend (push) Canceled after 0s
CI / test-rust (push) Canceled after 0s
CI / test-e2e (push) Canceled after 0s
CI / test-e2e-release (push) Canceled after 0s
CI / build (push) Canceled after 0s
CI / release (push) Canceled after 0s
CI / docker (push) Canceled after 0s
CI / docker-website (push) Canceled after 0s
feat: add Plainleaf workspace shell
2026-08-12 11:21:34 +08:00

72 lines
1.8 KiB
TypeScript

import { expect, test } from "vitest";
import type { PageMeta } from "@silverbulletmd/silverbullet/type/index";
import { buildPageTree } from "./plainleaf_workspace.tsx";
function page(name: string, extra: Partial<PageMeta> = {}): PageMeta {
return {
ref: name,
tag: "page",
name,
created: "2026-08-12T00:00:00Z",
lastModified: "2026-08-12T00:00:00Z",
perm: "rw",
...extra,
};
}
test("builds nested folders from slash-separated page names", () => {
const tree = buildPageTree([
page("Inbox"),
page("Projects/Plainleaf/Plan"),
page("Projects/Plainleaf/Research"),
page("Projects/Website"),
]);
expect(tree.map((node) => [node.kind, node.name])).toEqual([
["folder", "Projects"],
["page", "Inbox"],
]);
expect(tree[0]).toMatchObject({
kind: "folder",
name: "Projects",
children: [
{
kind: "folder",
name: "Plainleaf",
children: [
{ kind: "page", name: "Projects/Plainleaf/Plan", label: "Plan" },
{
kind: "page",
name: "Projects/Plainleaf/Research",
label: "Research",
},
],
},
{ kind: "page", name: "Projects/Website", label: "Website" },
],
});
});
test("keeps a page and a same-named folder as separate nodes", () => {
const tree = buildPageTree([page("Projects"), page("Projects/Plan")]);
expect(tree).toMatchObject([
{
kind: "folder",
name: "Projects",
children: [{ kind: "page", name: "Projects/Plan" }],
},
{ kind: "page", name: "Projects" },
]);
});
test("omits aspiring and decorated hidden pages", () => {
const tree = buildPageTree([
page("Visible"),
page("Aspiring", { _isAspiring: true }),
page("Hidden", { pageDecoration: { hide: true } }),
]);
expect(tree).toMatchObject([{ kind: "page", name: "Visible" }]);
});