From e9f6a2ce52ff61b6650d02a6a6141581355c0996 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 18 Feb 2026 16:59:43 +0000 Subject: [PATCH] refactor(web-test): share mock listener harness --- src/web/auto-reply.test-harness.ts | 12 ++++++++++++ .../auto-reply.typing-controller-idle.test.ts | 15 ++------------- ...resses-common-formats-jpeg-cap.e2e.test.ts | 19 ++++--------------- 3 files changed, 18 insertions(+), 28 deletions(-) diff --git a/src/web/auto-reply.test-harness.ts b/src/web/auto-reply.test-harness.ts index d1b0aefb6ce..676042436fa 100644 --- a/src/web/auto-reply.test-harness.ts +++ b/src/web/auto-reply.test-harness.ts @@ -162,6 +162,18 @@ export function createWebListenerFactoryCapture(): AnyExport { }; } +export function createMockWebListener() { + return { + close: vi.fn(async () => undefined), + onClose: new Promise(() => {}), + signalClose: vi.fn(), + sendMessage: vi.fn(async () => ({ messageId: "msg-1" })), + sendPoll: vi.fn(async () => ({ messageId: "poll-1" })), + sendReaction: vi.fn(async () => undefined), + sendComposingTo: vi.fn(async () => undefined), + }; +} + export function createWebInboundDeliverySpies(): AnyExport { return { sendMedia: vi.fn(), diff --git a/src/web/auto-reply.typing-controller-idle.test.ts b/src/web/auto-reply.typing-controller-idle.test.ts index 32d66c69e2f..223a2d3ac1b 100644 --- a/src/web/auto-reply.typing-controller-idle.test.ts +++ b/src/web/auto-reply.typing-controller-idle.test.ts @@ -3,6 +3,7 @@ import { describe, expect, it, vi } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; import { monitorWebChannel } from "./auto-reply.js"; import { + createMockWebListener, installWebAutoReplyTestHomeHooks, installWebAutoReplyUnitTestHooks, resetLoadConfigMock, @@ -11,18 +12,6 @@ import { installWebAutoReplyTestHomeHooks(); -function createMockListener() { - return { - close: vi.fn(async () => undefined), - onClose: new Promise(() => {}), - signalClose: vi.fn(), - sendMessage: vi.fn(async () => ({ messageId: "msg-1" })), - sendPoll: vi.fn(async () => ({ messageId: "poll-1" })), - sendReaction: vi.fn(async () => undefined), - sendComposingTo: vi.fn(async () => undefined), - }; -} - describe("typing controller idle", () => { installWebAutoReplyUnitTestHooks(); @@ -70,7 +59,7 @@ describe("typing controller idle", () => { reply, sendMedia, }); - return createMockListener(); + return createMockWebListener(); }, false, replyResolver, diff --git a/src/web/auto-reply.web-auto-reply.compresses-common-formats-jpeg-cap.e2e.test.ts b/src/web/auto-reply.web-auto-reply.compresses-common-formats-jpeg-cap.e2e.test.ts index 78c2d0bb551..1a5d481476f 100644 --- a/src/web/auto-reply.web-auto-reply.compresses-common-formats-jpeg-cap.e2e.test.ts +++ b/src/web/auto-reply.web-auto-reply.compresses-common-formats-jpeg-cap.e2e.test.ts @@ -3,6 +3,7 @@ import sharp from "sharp"; import { describe, expect, it, vi } from "vitest"; import { monitorWebChannel } from "./auto-reply.js"; import { + createMockWebListener, installWebAutoReplyTestHomeHooks, installWebAutoReplyUnitTestHooks, resetLoadConfigMock, @@ -16,18 +17,6 @@ describe("web auto-reply", () => { installWebAutoReplyUnitTestHooks({ pinDns: true }); type ListenerFactory = NonNullable[1]>; - function createMockListener() { - return { - close: vi.fn(async () => undefined), - onClose: new Promise(() => {}), - signalClose: vi.fn(), - sendMessage: vi.fn(async () => ({ messageId: "msg-1" })), - sendPoll: vi.fn(async () => ({ messageId: "poll-1" })), - sendReaction: vi.fn(async () => undefined), - sendComposingTo: vi.fn(async () => undefined), - }; - } - async function setupSingleInboundMessage(params: { resolverValue: { text: string; mediaUrl: string }; sendMedia: ReturnType; @@ -40,7 +29,7 @@ describe("web auto-reply", () => { let capturedOnMessage: ((msg: WebInboundMessage) => Promise) | undefined; const listenerFactory: ListenerFactory = async ({ onMessage }) => { capturedOnMessage = onMessage; - return createMockListener(); + return createMockWebListener(); }; await monitorWebChannel(false, listenerFactory, false, resolver); @@ -127,7 +116,7 @@ describe("web auto-reply", () => { let capturedOnMessage: ((msg: WebInboundMessage) => Promise) | undefined; const listenerFactory: ListenerFactory = async ({ onMessage }) => { capturedOnMessage = onMessage; - return createMockListener(); + return createMockWebListener(); }; const big = await fmt.make(sharedRaw, { width, height }); @@ -185,7 +174,7 @@ describe("web auto-reply", () => { let capturedOnMessage: ((msg: WebInboundMessage) => Promise) | undefined; const listenerFactory: ListenerFactory = async ({ onMessage }) => { capturedOnMessage = onMessage; - return createMockListener(); + return createMockWebListener(); }; const bigPng = await sharp({