diff --git a/src/telegram/bot-message-context.dm-topic-threadid.test.ts b/src/telegram/bot-message-context.dm-topic-threadid.test.ts index ffef2f592cb..f83d66082ea 100644 --- a/src/telegram/bot-message-context.dm-topic-threadid.test.ts +++ b/src/telegram/bot-message-context.dm-topic-threadid.test.ts @@ -14,26 +14,25 @@ describe("buildTelegramMessageContext DM topic threadId in deliveryContext (#889 messages: { groupChat: { mentionPatterns: [] } }, } as never; - beforeEach(() => { - recordInboundSessionMock.mockClear(); - }); - - it("passes threadId to updateLastRoute for DM topics", async () => { - const ctx = await buildTelegramMessageContext({ + async function buildCtx(params: { + message: Record; + options?: Record; + resolveGroupActivation?: () => unknown; + }): Promise>> { + return await buildTelegramMessageContext({ primaryCtx: { message: { message_id: 1, - chat: { id: 1234, type: "private" }, date: 1700000000, text: "hello", - message_thread_id: 42, // DM Topic ID from: { id: 42, first_name: "Alice" }, + ...params.message, }, me: { id: 7, username: "bot" }, } as never, allMedia: [], storeAllowFrom: [], - options: {}, + options: params.options ?? {}, bot: { api: { sendChatAction: vi.fn(), @@ -49,121 +48,72 @@ describe("buildTelegramMessageContext DM topic threadId in deliveryContext (#889 groupAllowFrom: [], ackReactionScope: "off", logger: { info: vi.fn() }, - resolveGroupActivation: () => undefined, + resolveGroupActivation: params.resolveGroupActivation ?? (() => undefined), resolveGroupRequireMention: () => false, resolveTelegramGroupConfig: () => ({ groupConfig: { requireMention: false }, topicConfig: undefined, }), }); + } + + function getUpdateLastRoute(): unknown { + const callArgs = recordInboundSessionMock.mock.calls[0]?.[0] as { updateLastRoute?: unknown }; + return callArgs?.updateLastRoute; + } + + beforeEach(() => { + recordInboundSessionMock.mockClear(); + }); + + it("passes threadId to updateLastRoute for DM topics", async () => { + const ctx = await buildCtx({ + message: { + chat: { id: 1234, type: "private" }, + message_thread_id: 42, // DM Topic ID + }, + }); expect(ctx).not.toBeNull(); expect(recordInboundSessionMock).toHaveBeenCalled(); // Check that updateLastRoute includes threadId - const callArgs = recordInboundSessionMock.mock.calls[0]?.[0] as { - updateLastRoute?: { threadId?: string }; - }; - expect(callArgs?.updateLastRoute).toBeDefined(); - expect(callArgs?.updateLastRoute?.threadId).toBe("42"); + const updateLastRoute = getUpdateLastRoute() as { threadId?: string } | undefined; + expect(updateLastRoute).toBeDefined(); + expect(updateLastRoute?.threadId).toBe("42"); }); it("does not pass threadId for regular DM without topic", async () => { - const ctx = await buildTelegramMessageContext({ - primaryCtx: { - message: { - message_id: 1, - chat: { id: 1234, type: "private" }, - date: 1700000000, - text: "hello", - // No message_thread_id - from: { id: 42, first_name: "Alice" }, - }, - me: { id: 7, username: "bot" }, - } as never, - allMedia: [], - storeAllowFrom: [], - options: {}, - bot: { - api: { - sendChatAction: vi.fn(), - setMessageReaction: vi.fn(), - }, - } as never, - cfg: baseConfig, - account: { accountId: "default" } as never, - historyLimit: 0, - groupHistories: new Map(), - dmPolicy: "open", - allowFrom: [], - groupAllowFrom: [], - ackReactionScope: "off", - logger: { info: vi.fn() }, - resolveGroupActivation: () => undefined, - resolveGroupRequireMention: () => false, - resolveTelegramGroupConfig: () => ({ - groupConfig: { requireMention: false }, - topicConfig: undefined, - }), + const ctx = await buildCtx({ + message: { + chat: { id: 1234, type: "private" }, + }, }); expect(ctx).not.toBeNull(); expect(recordInboundSessionMock).toHaveBeenCalled(); // Check that updateLastRoute does NOT include threadId - const callArgs = recordInboundSessionMock.mock.calls[0]?.[0] as { - updateLastRoute?: { threadId?: string }; - }; - expect(callArgs?.updateLastRoute).toBeDefined(); - expect(callArgs?.updateLastRoute?.threadId).toBeUndefined(); + const updateLastRoute = getUpdateLastRoute() as { threadId?: string } | undefined; + expect(updateLastRoute).toBeDefined(); + expect(updateLastRoute?.threadId).toBeUndefined(); }); it("does not set updateLastRoute for group messages", async () => { - const ctx = await buildTelegramMessageContext({ - primaryCtx: { - message: { - message_id: 1, - chat: { id: -1001234567890, type: "supergroup", title: "Test Group" }, - date: 1700000000, - text: "@bot hello", - message_thread_id: 99, - from: { id: 42, first_name: "Alice" }, - }, - me: { id: 7, username: "bot" }, - } as never, - allMedia: [], - storeAllowFrom: [], + const ctx = await buildCtx({ + message: { + chat: { id: -1001234567890, type: "supergroup", title: "Test Group" }, + text: "@bot hello", + message_thread_id: 99, + }, options: { forceWasMentioned: true }, - bot: { - api: { - sendChatAction: vi.fn(), - setMessageReaction: vi.fn(), - }, - } as never, - cfg: baseConfig, - account: { accountId: "default" } as never, - historyLimit: 0, - groupHistories: new Map(), - dmPolicy: "open", - allowFrom: [], - groupAllowFrom: [], - ackReactionScope: "off", - logger: { info: vi.fn() }, resolveGroupActivation: () => true, - resolveGroupRequireMention: () => false, - resolveTelegramGroupConfig: () => ({ - groupConfig: { requireMention: false }, - topicConfig: undefined, - }), }); expect(ctx).not.toBeNull(); expect(recordInboundSessionMock).toHaveBeenCalled(); // Check that updateLastRoute is undefined for groups - const callArgs = recordInboundSessionMock.mock.calls[0]?.[0] as { - updateLastRoute?: unknown; - }; - expect(callArgs?.updateLastRoute).toBeUndefined(); + expect(getUpdateLastRoute()).toBeUndefined(); }); });