Files
mnote/wolai-frontend/src/lib/documents/page-subtree-response.test.ts
T

108 lines
2.8 KiB
TypeScript
Raw Normal View History

import { describe, expect, it } from "vitest";
import { normalizeDocumentContentResponse } from "@/lib/documents/page-subtree-response";
import type { PageSubtreeProjection } from "@/lib/documents/page-subtree";
describe("page subtree response helpers", () => {
it("保留服务端返回的 pageSubtree", () => {
const serverPageSubtree = {
projectionId: "server_projection",
projection: "page_tree",
rootNodeId: "doc_1",
rootNode: {
id: "doc_1",
parentNodeId: null,
nodeType: "page",
blockId: null,
anchorBlockId: null,
depth: 0,
metadata: {
title: "服务端标题",
textSnippet: null,
blockType: null,
headingLevel: null,
numbering: null,
childCount: 0,
order: 0,
path: ["doc_1"],
},
},
subtree: {
rootNodeId: "doc_1",
nodes: [],
},
outline: [],
evidence: [],
stats: {
blockCount: 0,
headingCount: 0,
evidenceCount: 0,
maxDepth: 0,
},
} satisfies PageSubtreeProjection;
const normalized = normalizeDocumentContentResponse({
documentId: "doc_1",
payload: {
content: null,
revision: 1,
conflictDetectionKey: "doc_1:1",
pageSubtree: serverPageSubtree,
},
});
expect(normalized.pageSubtree).toBe(serverPageSubtree);
});
it("在服务端缺失 pageSubtree 时保留空值", () => {
const normalized = normalizeDocumentContentResponse({
documentId: "doc_1",
title: "测试页面",
payload: {
content: [
{
id: "heading_1",
type: "heading",
props: { level: 1 },
content: [{ type: "text", text: "章节一" }],
},
],
revision: 3,
conflictDetectionKey: "doc_1:3",
},
});
expect(normalized.revision).toBe(3);
expect(normalized.conflictDetectionKey).toBe("doc_1:3");
expect(normalized.pageSubtree).toBeNull();
});
2026-05-06 21:44:20 +08:00
it("兼容 mnote-web transport 返回的 result 包装", () => {
const normalized = normalizeDocumentContentResponse({
documentId: "doc_1",
payload: {
result: {
content: [
{
id: "paragraph_1",
type: "paragraph",
content: [{ type: "text", text: "CLI 写入后应可编辑" }],
},
],
revision: 4,
conflictDetectionKey: "doc_1:4",
},
},
});
expect(normalized.content).toEqual([
{
id: "paragraph_1",
type: "paragraph",
content: [{ type: "text", text: "CLI 写入后应可编辑" }],
},
]);
expect(normalized.revision).toBe(4);
expect(normalized.conflictDetectionKey).toBe("doc_1:4");
});
});