diff --git a/extensions/matrix/src/matrix/monitor/events.test.ts b/extensions/matrix/src/matrix/monitor/events.test.ts index 599ddd91c51..f8b0b8cb4f1 100644 --- a/extensions/matrix/src/matrix/monitor/events.test.ts +++ b/extensions/matrix/src/matrix/monitor/events.test.ts @@ -940,7 +940,7 @@ describe("registerMatrixMonitorEvents verification routing", () => { }); it("ignores verification notices in unrelated non-DM rooms", async () => { - const { sendMessage, roomEventListener } = createHarness({ + const { sendMessage, roomEventListener, flushTasks } = createHarness({ joinedMembersByRoom: { "!group:example.org": ["@alice:example.org", "@bot:example.org", "@ops:example.org"], }, @@ -972,13 +972,12 @@ describe("registerMatrixMonitorEvents verification routing", () => { }, }); - await vi.waitFor(() => { - expect(sendMessage).toHaveBeenCalledTimes(0); - }); + await flushTasks(); + expect(sendMessage).toHaveBeenCalledTimes(0); }); it("routes unmapped verification summaries to the room marked direct in member state", async () => { - const { sendMessage, verificationSummaryListener } = createHarness({ + const { sendMessage, verificationSummaryListener, flushTasks } = createHarness({ joinedMembersByRoom: { "!fallback:example.org": ["@alice:example.org", "@bot:example.org"], "!dm:example.org": ["@alice:example.org", "@bot:example.org"], @@ -1018,24 +1017,24 @@ describe("registerMatrixMonitorEvents verification routing", () => { updatedAt: new Date("2026-02-25T21:42:55.000Z").toISOString(), }); - await vi.waitFor(() => { - expect(sendMessage).toHaveBeenCalledTimes(1); - }); + await flushTasks(); + expect(sendMessage).toHaveBeenCalledTimes(1); expect((sendMessage.mock.calls as unknown[][])[0]?.[0]).toBe("!dm:example.org"); }); it("prefers the active direct room over a stale remembered strict room for unmapped summaries", async () => { - const { sendMessage, roomEventListener, verificationSummaryListener } = createHarness({ - joinedMembersByRoom: { - "!fallback:example.org": ["@alice:example.org", "@bot:example.org"], - "!dm:example.org": ["@alice:example.org", "@bot:example.org"], - }, - memberStateByRoomUser: { - "!dm:example.org": { - "@bot:example.org": { is_direct: true }, + const { sendMessage, roomEventListener, verificationSummaryListener, flushTasks } = + createHarness({ + joinedMembersByRoom: { + "!fallback:example.org": ["@alice:example.org", "@bot:example.org"], + "!dm:example.org": ["@alice:example.org", "@bot:example.org"], }, - }, - }); + memberStateByRoomUser: { + "!dm:example.org": { + "@bot:example.org": { is_direct: true }, + }, + }, + }); if (!verificationSummaryListener) { throw new Error("verification.summary listener was not registered"); } @@ -1050,9 +1049,8 @@ describe("registerMatrixMonitorEvents verification routing", () => { }, }); - await vi.waitFor(() => { - expect(sendMessage).toHaveBeenCalledTimes(1); - }); + await flushTasks(); + expect(sendMessage).toHaveBeenCalledTimes(1); sendMessage.mockClear(); verificationSummaryListener({ @@ -1080,14 +1078,13 @@ describe("registerMatrixMonitorEvents verification routing", () => { updatedAt: new Date("2026-02-25T21:42:55.000Z").toISOString(), }); - await vi.waitFor(() => { - expect(sendMessage).toHaveBeenCalledTimes(1); - }); + await flushTasks(); + expect(sendMessage).toHaveBeenCalledTimes(1); expect((sendMessage.mock.calls as unknown[][])[0]?.[0]).toBe("!dm:example.org"); }); it("does not emit duplicate SAS notices for the same verification payload", async () => { - const { sendMessage, roomEventListener, listVerifications } = createHarness({ + const { sendMessage, roomEventListener, listVerifications, flushTasks } = createHarness({ verifications: [ { id: "verification-3", @@ -1114,9 +1111,8 @@ describe("registerMatrixMonitorEvents verification routing", () => { "m.relates_to": { event_id: "$req3" }, }, }); - await vi.waitFor(() => { - expect(sendMessage.mock.calls.length).toBeGreaterThan(0); - }); + await flushTasks(); + expect(sendMessage.mock.calls.length).toBeGreaterThan(0); roomEventListener("!room:example.org", { event_id: "$key3", @@ -1127,9 +1123,8 @@ describe("registerMatrixMonitorEvents verification routing", () => { "m.relates_to": { event_id: "$req3" }, }, }); - await vi.waitFor(() => { - expect(listVerifications).toHaveBeenCalledTimes(2); - }); + await flushTasks(); + expect(listVerifications).toHaveBeenCalledTimes(2); const sasBodies = getSentNoticeBodies(sendMessage).filter((body) => body.includes("SAS emoji:"), @@ -1138,7 +1133,7 @@ describe("registerMatrixMonitorEvents verification routing", () => { }); it("ignores cancelled verification flows when DM fallback resolves SAS notices", async () => { - const { sendMessage, roomEventListener } = createHarness({ + const { sendMessage, roomEventListener, flushTasks } = createHarness({ joinedMembersByRoom: { "!dm:example.org": ["@alice:example.org", "@bot:example.org"], }, @@ -1190,16 +1185,16 @@ describe("registerMatrixMonitorEvents verification routing", () => { }, }); - await vi.waitFor(() => { - const bodies = getSentNoticeBodies(sendMessage); - expect(bodies.some((body) => body.includes("SAS decimal: 6158 1986 3513"))).toBe(true); - }); + await flushTasks(); + expect( + getSentNoticeBodies(sendMessage).some((body) => body.includes("SAS decimal: 6158 1986 3513")), + ).toBe(true); const bodies = getSentNoticeBodies(sendMessage); expect(bodies.some((body) => body.includes("SAS decimal: 1111 2222 3333"))).toBe(false); }); it("preserves strict-room SAS fallback when active DM inspection cannot resolve a room", async () => { - const { sendMessage, roomEventListener } = createHarness({ + const { sendMessage, roomEventListener, flushTasks } = createHarness({ joinedMembersByRoom: { "!dm:example.org": ["@alice:example.org", "@bot:example.org"], }, @@ -1235,14 +1230,14 @@ describe("registerMatrixMonitorEvents verification routing", () => { }, }); - await vi.waitFor(() => { - const bodies = getSentNoticeBodies(sendMessage); - expect(bodies.some((body) => body.includes("SAS decimal: 6158 1986 3513"))).toBe(true); - }); + await flushTasks(); + expect( + getSentNoticeBodies(sendMessage).some((body) => body.includes("SAS decimal: 6158 1986 3513")), + ).toBe(true); }); it("prefers the active verification for the current DM when multiple active summaries exist", async () => { - const { sendMessage, roomEventListener } = createHarness({ + const { sendMessage, roomEventListener, flushTasks } = createHarness({ joinedMembersByRoom: { "!dm-current:example.org": ["@alice:example.org", "@bot:example.org"], }, @@ -1296,16 +1291,16 @@ describe("registerMatrixMonitorEvents verification routing", () => { }, }); - await vi.waitFor(() => { - const bodies = getSentNoticeBodies(sendMessage); - expect(bodies.some((body) => body.includes("SAS decimal: 6158 1986 3513"))).toBe(true); - }); + await flushTasks(); + expect( + getSentNoticeBodies(sendMessage).some((body) => body.includes("SAS decimal: 6158 1986 3513")), + ).toBe(true); const bodies = getSentNoticeBodies(sendMessage); expect(bodies.some((body) => body.includes("SAS decimal: 1111 2222 3333"))).toBe(false); }); it("does not emit SAS notices for cancelled verification events", async () => { - const { sendMessage, roomEventListener } = createHarness({ + const { sendMessage, roomEventListener, flushTasks } = createHarness({ joinedMembersByRoom: { "!dm:example.org": ["@alice:example.org", "@bot:example.org"], }, @@ -1342,9 +1337,8 @@ describe("registerMatrixMonitorEvents verification routing", () => { }, }); - await vi.waitFor(() => { - expect(sendMessage).toHaveBeenCalledTimes(1); - }); + await flushTasks(); + expect(sendMessage).toHaveBeenCalledTimes(1); const body = getSentNoticeBody(sendMessage, 0); expect(body).toContain("Matrix verification cancelled by @alice:example.org"); expect(body).not.toContain("SAS decimal:");