对话、星盘、星历、报告进同一 (app) 外壳,列表只拉一次。服务端不再列出空咨询;新建复用已有空会话。新标题改成「生时校正 · M月D日」,侧栏副标题用创建时间。
38 lines
1.8 KiB
TypeScript
38 lines
1.8 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { readFileSync } from "node:fs";
|
|
import test from "node:test";
|
|
|
|
const provider = readFileSync(new URL("../src/lib/session-list-context.tsx", import.meta.url), "utf8");
|
|
const layout = readFileSync(new URL("../src/app/(app)/layout.tsx", import.meta.url), "utf8");
|
|
const page = readFileSync(new URL("../src/app/(app)/page.tsx", import.meta.url), "utf8");
|
|
const sessionHook = readFileSync(new URL("../src/hooks/use-session-management.ts", import.meta.url), "utf8");
|
|
|
|
test("the app layout owns one SessionListProvider and one SidebarProvider", () => {
|
|
assert.match(layout, /<SessionListProvider>/);
|
|
assert.equal(layout.match(/<SessionListProvider>/g)?.length, 1);
|
|
assert.match(layout, /<SidebarProvider escapeBlocked=\{registration\?\.escapeBlocked \?\? false\}>/);
|
|
assert.equal(layout.match(/<SidebarProvider/g)?.length, 1);
|
|
assert.match(layout, /<AppSidebar/);
|
|
assert.doesNotMatch(page, /<SidebarProvider/);
|
|
assert.doesNotMatch(page, /<AppSidebar/);
|
|
});
|
|
|
|
test("the provider fetches the session list once and home does not fetch it again", () => {
|
|
assert.match(provider, /fetch\(`\/api\/sessions\?limit=\$\{SESSION_PAGE_SIZE\}`/);
|
|
assert.match(provider, /fetch\("\/api\/account"/);
|
|
assert.match(page, /await sessionListReady;/);
|
|
assert.doesNotMatch(page, /fetchSessions\(/);
|
|
assert.doesNotMatch(page, /fetchAccount\(/);
|
|
assert.match(page, /useHomeShellRegistration\(/);
|
|
});
|
|
|
|
test("a 401 clears the list and marks signedOut", () => {
|
|
assert.match(provider, /sessionResponse\.status === 401 \|\| accountResponse\.status === 401/);
|
|
assert.match(provider, /signedOut: true/);
|
|
assert.doesNotMatch(provider, /localStorage|sessionStorage|document\.cookie|indexedDB/i);
|
|
});
|
|
|
|
test("session writes no longer invalidate a second cache", () => {
|
|
assert.doesNotMatch(sessionHook, /invalidateSidebarCache/);
|
|
});
|