From 9885ab938ea7ac6b62c4b725ce112a1c315e0182 Mon Sep 17 00:00:00 2001 From: Kerry Archibald <kerrya@element.io> Date: Tue, 14 Feb 2023 17:35:21 +1300 Subject: [PATCH] decrypt poll relations before processing --- spec/unit/models/poll.spec.ts | 4 ++++ src/models/poll.ts | 3 +++ 2 files changed, 7 insertions(+) diff --git a/spec/unit/models/poll.spec.ts b/spec/unit/models/poll.spec.ts index 9ca3df7a2fa..245d5646501 100644 --- a/spec/unit/models/poll.spec.ts +++ b/spec/unit/models/poll.spec.ts @@ -20,6 +20,7 @@ import { M_POLL_END, M_POLL_KIND_DISCLOSED, M_POLL_RESPONSE } from "../../../src import { PollStartEvent } from "../../../src/extensible_events_v1/PollStartEvent"; import { Poll } from "../../../src/models/poll"; import { getMockClientWithEventEmitter, mockClientMethodsUser } from "../../test-utils/client"; +import { flushPromises } from "../../test-utils/flushPromises"; jest.useFakeTimers(); @@ -27,6 +28,7 @@ describe("Poll", () => { const userId = "@alice:server.org"; const mockClient = getMockClientWithEventEmitter({ ...mockClientMethodsUser(userId), + decryptEventIfNeeded: jest.fn().mockResolvedValue(true), relations: jest.fn(), }); const roomId = "!room:server"; @@ -172,6 +174,8 @@ describe("Poll", () => { jest.spyOn(poll, "emit"); const responses = await poll.getResponses(); + await flushPromises(); + expect(mockClient.relations.mock.calls).toEqual([ [roomId, basePollStartEvent.getId(), "m.reference", undefined, { from: undefined }], [roomId, basePollStartEvent.getId(), "m.reference", undefined, { from: "test-next-1" }], diff --git a/src/models/poll.ts b/src/models/poll.ts index 7c5d245f7e7..8a080ef9015 100644 --- a/src/models/poll.ts +++ b/src/models/poll.ts @@ -149,11 +149,14 @@ export class Poll extends TypedEventEmitter<Exclude<PollEvent, PollEvent.New>, P }, ); + await Promise.all(allRelations.events.map((event) => this.matrixClient.decryptEventIfNeeded(event))); + const responses = this.responses || new Relations("m.reference", M_POLL_RESPONSE.name, this.matrixClient, [M_POLL_RESPONSE.altName!]); const pollEndEvent = allRelations.events.find((event) => M_POLL_END.matches(event.getType())); + if (this.validateEndEvent(pollEndEvent)) { this.endEvent = pollEndEvent; this.refilterResponsesOnEnd();