@@ -237,6 +237,12 @@ function createMention(params: { openId: string; name: string; key?: string }):
|
237 | 237 | }; |
238 | 238 | } |
239 | 239 | |
| 240 | +function mentionOpenIds(event: FeishuMessageEvent): string[] { |
| 241 | +return (event.message.mentions ?? []).flatMap((mention) => |
| 242 | +mention.id.open_id ? [mention.id.open_id] : [], |
| 243 | +); |
| 244 | +} |
| 245 | + |
240 | 246 | function createFeishuMonitorRuntime(params?: { |
241 | 247 | createInboundDebouncer?: PluginRuntime["channel"]["debounce"]["createInboundDebouncer"]; |
242 | 248 | resolveInboundDebounceMs?: PluginRuntime["channel"]["debounce"]["resolveInboundDebounceMs"]; |
@@ -541,9 +547,9 @@ describe("Feishu inbound debounce regressions", () => {
|
541 | 547 | await vi.advanceTimersByTimeAsync(25); |
542 | 548 | |
543 | 549 | const dispatched = expectSingleDispatchedEvent(); |
544 | | -const mergedMentions = dispatched.message.mentions ?? []; |
545 | | -expect(mergedMentions.some((mention) => mention.id.open_id === "ou_bot")).toBe(true); |
546 | | -expect(mergedMentions.some((mention) => mention.id.open_id === "ou_user_a")).toBe(false); |
| 550 | +const mergedOpenIds = mentionOpenIds(dispatched); |
| 551 | +expect(mergedOpenIds).toContain("ou_bot"); |
| 552 | +expect(mergedOpenIds).not.toContain("ou_user_a"); |
547 | 553 | }); |
548 | 554 | |
549 | 555 | it("passes prefetched botName through to handleFeishuMessage", async () => { |
@@ -601,8 +607,7 @@ describe("Feishu inbound debounce regressions", () => {
|
601 | 607 | const { dispatched, parsed } = expectParsedFirstDispatchedEvent(); |
602 | 608 | expect(parsed.mentionedBot).toBe(true); |
603 | 609 | expect(parsed.mentionTargets).toBeUndefined(); |
604 | | -const mergedMentions = dispatched.message.mentions ?? []; |
605 | | -expect(mergedMentions.every((mention) => mention.id.open_id === "ou_bot")).toBe(true); |
| 610 | +expect(mentionOpenIds(dispatched)).toEqual(["ou_bot"]); |
606 | 611 | }); |
607 | 612 | |
608 | 613 | it("preserves bot mention signal when the latest merged message has no mentions", async () => { |
|