feat: 收口 Rust Web 3000 主链

This commit is contained in:
lix-2026
2026-05-11 13:16:34 +08:00
parent 7f3f7d4e2f
commit 17c003976b
61 changed files with 2090 additions and 2256 deletions
@@ -37,7 +37,7 @@ function buildSidebarData(documents: DocumentRecord[]): SidebarInitialData {
function Harness(props: {
initialData: SidebarInitialData;
sidebarQueryData: SidebarInitialData;
sidebarQueryData: SidebarInitialData | null;
treeStreamData: SidebarInitialData | null;
treeStreamStatus?: "idle" | "connecting" | "live" | "fallback";
onState: (state: ReturnType<typeof usePreferredSidebarSnapshot>) => void;
@@ -174,4 +174,45 @@ describe("usePreferredSidebarSnapshot", () => {
}),
});
});
it("fallback 且 query 不可用时应回到 initial 快照,而不是继续复用旧 stream 数据", async () => {
const initialData = buildSidebarData([buildDocument({ title: "初始标题" })]);
const staleTreeStream = buildSidebarData([
buildDocument({
title: "旧 stream 标题",
updated_at: "2026-04-21T00:00:01.000Z",
}),
]);
await act(async () => {
root.render(
<Harness
initialData={initialData}
sidebarQueryData={initialData}
treeStreamData={staleTreeStream}
treeStreamStatus="live"
onState={onState}
/>,
);
});
await act(async () => {
root.render(
<Harness
initialData={initialData}
sidebarQueryData={null}
treeStreamData={staleTreeStream}
treeStreamStatus="fallback"
onState={onState}
/>,
);
});
expect(onState.mock.lastCall?.[0]).toMatchObject({
source: "initial",
data: expect.objectContaining({
kernelSidebarTree: [expect.objectContaining({ title: "初始标题" })],
}),
});
});
});