Skip to content

Commit 4e09538

Browse files
committed
test: tighten dispatch hook metadata assertions
1 parent dff4a04 commit 4e09538

1 file changed

Lines changed: 61 additions & 61 deletions

File tree

src/auto-reply/reply/dispatch-from-config.test.ts

Lines changed: 61 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -2797,12 +2797,10 @@ describe("dispatchReplyFromConfig", () => {
27972797

27982798
await dispatchReplyFromConfig({ ctx, cfg, dispatcher, replyResolver });
27992799

2800-
expect(dispatcher.sendToolResult).toHaveBeenCalledWith(
2801-
expect.objectContaining({ text: "Approval required." }),
2802-
);
2803-
expect(dispatcher.sendFinalReply).toHaveBeenCalledWith(
2804-
expect.objectContaining({ text: "done" }),
2805-
);
2800+
expect(firstToolResultPayload(dispatcher)?.text).toBe("Approval required.");
2801+
expect(
2802+
((dispatcher.sendFinalReply as Mock).mock.calls[0]?.[0] as ReplyPayload | undefined)?.text,
2803+
).toBe("done");
28062804
});
28072805

28082806
it("suppresses local discord exec approval tool prompts when the native runtime is active", async () => {
@@ -2850,9 +2848,9 @@ describe("dispatchReplyFromConfig", () => {
28502848
await dispatchReplyFromConfig({ ctx, cfg, dispatcher, replyResolver });
28512849

28522850
expect(dispatcher.sendToolResult).not.toHaveBeenCalled();
2853-
expect(dispatcher.sendFinalReply).toHaveBeenCalledWith(
2854-
expect.objectContaining({ text: "done" }),
2855-
);
2851+
expect(
2852+
((dispatcher.sendFinalReply as Mock).mock.calls[0]?.[0] as ReplyPayload | undefined)?.text,
2853+
).toBe("done");
28562854
} finally {
28572855
await reporter.stop();
28582856
}
@@ -2917,29 +2915,32 @@ describe("dispatchReplyFromConfig", () => {
29172915
const replyResolver = async () => ({ text: "hi" }) satisfies ReplyPayload;
29182916
await dispatchReplyFromConfig({ ctx, cfg, dispatcher, replyResolver });
29192917

2920-
expect(hookMocks.runner.runMessageReceived).toHaveBeenCalledWith(
2921-
expect.objectContaining({
2922-
from: ctx.From,
2923-
content: "/search hello",
2924-
timestamp: 1710000000000,
2925-
metadata: expect.objectContaining({
2926-
originatingChannel: "Telegram",
2927-
originatingTo: "telegram:999",
2928-
messageId: "sid-full",
2929-
senderId: "user-1",
2930-
senderName: "Alice",
2931-
senderUsername: "alice",
2932-
senderE164: "+15555550123",
2933-
guildId: "guild-123",
2934-
channelName: "alerts",
2935-
}),
2936-
}),
2937-
expect.objectContaining({
2938-
channelId: "telegram",
2939-
accountId: "acc-1",
2940-
conversationId: "telegram:999",
2941-
}),
2942-
);
2918+
const [event, hookContext] = hookMocks.runner.runMessageReceived.mock.calls[0] as
2919+
| [
2920+
{
2921+
content?: unknown;
2922+
from?: unknown;
2923+
metadata?: Record<string, unknown>;
2924+
timestamp?: unknown;
2925+
},
2926+
{ accountId?: unknown; channelId?: unknown; conversationId?: unknown },
2927+
]
2928+
| [];
2929+
expect(event?.from).toBe(ctx.From);
2930+
expect(event?.content).toBe("/search hello");
2931+
expect(event?.timestamp).toBe(1710000000000);
2932+
expect(event?.metadata?.originatingChannel).toBe("Telegram");
2933+
expect(event?.metadata?.originatingTo).toBe("telegram:999");
2934+
expect(event?.metadata?.messageId).toBe("sid-full");
2935+
expect(event?.metadata?.senderId).toBe("user-1");
2936+
expect(event?.metadata?.senderName).toBe("Alice");
2937+
expect(event?.metadata?.senderUsername).toBe("alice");
2938+
expect(event?.metadata?.senderE164).toBe("+15555550123");
2939+
expect(event?.metadata?.guildId).toBe("guild-123");
2940+
expect(event?.metadata?.channelName).toBe("alerts");
2941+
expect(hookContext?.channelId).toBe("telegram");
2942+
expect(hookContext?.accountId).toBe("acc-1");
2943+
expect(hookContext?.conversationId).toBe("telegram:999");
29432944
});
29442945

29452946
it("does not broadcast inbound claims without a core-owned plugin binding", async () => {
@@ -2975,36 +2976,35 @@ describe("dispatchReplyFromConfig", () => {
29752976

29762977
expect(result).toEqual({ queuedFinal: true, counts: { tool: 0, block: 0, final: 0 } });
29772978
expect(hookMocks.runner.runInboundClaim).not.toHaveBeenCalled();
2978-
expect(hookMocks.runner.runMessageReceived).toHaveBeenCalledWith(
2979-
expect.objectContaining({
2980-
from: ctx.From,
2981-
content: "who are you",
2982-
metadata: expect.objectContaining({
2983-
messageId: "msg-claim-1",
2984-
originatingChannel: "telegram",
2985-
originatingTo: "telegram:-10099",
2986-
senderId: "user-9",
2987-
senderUsername: "ada",
2988-
threadId: 77,
2989-
}),
2990-
}),
2991-
expect.objectContaining({
2992-
channelId: "telegram",
2993-
accountId: "default",
2994-
conversationId: "telegram:-10099",
2995-
}),
2996-
);
2997-
expect(internalHookMocks.triggerInternalHook).toHaveBeenCalledWith(
2998-
expect.objectContaining({
2999-
type: "message",
3000-
action: "received",
3001-
sessionKey: "agent:main:hook-test",
3002-
}),
3003-
);
2979+
const [event, hookContext] = hookMocks.runner.runMessageReceived.mock.calls[0] as
2980+
| [
2981+
{ content?: unknown; from?: unknown; metadata?: Record<string, unknown> },
2982+
{ accountId?: unknown; channelId?: unknown; conversationId?: unknown },
2983+
]
2984+
| [];
2985+
expect(event?.from).toBe(ctx.From);
2986+
expect(event?.content).toBe("who are you");
2987+
expect(event?.metadata?.messageId).toBe("msg-claim-1");
2988+
expect(event?.metadata?.originatingChannel).toBe("telegram");
2989+
expect(event?.metadata?.originatingTo).toBe("telegram:-10099");
2990+
expect(event?.metadata?.senderId).toBe("user-9");
2991+
expect(event?.metadata?.senderUsername).toBe("ada");
2992+
expect(event?.metadata?.threadId).toBe(77);
2993+
expect(hookContext?.channelId).toBe("telegram");
2994+
expect(hookContext?.accountId).toBe("default");
2995+
expect(hookContext?.conversationId).toBe("telegram:-10099");
2996+
const internalHookEvent = (
2997+
internalHookMocks.triggerInternalHook.mock.calls as unknown as Array<
2998+
[{ action?: unknown; sessionKey?: unknown; type?: unknown }]
2999+
>
3000+
)[0]?.[0];
3001+
expect(internalHookEvent?.type).toBe("message");
3002+
expect(internalHookEvent?.action).toBe("received");
3003+
expect(internalHookEvent?.sessionKey).toBe("agent:main:hook-test");
30043004
expect(replyResolver).toHaveBeenCalledTimes(1);
3005-
expect(dispatcher.sendFinalReply).toHaveBeenCalledWith(
3006-
expect.objectContaining({ text: "core reply" }),
3007-
);
3005+
expect(
3006+
((dispatcher.sendFinalReply as Mock).mock.calls[0]?.[0] as ReplyPayload | undefined)?.text,
3007+
).toBe("core reply");
30083008
});
30093009

30103010
it("emits internal message:received hook when a session key is available", async () => {

0 commit comments

Comments
 (0)