From 7d74c1f4b99ec40b834ae02eb1b8043b052aa5f9 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 29 Apr 2026 07:07:59 +0100 Subject: [PATCH] test: align channel fixtures with open dm policy --- extensions/bluebubbles/src/monitor.test.ts | 14 +++++--------- .../src/monitor.webhook.test-helpers.ts | 2 +- extensions/discord/src/monitor.test.ts | 2 +- .../src/monitor/acp-bind-here.integration.test.ts | 1 + .../monitor/native-command.plugin-dispatch.test.ts | 4 ++-- .../monitor/native-command.status-direct.test.ts | 2 +- .../src/monitor.bot-menu.lifecycle.test-support.ts | 3 +++ .../monitor.card-action.lifecycle.test-support.ts | 3 +++ .../imessage/src/monitor/self-chat-dedupe.test.ts | 2 +- .../monitor/event-handler.inbound-context.test.ts | 6 +++--- .../src/bot-message-context.test-harness.ts | 4 ++-- .../zalouser/src/monitor.group-gating.test.ts | 8 ++++++-- 12 files changed, 29 insertions(+), 22 deletions(-) diff --git a/extensions/bluebubbles/src/monitor.test.ts b/extensions/bluebubbles/src/monitor.test.ts index 3c57352ddad..757c4c6c178 100644 --- a/extensions/bluebubbles/src/monitor.test.ts +++ b/extensions/bluebubbles/src/monitor.test.ts @@ -408,11 +408,11 @@ describe("BlueBubbles webhook monitor", () => { expect(sendMessageBlueBubbles).not.toHaveBeenCalled(); }); - it("allows all DMs when dmPolicy=open", async () => { + it("allows wildcard DMs when dmPolicy=open", async () => { setupWebhookTarget({ account: createMockAccount({ dmPolicy: "open", - allowFrom: [], + allowFrom: ["*"], }), }); @@ -483,6 +483,7 @@ describe("BlueBubbles webhook monitor", () => { account: createMockAccount({ groupPolicy: "allowlist", dmPolicy: "open", + allowFrom: [], }), }); @@ -1876,7 +1877,7 @@ describe("BlueBubbles webhook monitor", () => { expect(mockDispatchReplyWithBufferedBlockDispatcher).not.toHaveBeenCalled(); }); - it("does not auto-authorize DM control commands in open mode without allowlists", async () => { + it("drops DM control commands in open mode without allowlists", async () => { mockHasControlCommand.mockReturnValue(true); setupWebhookTarget({ @@ -1894,12 +1895,7 @@ describe("BlueBubbles webhook monitor", () => { await dispatchWebhookPayload(payload); - expect(mockDispatchReplyWithBufferedBlockDispatcher).toHaveBeenCalled(); - const latestDispatch = - mockDispatchReplyWithBufferedBlockDispatcher.mock.calls[ - mockDispatchReplyWithBufferedBlockDispatcher.mock.calls.length - 1 - ]?.[0]; - expect(latestDispatch?.ctx?.CommandAuthorized).toBe(false); + expect(mockDispatchReplyWithBufferedBlockDispatcher).not.toHaveBeenCalled(); }); }); diff --git a/extensions/bluebubbles/src/monitor.webhook.test-helpers.ts b/extensions/bluebubbles/src/monitor.webhook.test-helpers.ts index 6f56fdbfff2..d6ac1c285b4 100644 --- a/extensions/bluebubbles/src/monitor.webhook.test-helpers.ts +++ b/extensions/bluebubbles/src/monitor.webhook.test-helpers.ts @@ -34,7 +34,7 @@ export function createMockAccount( password: "test-password", dmPolicy: "open", groupPolicy: "open", - allowFrom: [], + allowFrom: ["*"], groupAllowFrom: [], ...overrides, }, diff --git a/extensions/discord/src/monitor.test.ts b/extensions/discord/src/monitor.test.ts index 9b93dab6523..1b6d6b9ea27 100644 --- a/extensions/discord/src/monitor.test.ts +++ b/extensions/discord/src/monitor.test.ts @@ -1008,7 +1008,7 @@ function makeReactionListenerParams(overrides?: { groupDmEnabled: overrides?.groupDmEnabled ?? true, groupDmChannels: overrides?.groupDmChannels ?? [], dmPolicy: overrides?.dmPolicy ?? "open", - allowFrom: overrides?.allowFrom ?? [], + allowFrom: overrides?.allowFrom ?? ["*"], groupPolicy: overrides?.groupPolicy ?? "open", allowNameMatching: overrides?.allowNameMatching ?? false, guildEntries: overrides?.guildEntries, diff --git a/extensions/discord/src/monitor/acp-bind-here.integration.test.ts b/extensions/discord/src/monitor/acp-bind-here.integration.test.ts index f2fc6eef917..f90c11d1f6f 100644 --- a/extensions/discord/src/monitor/acp-bind-here.integration.test.ts +++ b/extensions/discord/src/monitor/acp-bind-here.integration.test.ts @@ -200,6 +200,7 @@ describe("Discord ACP bind here end-to-end flow", () => { client: createDmClient("dm-1"), botUserId: "bot-1", }), + allowFrom: ["*"], }); expect(preflight).not.toBeNull(); diff --git a/extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts b/extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts index 865e5afa31e..555cc7e7480 100644 --- a/extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts +++ b/extensions/discord/src/monitor/native-command.plugin-dispatch.test.ts @@ -35,7 +35,7 @@ function createConfig(): OpenClawConfig { return { channels: { discord: { - dm: { enabled: true, policy: "open" }, + dm: { enabled: true, policy: "open", allowFrom: ["*"] }, }, }, } as OpenClawConfig; @@ -80,7 +80,7 @@ function createConfiguredAcpCase(params: { ? { channels: { discord: { - dm: { enabled: true, policy: "open" }, + dm: { enabled: true, policy: "open", allowFrom: ["*"] }, }, }, } diff --git a/extensions/discord/src/monitor/native-command.status-direct.test.ts b/extensions/discord/src/monitor/native-command.status-direct.test.ts index 5aa9d2eb99f..47a6107928c 100644 --- a/extensions/discord/src/monitor/native-command.status-direct.test.ts +++ b/extensions/discord/src/monitor/native-command.status-direct.test.ts @@ -40,7 +40,7 @@ function createConfig(params?: { requireMention?: boolean }): OpenClawConfig { }, channels: { discord: { - dm: { enabled: true, policy: "open" }, + dm: { enabled: true, policy: "open", allowFrom: ["*"] }, guilds: { guild1: { requireMention: true, diff --git a/extensions/feishu/src/monitor.bot-menu.lifecycle.test-support.ts b/extensions/feishu/src/monitor.bot-menu.lifecycle.test-support.ts index fcde3aa569d..d0f6998f59e 100644 --- a/extensions/feishu/src/monitor.bot-menu.lifecycle.test-support.ts +++ b/extensions/feishu/src/monitor.bot-menu.lifecycle.test-support.ts @@ -41,9 +41,11 @@ const lifecycleConfig = createFeishuLifecycleConfig({ appSecret: "secret_test", channelConfig: { dmPolicy: "open", + allowFrom: ["ou_user1"], }, accountConfig: { dmPolicy: "open", + allowFrom: ["ou_user1"], }, }); @@ -53,6 +55,7 @@ const lifecycleAccount = createResolvedFeishuLifecycleAccount({ appSecret: "secret_test", config: { dmPolicy: "open", + allowFrom: ["ou_user1"], }, }); diff --git a/extensions/feishu/src/monitor.card-action.lifecycle.test-support.ts b/extensions/feishu/src/monitor.card-action.lifecycle.test-support.ts index 0e796eb9c24..04fcf56df70 100644 --- a/extensions/feishu/src/monitor.card-action.lifecycle.test-support.ts +++ b/extensions/feishu/src/monitor.card-action.lifecycle.test-support.ts @@ -43,9 +43,11 @@ const lifecycleConfig = createFeishuLifecycleConfig({ appSecret: "secret_test", channelConfig: { dmPolicy: "open", + allowFrom: ["ou_user1"], }, accountConfig: { dmPolicy: "open", + allowFrom: ["ou_user1"], }, }); @@ -55,6 +57,7 @@ const lifecycleAccount = createResolvedFeishuLifecycleAccount({ appSecret: "secret_test", config: { dmPolicy: "open", + allowFrom: ["ou_user1"], }, }); diff --git a/extensions/imessage/src/monitor/self-chat-dedupe.test.ts b/extensions/imessage/src/monitor/self-chat-dedupe.test.ts index 3415e46d12f..81293f8dc0a 100644 --- a/extensions/imessage/src/monitor/self-chat-dedupe.test.ts +++ b/extensions/imessage/src/monitor/self-chat-dedupe.test.ts @@ -44,7 +44,6 @@ function createParams( cfg, accountId: "default", opts: undefined, - allowFrom: [], groupAllowFrom: [], groupPolicy: "open", dmPolicy: "open", @@ -55,6 +54,7 @@ function createParams( selfChatCache: undefined, logVerbose: undefined, ...restOverrides, + allowFrom: restOverrides.allowFrom ?? ["*"], message, messageText, bodyText, diff --git a/extensions/signal/src/monitor/event-handler.inbound-context.test.ts b/extensions/signal/src/monitor/event-handler.inbound-context.test.ts index f09ade9e6a8..49dbab8d8ab 100644 --- a/extensions/signal/src/monitor/event-handler.inbound-context.test.ts +++ b/extensions/signal/src/monitor/event-handler.inbound-context.test.ts @@ -168,7 +168,7 @@ describe("signal createSignalEventHandler inbound context", () => { ); }); - it("does not auto-authorize DM commands in open mode without allowlists", async () => { + it("drops DM commands in open mode without allowlists", async () => { const handler = createSignalEventHandler( createBaseSignalEventHandlerDeps({ cfg: { @@ -193,8 +193,8 @@ describe("signal createSignalEventHandler inbound context", () => { }), ); - expect(capture.ctx).toBeTruthy(); - expect(capture.ctx?.CommandAuthorized).toBe(false); + expect(capture.ctx).toBeUndefined(); + expect(dispatchInboundMessageMock).not.toHaveBeenCalled(); }); it("drops quote-only group context from non-allowlisted quoted senders in allowlist mode", async () => { diff --git a/extensions/telegram/src/bot-message-context.test-harness.ts b/extensions/telegram/src/bot-message-context.test-harness.ts index 5f4a3443b02..28f3888b324 100644 --- a/extensions/telegram/src/bot-message-context.test-harness.ts +++ b/extensions/telegram/src/bot-message-context.test-harness.ts @@ -3,7 +3,7 @@ import { finalizeTelegramInboundContextForTest } from "./bot-message-context.ses export const baseTelegramMessageContextConfig = { agents: { defaults: { model: "anthropic/claude-opus-4-5", workspace: "/tmp/openclaw" } }, - channels: { telegram: {} }, + channels: { telegram: { dmPolicy: "open", allowFrom: ["*"] } }, messages: { groupChat: { mentionPatterns: [] } }, } as never; @@ -80,7 +80,7 @@ export async function buildTelegramMessageContextForTest( historyLimit: 0, groupHistories: new Map(), dmPolicy: "open", - allowFrom: [], + allowFrom: ["*"], groupAllowFrom: [], ackReactionScope: "off", logger: { info: vi.fn() }, diff --git a/extensions/zalouser/src/monitor.group-gating.test.ts b/extensions/zalouser/src/monitor.group-gating.test.ts index 0052116d356..944ef3c0b5a 100644 --- a/extensions/zalouser/src/monitor.group-gating.test.ts +++ b/extensions/zalouser/src/monitor.group-gating.test.ts @@ -21,6 +21,8 @@ function createAccount(): ResolvedZalouserAccount { profile: "default", authenticated: true, config: { + dmPolicy: "open", + allowFrom: ["*"], groupPolicy: "open", groups: { "*": { requireMention: true }, @@ -34,6 +36,8 @@ function createConfig(): OpenClawConfig { channels: { zalouser: { enabled: true, + dmPolicy: "open", + allowFrom: ["*"], groups: { "*": { requireMention: true }, }, @@ -619,7 +623,7 @@ describe("zalouser monitor group mention gating", () => { expect(callArg?.ctx?.SessionKey).toBe("agent:main:zalouser:group:321"); }); - it("reads pairing store for open DM control commands", async () => { + it("skips pairing store read for open DM control commands", async () => { const { readAllowFromStore } = installRuntime({ commandAuthorized: false, }); @@ -637,7 +641,7 @@ describe("zalouser monitor group mention gating", () => { runtime: createRuntimeEnv(), }); - expect(readAllowFromStore).toHaveBeenCalledTimes(1); + expect(readAllowFromStore).not.toHaveBeenCalled(); }); it("skips pairing store read for open DM non-command messages", async () => {