From 1151d69bb8737c3e1b123382bdade04fe1088251 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 20 Apr 2026 23:32:08 +0100 Subject: [PATCH] test: use synthetic outbound routing fixtures --- src/infra/outbound/agent-delivery.test.ts | 28 ++++++++++++------- .../outbound/outbound-send-service.test.ts | 20 ++++++------- src/infra/outbound/session-context.test.ts | 4 +-- src/infra/outbound/target-resolver.test.ts | 14 +++++----- 4 files changed, 37 insertions(+), 29 deletions(-) diff --git a/src/infra/outbound/agent-delivery.test.ts b/src/infra/outbound/agent-delivery.test.ts index 14369ebb3c7..0cf6eb663a9 100644 --- a/src/infra/outbound/agent-delivery.test.ts +++ b/src/infra/outbound/agent-delivery.test.ts @@ -69,6 +69,14 @@ vi.mock("./targets.js", () => ({ resolveSessionDeliveryTarget: mocks.resolveSessionDeliveryTarget, })); +vi.mock("../../utils/message-channel.js", () => ({ + INTERNAL_MESSAGE_CHANNEL: "webchat", + isDeliverableMessageChannel: (channel: string) => ["directchat", "workspace"].includes(channel), + isGatewayMessageChannel: (channel: string) => + ["directchat", "workspace", "webchat"].includes(channel), + normalizeMessageChannel: (value: string) => value.trim().toLowerCase(), +})); + import type { OpenClawConfig } from "../../config/config.js"; let resolveAgentDeliveryPlan: typeof import("./agent-delivery.js").resolveAgentDeliveryPlan; let resolveAgentOutboundTarget: typeof import("./agent-delivery.js").resolveAgentOutboundTarget; @@ -93,7 +101,7 @@ describe("agent delivery helpers", () => { sessionEntry: { sessionId: "s1", updatedAt: 1, - deliveryContext: { channel: "whatsapp", to: "+1555", accountId: "work" }, + deliveryContext: { channel: "directchat", to: "+1555", accountId: "work" }, }, requestedChannel: "last", explicitTo: undefined, @@ -101,7 +109,7 @@ describe("agent delivery helpers", () => { wantsDelivery: true, }, expected: { - resolvedChannel: "whatsapp", + resolvedChannel: "directchat", resolvedTo: "+1555", resolvedAccountId: "work", deliveryTargetMode: "implicit", @@ -125,17 +133,17 @@ describe("agent delivery helpers", () => { sessionEntry: { sessionId: "s4", updatedAt: 4, - deliveryContext: { channel: "slack", to: "U_WRONG", accountId: "wrong" }, + deliveryContext: { channel: "workspace", to: "U_WRONG", accountId: "wrong" }, }, requestedChannel: "last", - turnSourceChannel: "whatsapp", + turnSourceChannel: "directchat", turnSourceTo: "+17775550123", turnSourceAccountId: "work", accountId: undefined, wantsDelivery: true, }, expected: { - resolvedChannel: "whatsapp", + resolvedChannel: "directchat", resolvedTo: "+17775550123", resolvedAccountId: "work", }, @@ -145,15 +153,15 @@ describe("agent delivery helpers", () => { sessionEntry: { sessionId: "s5", updatedAt: 5, - deliveryContext: { channel: "slack", to: "U_WRONG" }, + deliveryContext: { channel: "workspace", to: "U_WRONG" }, }, requestedChannel: "last", - turnSourceChannel: "whatsapp", + turnSourceChannel: "directchat", accountId: undefined, wantsDelivery: true, }, expected: { - resolvedChannel: "whatsapp", + resolvedChannel: "directchat", resolvedTo: undefined, }, }, @@ -167,7 +175,7 @@ describe("agent delivery helpers", () => { sessionEntry: { sessionId: "s2", updatedAt: 2, - deliveryContext: { channel: "whatsapp" }, + deliveryContext: { channel: "directchat" }, }, requestedChannel: "last", explicitTo: undefined, @@ -191,7 +199,7 @@ describe("agent delivery helpers", () => { sessionEntry: { sessionId: "s3", updatedAt: 3, - deliveryContext: { channel: "whatsapp", to: "+1555" }, + deliveryContext: { channel: "directchat", to: "+1555" }, }, requestedChannel: "last", explicitTo: "+1555", diff --git a/src/infra/outbound/outbound-send-service.test.ts b/src/infra/outbound/outbound-send-service.test.ts index 20705355d83..bda0afd6737 100644 --- a/src/infra/outbound/outbound-send-service.test.ts +++ b/src/infra/outbound/outbound-send-service.test.ts @@ -154,7 +154,7 @@ describe("executeSendAction", () => { cfg: {}, channel: "demo-outbound", params: { media: "/tmp/host.png" }, - sessionKey: "agent:main:whatsapp:group:ops", + sessionKey: "agent:main:directchat:group:ops", dryRun: false, ...overrides, } as ExecuteSendContext; @@ -230,7 +230,7 @@ describe("executeSendAction", () => { cfg: {}, channel: "demo-outbound", params: {}, - sessionKey: "agent:main:whatsapp:group:ops", + sessionKey: "agent:main:directchat:group:ops", requesterSenderId: "attacker", dryRun: false, }, @@ -259,7 +259,7 @@ describe("executeSendAction", () => { cfg: {}, channel: "demo-outbound", params: {}, - sessionKey: "agent:main:whatsapp:group:ops", + sessionKey: "agent:main:directchat:group:ops", requesterSenderName: "Alice", requesterSenderUsername: "alice_u", requesterSenderE164: "+15551234567", @@ -292,7 +292,7 @@ describe("executeSendAction", () => { cfg: {}, channel: "demo-outbound", params: {}, - sessionKey: "agent:main:whatsapp:group:ops", + sessionKey: "agent:main:directchat:group:ops", requesterAccountId: "source-account", requesterSenderId: "attacker", accountId: "destination-account", @@ -304,7 +304,7 @@ describe("executeSendAction", () => { expect(mocks.sendMessage).toHaveBeenCalledWith( expect.objectContaining({ - requesterSessionKey: "agent:main:whatsapp:group:ops", + requesterSessionKey: "agent:main:directchat:group:ops", requesterAccountId: "source-account", requesterSenderId: "attacker", accountId: "destination-account", @@ -347,7 +347,7 @@ describe("executeSendAction", () => { expect(mocks.resolveAgentScopedOutboundMediaAccess).toHaveBeenCalledWith( expect.objectContaining({ - sessionKey: "agent:main:whatsapp:group:ops", + sessionKey: "agent:main:directchat:group:ops", messageProvider: undefined, }), ); @@ -362,7 +362,7 @@ describe("executeSendAction", () => { expect(mocks.resolveAgentScopedOutboundMediaAccess).toHaveBeenCalledWith( expect.objectContaining({ - sessionKey: "agent:main:whatsapp:group:ops", + sessionKey: "agent:main:directchat:group:ops", accountId: "source-account", }), ); @@ -376,7 +376,7 @@ describe("executeSendAction", () => { expect(mocks.resolveAgentScopedOutboundMediaAccess).toHaveBeenCalledWith( expect.objectContaining({ - sessionKey: "agent:main:whatsapp:group:ops", + sessionKey: "agent:main:directchat:group:ops", accountId: "destination-account", }), ); @@ -396,7 +396,7 @@ describe("executeSendAction", () => { cfg: {}, channel: "demo-outbound", params: {}, - sessionKey: "agent:main:whatsapp:group:ops", + sessionKey: "agent:main:directchat:group:ops", requesterSenderId: "attacker", accountId: "destination-account", dryRun: false, @@ -407,7 +407,7 @@ describe("executeSendAction", () => { expect(mocks.sendMessage).toHaveBeenCalledWith( expect.objectContaining({ - requesterSessionKey: "agent:main:whatsapp:group:ops", + requesterSessionKey: "agent:main:directchat:group:ops", requesterAccountId: "destination-account", }), ); diff --git a/src/infra/outbound/session-context.test.ts b/src/infra/outbound/session-context.test.ts index 48fb0599fed..f5c86bd7110 100644 --- a/src/infra/outbound/session-context.test.ts +++ b/src/infra/outbound/session-context.test.ts @@ -102,13 +102,13 @@ describe("buildOutboundSessionContext", () => { expect( buildOutboundSessionContext({ cfg: {} as never, - requesterSenderId: "id:telegram:123", + requesterSenderId: "id:forum:123", requesterSenderName: " Alice ", requesterSenderUsername: " alice_u ", requesterSenderE164: " +15551234567 ", }), ).toEqual({ - requesterSenderId: "id:telegram:123", + requesterSenderId: "id:forum:123", requesterSenderName: "Alice", requesterSenderUsername: "alice_u", requesterSenderE164: "+15551234567", diff --git a/src/infra/outbound/target-resolver.test.ts b/src/infra/outbound/target-resolver.test.ts index b2fb8d7f2ef..ce69205a565 100644 --- a/src/infra/outbound/target-resolver.test.ts +++ b/src/infra/outbound/target-resolver.test.ts @@ -88,7 +88,7 @@ describe("resolveMessagingTarget (directory fallback)", () => { const first = await expectOkResolution({ cfg, - channel: "discord", + channel: "richchat", input: "support", }); expect(first.target.source).toBe("directory"); @@ -98,7 +98,7 @@ describe("resolveMessagingTarget (directory fallback)", () => { const second = await expectOkResolution({ cfg, - channel: "discord", + channel: "richchat", input: "support", }); expect(second.target.to).toBe("123456789"); @@ -109,7 +109,7 @@ describe("resolveMessagingTarget (directory fallback)", () => { it("skips directory lookup for direct ids", async () => { const result = await expectOkResolution({ cfg, - channel: "discord", + channel: "richchat", input: "123456789", }); expect(result.target.source).toBe("normalized"); @@ -177,7 +177,7 @@ describe("resolveMessagingTarget (directory fallback)", () => { const result = await expectOkResolution({ cfg, - channel: "imessage", + channel: "localchat", input: "+15551234567", }); expect(result.target).toEqual({ @@ -213,7 +213,7 @@ describe("resolveMessagingTarget (directory fallback)", () => { const result = await expectOkResolution({ cfg, - channel: "slack", + channel: "workspace", input: "#C123ABC", }); expect(result.target.to).toBe("channel:C123ABC"); @@ -223,10 +223,10 @@ describe("resolveMessagingTarget (directory fallback)", () => { it("defers target display formatting to the plugin when available", () => { mocks.getChannelPlugin.mockReturnValue({ messaging: { - formatTargetDisplay: ({ target }: { target: string }) => target.replace(/^telegram:/i, ""), + formatTargetDisplay: ({ target }: { target: string }) => target.replace(/^forum:/i, ""), }, }); - expect(formatTargetDisplay({ channel: "telegram", target: "telegram:12345" })).toBe("12345"); + expect(formatTargetDisplay({ channel: "forum", target: "forum:12345" })).toBe("12345"); }); });