diff --git a/extensions/signal/src/monitor.tool-result.test-harness.ts b/extensions/signal/src/monitor.tool-result.test-harness.ts index 6995e71320e..1611da470c0 100644 --- a/extensions/signal/src/monitor.tool-result.test-harness.ts +++ b/extensions/signal/src/monitor.tool-result.test-harness.ts @@ -1,7 +1,7 @@ -import { resetSystemEventsForTest } from "openclaw/plugin-sdk/infra-runtime"; -import { resetInboundDedupe } from "openclaw/plugin-sdk/reply-runtime"; import type { MockFn } from "openclaw/plugin-sdk/testing"; import { beforeEach, vi } from "vitest"; +import { resetInboundDedupe } from "../../../src/auto-reply/reply/inbound-dedupe.js"; +import { resetSystemEventsForTest } from "../../../src/infra/system-events.js"; import type { SignalDaemonExitEvent, SignalDaemonHandle } from "./daemon.js"; type SignalToolResultTestMocks = { @@ -73,6 +73,10 @@ vi.mock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => { return { ...actual, loadConfig: () => config, + resolveStorePath: vi.fn(() => "/tmp/openclaw-sessions.json"), + updateLastRoute: (...args: unknown[]) => updateLastRouteMock(...args), + readSessionUpdatedAt: vi.fn(() => undefined), + recordSessionMetaFromInbound: vi.fn().mockResolvedValue(undefined), }; }); @@ -81,28 +85,51 @@ vi.mock("openclaw/plugin-sdk/reply-runtime", async (importOriginal) => { return { ...actual, getReplyFromConfig: (...args: unknown[]) => replyMock(...args), + dispatchInboundMessage: async (params: { + ctx: unknown; + cfg: unknown; + dispatcher: { + sendFinalReply: (payload: { text: string }) => boolean; + markComplete?: () => void; + waitForIdle?: () => Promise; + }; + }) => { + const resolved = await replyMock(params.ctx, {}, params.cfg); + const text = typeof resolved?.text === "string" ? resolved.text.trim() : ""; + if (text) { + params.dispatcher.sendFinalReply({ text }); + } + params.dispatcher.markComplete?.(); + await params.dispatcher.waitForIdle?.(); + return { queuedFinal: Boolean(text) }; + }, }; }); -vi.mock("./send.js", () => ({ - sendMessageSignal: (...args: unknown[]) => sendMock(...args), - sendTypingSignal: vi.fn().mockResolvedValue(true), - sendReadReceiptSignal: vi.fn().mockResolvedValue(true), -})); - -vi.mock("openclaw/plugin-sdk/conversation-runtime", () => ({ - readChannelAllowFromStore: (...args: unknown[]) => readAllowFromStoreMock(...args), - upsertChannelPairingRequest: (...args: unknown[]) => upsertPairingRequestMock(...args), -})); - -vi.mock("openclaw/plugin-sdk/config-runtime", async (importOriginal) => { - const actual = await importOriginal(); +vi.mock("./send.js", async (importOriginal) => { + const actual = await importOriginal(); return { ...actual, - resolveStorePath: vi.fn(() => "/tmp/openclaw-sessions.json"), - updateLastRoute: (...args: unknown[]) => updateLastRouteMock(...args), - readSessionUpdatedAt: vi.fn(() => undefined), - recordSessionMetaFromInbound: vi.fn().mockResolvedValue(undefined), + sendMessageSignal: (...args: unknown[]) => sendMock(...args), + sendTypingSignal: vi.fn().mockResolvedValue(true), + sendReadReceiptSignal: vi.fn().mockResolvedValue(true), + }; +}); + +vi.mock("openclaw/plugin-sdk/conversation-runtime", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + readChannelAllowFromStore: (...args: unknown[]) => readAllowFromStoreMock(...args), + upsertChannelPairingRequest: (...args: unknown[]) => upsertPairingRequestMock(...args), + }; +}); + +vi.mock("openclaw/plugin-sdk/security-runtime", async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + readStoreAllowFromForDmPolicy: (...args: unknown[]) => readAllowFromStoreMock(...args), }; });