



























@@ -56,6 +56,30 @@ function getConfigPatchRawPayload(request: ReturnType<typeof vi.fn>): Record<str
5656return JSON.parse(String(requestPayload.raw)) as Record<string, unknown>;
5757}
585859+function getRequestPayload(
60+request: ReturnType<typeof vi.fn>,
61+method: string,
62+): Record<string, unknown> {
63+const call = request.mock.calls.find((entry) => entry[0] === method);
64+if (!call) {
65+throw new Error(`Expected ${method} request`);
66+}
67+const payload = call[1];
68+if (
69+payload === undefined ||
70+payload === null ||
71+typeof payload !== "object" ||
72+Array.isArray(payload)
73+) {
74+throw new Error(`Expected ${method} payload object`);
75+}
76+return payload as Record<string, unknown>;
77+}
78+79+function hasRequestMethodCall(request: ReturnType<typeof vi.fn>, method: string): boolean {
80+return request.mock.calls.some((entry) => entry[0] === method);
81+}
82+5983describe("dreaming controller", () => {
6084it("loads and normalizes dreaming status from doctor.memory.status", async () => {
6185const { state, request } = createState();
@@ -163,35 +187,26 @@ describe("dreaming controller", () => {
163187await loadDreamingStatus(state);
164188165189expect(request).toHaveBeenCalledWith("doctor.memory.status", {});
166-expect(state.dreamingStatus).toEqual(
167-expect.objectContaining({
168-enabled: true,
169-shortTermCount: 8,
170-groundedSignalCount: 5,
171-totalSignalCount: 20,
172-phaseSignalCount: 11,
173-promotedToday: 2,
174-shortTermEntries: [
175-expect.objectContaining({
176-snippet: "Emma prefers shorter, lower-pressure check-ins.",
177-totalSignalCount: 3,
178-groundedCount: 1,
179-phaseHitCount: 3,
180-}),
181-],
182-promotedEntries: [
183-expect.objectContaining({
184-snippet: "Use the Happy Together calendar for flights.",
185-}),
186-],
187-phases: expect.objectContaining({
188-deep: expect.objectContaining({
189-minScore: 0.8,
190-nextRunAtMs: 23456,
191-}),
192-}),
193-}),
190+const status = state.dreamingStatus;
191+expect(status?.enabled).toBe(true);
192+expect(status?.shortTermCount).toBe(8);
193+expect(status?.groundedSignalCount).toBe(5);
194+expect(status?.totalSignalCount).toBe(20);
195+expect(status?.phaseSignalCount).toBe(11);
196+expect(status?.promotedToday).toBe(2);
197+expect(status?.shortTermEntries).toHaveLength(1);
198+expect(status?.shortTermEntries[0]?.snippet).toBe(
199+"Emma prefers shorter, lower-pressure check-ins.",
200+);
201+expect(status?.shortTermEntries[0]?.totalSignalCount).toBe(3);
202+expect(status?.shortTermEntries[0]?.groundedCount).toBe(1);
203+expect(status?.shortTermEntries[0]?.phaseHitCount).toBe(3);
204+expect(status?.promotedEntries).toHaveLength(1);
205+expect(status?.promotedEntries[0]?.snippet).toBe(
206+"Use the Happy Together calendar for flights.",
194207);
208+expect(status?.phases?.deep?.minScore).toBe(0.8);
209+expect(status?.phases?.deep?.nextRunAtMs).toBe(23456);
195210expect(state.dreamingStatusLoading).toBe(false);
196211expect(state.dreamingStatusError).toBeNull();
197212});
@@ -219,11 +234,7 @@ describe("dreaming controller", () => {
219234220235await loadDreamingStatus(state);
221236222-expect(state.dreamingStatus).toEqual(
223-expect.objectContaining({
224-enabled: true,
225-}),
226-);
237+expect(state.dreamingStatus?.enabled).toBe(true);
227238expect(state.dreamingStatus?.phases).toBeUndefined();
228239expect(state.dreamingStatusError).toBeNull();
229240});
@@ -289,19 +300,12 @@ describe("dreaming controller", () => {
289300await loadWikiImportInsights(state);
290301291302expect(request).toHaveBeenCalledWith("wiki.importInsights", {});
292-expect(state.wikiImportInsights).toEqual(
293-expect.objectContaining({
294-totalItems: 2,
295-totalClusters: 1,
296-clusters: [
297-expect.objectContaining({
298-key: "topic/travel",
299-itemCount: 2,
300-withheldCount: 1,
301-}),
302-],
303-}),
304-);
303+expect(state.wikiImportInsights?.totalItems).toBe(2);
304+expect(state.wikiImportInsights?.totalClusters).toBe(1);
305+expect(state.wikiImportInsights?.clusters).toHaveLength(1);
306+expect(state.wikiImportInsights?.clusters[0]?.key).toBe("topic/travel");
307+expect(state.wikiImportInsights?.clusters[0]?.itemCount).toBe(2);
308+expect(state.wikiImportInsights?.clusters[0]?.withheldCount).toBe(1);
305309expect(state.wikiImportInsightsError).toBeNull();
306310expect(state.wikiImportInsightsLoading).toBe(false);
307311});
@@ -330,12 +334,8 @@ describe("dreaming controller", () => {
330334await loadWikiImportInsights(state);
331335332336expect(request).toHaveBeenCalledWith("wiki.importInsights", {});
333-expect(state.wikiImportInsights).toEqual(
334-expect.objectContaining({
335-totalItems: 1,
336-totalClusters: 1,
337-}),
338-);
337+expect(state.wikiImportInsights?.totalItems).toBe(1);
338+expect(state.wikiImportInsights?.totalClusters).toBe(1);
339339expect(state.wikiImportInsightsError).toBeNull();
340340expect(state.wikiImportInsightsLoading).toBe(false);
341341});
@@ -454,24 +454,16 @@ describe("dreaming controller", () => {
454454await loadWikiMemoryPalace(state);
455455456456expect(request).toHaveBeenCalledWith("wiki.palace", {});
457-expect(state.wikiMemoryPalace).toEqual(
458-expect.objectContaining({
459-totalItems: 2,
460-totalClaims: 3,
461-clusters: [
462-expect.objectContaining({
463-key: "synthesis",
464-label: "Syntheses",
465-items: [
466-expect.objectContaining({
467-title: "Travel system",
468-claims: ["prefers direct receipts"],
469-}),
470-],
471-}),
472-],
473-}),
474-);
457+expect(state.wikiMemoryPalace?.totalItems).toBe(2);
458+expect(state.wikiMemoryPalace?.totalClaims).toBe(3);
459+expect(state.wikiMemoryPalace?.clusters).toHaveLength(1);
460+expect(state.wikiMemoryPalace?.clusters[0]?.key).toBe("synthesis");
461+expect(state.wikiMemoryPalace?.clusters[0]?.label).toBe("Syntheses");
462+expect(state.wikiMemoryPalace?.clusters[0]?.items).toHaveLength(1);
463+expect(state.wikiMemoryPalace?.clusters[0]?.items[0]?.title).toBe("Travel system");
464+expect(state.wikiMemoryPalace?.clusters[0]?.items[0]?.claims).toEqual([
465+"prefers direct receipts",
466+]);
475467expect(state.wikiMemoryPalaceError).toBeNull();
476468expect(state.wikiMemoryPalaceLoading).toBe(false);
477469});
@@ -501,12 +493,8 @@ describe("dreaming controller", () => {
501493await loadWikiMemoryPalace(state);
502494503495expect(request).toHaveBeenCalledWith("wiki.palace", {});
504-expect(state.wikiMemoryPalace).toEqual(
505-expect.objectContaining({
506-totalItems: 1,
507-totalClaims: 2,
508-}),
509-);
496+expect(state.wikiMemoryPalace?.totalItems).toBe(1);
497+expect(state.wikiMemoryPalace?.totalClaims).toBe(2);
510498expect(state.wikiMemoryPalaceError).toBeNull();
511499expect(state.wikiMemoryPalaceLoading).toBe(false);
512500});
@@ -599,13 +587,9 @@ describe("dreaming controller", () => {
599587const ok = await updateDreamingEnabled(state, false);
600588601589expect(ok).toBe(true);
602-expect(request).toHaveBeenCalledWith(
603-"config.patch",
604-expect.objectContaining({
605-baseHash: "hash-1",
606-sessionKey: "main",
607-}),
608-);
590+const patchPayload = getRequestPayload(request, "config.patch");
591+expect(patchPayload.baseHash).toBe("hash-1");
592+expect(patchPayload.sessionKey).toBe("main");
609593expect(getConfigPatchRawPayload(request)).toEqual({
610594plugins: {
611595entries: {
@@ -692,7 +676,7 @@ describe("dreaming controller", () => {
692676expect(request).toHaveBeenCalledWith("config.schema.lookup", {
693677path: "plugins.entries.memory-lancedb.config",
694678});
695-expect(request).not.toHaveBeenCalledWith("config.patch", expect.anything());
679+expect(hasRequestMethodCall(request, "config.patch")).toBe(false);
696680expect(state.dreamingStatusError).toContain("memory-lancedb");
697681expect(state.dreamingStatusError).toContain("does not support dreaming settings");
698682});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。