import type { MockFn } from "openclaw/plugin-sdk/testing"; import { vi } from "vitest"; export const sendMock: MockFn = vi.fn(); export const reactMock: MockFn = vi.fn(); export const updateLastRouteMock: MockFn = vi.fn(); export const dispatchMock: MockFn = vi.fn(); export const readAllowFromStoreMock: MockFn = vi.fn(); export const upsertPairingRequestMock: MockFn = vi.fn(); vi.mock("./send.js", async (importOriginal) => { const actual = await importOriginal(); return { ...actual, sendMessageDiscord: (...args: unknown[]) => sendMock(...args), reactMessageDiscord: async (...args: unknown[]) => { reactMock(...args); }, }; }); vi.mock("openclaw/plugin-sdk/reply-runtime", async (importOriginal) => { const actual = await importOriginal(); return { ...actual, dispatchInboundMessage: (...args: unknown[]) => dispatchMock(...args), dispatchInboundMessageWithDispatcher: (...args: unknown[]) => dispatchMock(...args), dispatchInboundMessageWithBufferedDispatcher: (...args: unknown[]) => dispatchMock(...args), }; }); function createPairingStoreMocks() { return { readChannelAllowFromStore(...args: unknown[]) { return readAllowFromStoreMock(...args); }, upsertChannelPairingRequest(...args: unknown[]) { return upsertPairingRequestMock(...args); }, }; } vi.mock("openclaw/plugin-sdk/conversation-runtime", async (importOriginal) => { const actual = await importOriginal(); return { ...actual, ...createPairingStoreMocks(), }; }); vi.mock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => { const actual = await importOriginal(); return { ...actual, resolveStorePath: vi.fn(() => "/tmp/openclaw-sessions.json"), updateLastRoute: (...args: unknown[]) => updateLastRouteMock(...args), resolveSessionKey: vi.fn(), }; });