diff --git a/src/gateway/server-methods/chat.send-deleted-agent.test.ts b/src/gateway/server-methods/chat.send-deleted-agent.test.ts index 21e51466f27..6e909562a7d 100644 --- a/src/gateway/server-methods/chat.send-deleted-agent.test.ts +++ b/src/gateway/server-methods/chat.send-deleted-agent.test.ts @@ -1,37 +1,19 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import { ErrorCodes } from "../protocol/index.js"; -import type { RespondFn } from "./types.js"; - -const loadSessionEntryMock = vi.fn(); -const resolveDeletedAgentIdFromSessionKeyMock = vi.fn(); - -vi.mock("../session-utils.js", async () => { - const actual = await vi.importActual("../session-utils.js"); - return { - ...actual, - loadSessionEntry: (...args: unknown[]) => loadSessionEntryMock(...args), - resolveDeletedAgentIdFromSessionKey: (...args: unknown[]) => - resolveDeletedAgentIdFromSessionKeyMock(...args), - }; -}); - import { chatHandlers } from "./chat.js"; +import { + mockDeletedAgentSession, + resetDeletedAgentSessionMocks, +} from "./deleted-agent-guard.test-helpers.js"; +import type { RespondFn } from "./types.js"; describe("chat.send deleted-agent guard", () => { beforeEach(() => { - loadSessionEntryMock.mockReset(); - resolveDeletedAgentIdFromSessionKeyMock.mockReset(); + resetDeletedAgentSessionMocks(); }); it("rejects keys belonging to a deleted agent", async () => { - const orphanKey = "agent:deleted-agent:main"; - loadSessionEntryMock.mockReturnValue({ - cfg: {}, - canonicalKey: orphanKey, - storePath: "/tmp/sessions.json", - entry: { sessionId: "sess-orphan" }, - }); - resolveDeletedAgentIdFromSessionKeyMock.mockReturnValue("deleted-agent"); + const orphanKey = mockDeletedAgentSession(); const respond = vi.fn() as unknown as RespondFn; diff --git a/src/gateway/server-methods/deleted-agent-guard.test-helpers.ts b/src/gateway/server-methods/deleted-agent-guard.test-helpers.ts new file mode 100644 index 00000000000..956a31cdfe1 --- /dev/null +++ b/src/gateway/server-methods/deleted-agent-guard.test-helpers.ts @@ -0,0 +1,32 @@ +import { vi } from "vitest"; + +const deletedAgentSessionMocks = vi.hoisted(() => ({ + loadSessionEntry: vi.fn(), + resolveDeletedAgentIdFromSessionKey: vi.fn(), +})); + +vi.mock("../session-utils.js", async () => { + const actual = await vi.importActual("../session-utils.js"); + return { + ...actual, + loadSessionEntry: deletedAgentSessionMocks.loadSessionEntry, + resolveDeletedAgentIdFromSessionKey: + deletedAgentSessionMocks.resolveDeletedAgentIdFromSessionKey, + }; +}); + +export function resetDeletedAgentSessionMocks(): void { + deletedAgentSessionMocks.loadSessionEntry.mockReset(); + deletedAgentSessionMocks.resolveDeletedAgentIdFromSessionKey.mockReset(); +} + +export function mockDeletedAgentSession(orphanKey = "agent:deleted-agent:main"): string { + deletedAgentSessionMocks.loadSessionEntry.mockReturnValue({ + cfg: {}, + canonicalKey: orphanKey, + storePath: "/tmp/sessions.json", + entry: { sessionId: "sess-orphan" }, + }); + deletedAgentSessionMocks.resolveDeletedAgentIdFromSessionKey.mockReturnValue("deleted-agent"); + return orphanKey; +} diff --git a/src/gateway/server-methods/sessions.send-deleted-agent.test.ts b/src/gateway/server-methods/sessions.send-deleted-agent.test.ts index 447cc639467..58f3f2880dd 100644 --- a/src/gateway/server-methods/sessions.send-deleted-agent.test.ts +++ b/src/gateway/server-methods/sessions.send-deleted-agent.test.ts @@ -1,38 +1,20 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import { ErrorCodes } from "../protocol/index.js"; -import type { GatewayRequestContext, RespondFn } from "./types.js"; - -const loadSessionEntryMock = vi.fn(); -const resolveDeletedAgentIdFromSessionKeyMock = vi.fn(); - -vi.mock("../session-utils.js", async () => { - const actual = await vi.importActual("../session-utils.js"); - return { - ...actual, - loadSessionEntry: (...args: unknown[]) => loadSessionEntryMock(...args), - resolveDeletedAgentIdFromSessionKey: (...args: unknown[]) => - resolveDeletedAgentIdFromSessionKeyMock(...args), - }; -}); - +import { + mockDeletedAgentSession, + resetDeletedAgentSessionMocks, +} from "./deleted-agent-guard.test-helpers.js"; import { sessionsHandlers } from "./sessions.js"; +import type { GatewayRequestContext, RespondFn } from "./types.js"; describe("sessions.send / sessions.steer deleted-agent guard", () => { beforeEach(() => { - loadSessionEntryMock.mockReset(); - resolveDeletedAgentIdFromSessionKeyMock.mockReset(); + resetDeletedAgentSessionMocks(); }); for (const method of ["sessions.send", "sessions.steer"] as const) { it(`${method} rejects keys belonging to a deleted agent`, async () => { - const orphanKey = "agent:deleted-agent:main"; - loadSessionEntryMock.mockReturnValue({ - cfg: {}, - canonicalKey: orphanKey, - storePath: "/tmp/sessions.json", - entry: { sessionId: "sess-orphan" }, - }); - resolveDeletedAgentIdFromSessionKeyMock.mockReturnValue("deleted-agent"); + const orphanKey = mockDeletedAgentSession(); const respond = vi.fn() as unknown as RespondFn; const context = {