From fe71f02187e56f0f57ece9a50e8272db83d75014 Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Fri, 17 Jul 2026 17:58:45 -0700 Subject: [PATCH] test: preserve default getTask mock for DUPLICATE recovery (#2275) Address CodeRabbit review: non-canonical getTask lookups should return a default current-task fixture instead of undefined, so recovery paths that re-fetch the subject task cannot NPE. --- .../triage-finalize-duplicate-lineage.test.ts | 27 ++++++++++++------- .../triage-split-into-subtasks-delete.test.ts | 16 +++++++---- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/packages/engine/src/__tests__/triage-finalize-duplicate-lineage.test.ts b/packages/engine/src/__tests__/triage-finalize-duplicate-lineage.test.ts index 5d998d3ac..bdc432295 100644 --- a/packages/engine/src/__tests__/triage-finalize-duplicate-lineage.test.ts +++ b/packages/engine/src/__tests__/triage-finalize-duplicate-lineage.test.ts @@ -113,11 +113,17 @@ describe("triage finalize duplicate lineage", () => { */ const store = createMockStore({ getSettings: vi.fn().mockResolvedValue({ requirePlanApproval: false, triageDuplicateResolution: "delete" } as Settings), - getTask: vi.fn().mockImplementation(async (id: string) => ( - id === "FN-4894" - ? createTask({ id: "FN-4894", title: "Canonical", column: "todo", status: null }) - : undefined - )), + /* + FNXC:EngineTests 2026-07-17-18:10: + PR #2275 review: preserve a default current-task mock for non-canonical IDs. + Returning undefined for FN-001 risks NPEs if recovery re-fetches the subject task. + */ + getTask: vi.fn().mockImplementation(async (id: string) => { + if (id === "FN-4894") { + return createTask({ id: "FN-4894", title: "Canonical", column: "todo", status: null }); + } + return createTask({ id: "FN-001" }); + }), }); await runRecovery(createTask(), "DUPLICATE: FN-4894\n", store); @@ -132,11 +138,12 @@ describe("triage finalize duplicate lineage", () => { it("flags and parks DUPLICATE markers under default prompt resolution", async () => { const store = createMockStore({ - getTask: vi.fn().mockImplementation(async (id: string) => ( - id === "FN-4894" - ? createTask({ id: "FN-4894", title: "Canonical", column: "todo", status: null }) - : undefined - )), + getTask: vi.fn().mockImplementation(async (id: string) => { + if (id === "FN-4894") { + return createTask({ id: "FN-4894", title: "Canonical", column: "todo", status: null }); + } + return createTask({ id: "FN-001" }); + }), }); await runRecovery(createTask(), "DUPLICATE: FN-4894\n", store); diff --git a/packages/engine/src/__tests__/triage-split-into-subtasks-delete.test.ts b/packages/engine/src/__tests__/triage-split-into-subtasks-delete.test.ts index 64107d2a9..071ccdf18 100644 --- a/packages/engine/src/__tests__/triage-split-into-subtasks-delete.test.ts +++ b/packages/engine/src/__tests__/triage-split-into-subtasks-delete.test.ts @@ -165,11 +165,17 @@ describe("triage split/delete lineage forwarding", () => { autoMerge: true, triageDuplicateResolution: "delete", } as Settings), - getTask: vi.fn().mockImplementation(async (id: string) => ( - id === "FN-4894" - ? createTask({ id: "FN-4894", title: "Canonical", column: "todo", status: null }) - : undefined - )), + /* + FNXC:EngineTests 2026-07-17-18:10: + PR #2275 review: keep the createStore default current-task mock for non-canonical + IDs. Returning undefined risks NPEs if recovery re-fetches FN-001 mid-path. + */ + getTask: vi.fn().mockImplementation(async (id: string) => { + if (id === "FN-4894") { + return createTask({ id: "FN-4894", title: "Canonical", column: "todo", status: null }); + } + return createTask({ attachments: [], comments: [] } as any); + }), deleteTask: vi.fn().mockResolvedValue(undefined), });