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
72 lines
1.8 KiB
TypeScript
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" }]);
|
|
});
|