From e753fc9cc7dc36a8be0d92af16fbfb6ebaacaaa8 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 20 Apr 2026 15:24:18 +0100 Subject: [PATCH] test: fix ACP and TTS local failures --- src/auto-reply/reply/commands-acp.test.ts | 66 +++++++++++++++++++++++ src/tts/tts.test.ts | 14 +++++ 2 files changed, 80 insertions(+) diff --git a/src/auto-reply/reply/commands-acp.test.ts b/src/auto-reply/reply/commands-acp.test.ts index e0ba5faffe4..fb03b6616f5 100644 --- a/src/auto-reply/reply/commands-acp.test.ts +++ b/src/auto-reply/reply/commands-acp.test.ts @@ -199,6 +199,24 @@ function resolveFirstConversationTargetForTest(params: { return null; } +function parsePrefixedConversationIdForTest( + raw: string | undefined | null, + channel: "bluebubbles" | "imessage", +): string | undefined { + const trimmed = raw + ?.trim() + .replace(new RegExp(`^${channel}:`, "i"), "") + .replace(/^chat_guid:/i, ""); + return trimmed || undefined; +} + +function resolvePrefixedConversationIdForTest( + targets: Array, + channel: "bluebubbles" | "imessage", +): string | undefined { + return targets.map((target) => parsePrefixedConversationIdForTest(target, channel)).find(Boolean); +} + function setMinimalAcpCommandRegistryForTests(): void { setActivePluginRegistry( createTestRegistry([ @@ -300,6 +318,54 @@ function setMinimalAcpCommandRegistryForTests(): void { }, }, }, + { + pluginId: "bluebubbles", + source: "test", + plugin: { + ...createChannelTestPluginBase({ id: "bluebubbles", label: "BlueBubbles" }), + bindings: { + resolveCommandConversation: ({ + originatingTo, + commandTo, + fallbackTo, + }: { + originatingTo?: string; + commandTo?: string; + fallbackTo?: string; + }) => { + const conversationId = resolvePrefixedConversationIdForTest( + [originatingTo, commandTo, fallbackTo], + "bluebubbles", + ); + return conversationId ? { conversationId } : null; + }, + }, + }, + }, + { + pluginId: "imessage", + source: "test", + plugin: { + ...createChannelTestPluginBase({ id: "imessage", label: "iMessage" }), + bindings: { + resolveCommandConversation: ({ + originatingTo, + commandTo, + fallbackTo, + }: { + originatingTo?: string; + commandTo?: string; + fallbackTo?: string; + }) => { + const conversationId = resolvePrefixedConversationIdForTest( + [originatingTo, commandTo, fallbackTo], + "imessage", + ); + return conversationId ? { conversationId } : null; + }, + }, + }, + }, { pluginId: "slack", source: "test", diff --git a/src/tts/tts.test.ts b/src/tts/tts.test.ts index fd7f20d0e9e..49ca509c1fc 100644 --- a/src/tts/tts.test.ts +++ b/src/tts/tts.test.ts @@ -2,6 +2,19 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; const loadBundledPluginPublicSurfaceModuleSync = vi.hoisted(() => vi.fn()); const loadActivatedBundledPluginPublicSurfaceModuleSync = vi.hoisted(() => vi.fn()); +const createLazyFacadeValue = vi.hoisted(() => { + return ( + load: () => TFacade, + key: K, + ): TFacade[K] => + ((...args: unknown[]) => { + const value = load()[key]; + if (typeof value !== "function") { + return value; + } + return (value as (...runtimeArgs: unknown[]) => unknown)(...args); + }) as TFacade[K]; +}); const createLazyFacadeObjectValue = vi.hoisted(() => { return (load: () => T): T => new Proxy( @@ -25,6 +38,7 @@ const createLazyFacadeValue = vi.hoisted(() => { }); vi.mock("../plugin-sdk/facade-runtime.js", () => ({ + createLazyFacadeValue, createLazyFacadeObjectValue, createLazyFacadeValue, loadActivatedBundledPluginPublicSurfaceModuleSync,