test: speed matrix verification waits

This commit is contained in:
Peter Steinberger
2026-04-24 16:04:47 +01:00
parent 1ff07245f3
commit 50667db297

View File

@@ -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:");