remove polls from room state on redaction (#3475)
This commit is contained in:
@@ -55,6 +55,7 @@ import * as threadUtils from "../test-utils/thread";
|
||||
import { getMockClientWithEventEmitter, mockClientMethodsUser } from "../test-utils/client";
|
||||
import { logger } from "../../src/logger";
|
||||
import { IMessageOpts } from "../test-utils/test-utils";
|
||||
import { flushPromises } from "../test-utils/flushPromises";
|
||||
|
||||
describe("Room", function () {
|
||||
const roomId = "!foo:bar";
|
||||
@@ -3388,6 +3389,23 @@ describe("Room", function () {
|
||||
const poll = room.polls.get(pollStartEventId);
|
||||
expect(poll?.pollId).toBe(pollStartEventId);
|
||||
});
|
||||
|
||||
it("removes poll from state when redacted", async () => {
|
||||
const pollStartEvent = makePollStart("1");
|
||||
const events = [pollStartEvent];
|
||||
|
||||
await room.processPollEvents(events);
|
||||
|
||||
expect(room.polls.get(pollStartEvent.getId()!)).toBeTruthy();
|
||||
|
||||
const redactedEvent = new MatrixEvent({ type: "m.room.redaction" });
|
||||
pollStartEvent.makeRedacted(redactedEvent);
|
||||
|
||||
await flushPromises();
|
||||
|
||||
// removed from poll state
|
||||
expect(room.polls.get(pollStartEvent.getId()!)).toBeFalsy();
|
||||
});
|
||||
});
|
||||
|
||||
describe("findPredecessorRoomId", () => {
|
||||
|
||||
@@ -2008,6 +2008,11 @@ export class Room extends ReadReceipt<RoomEmittedEvents, RoomEventHandlerMap> {
|
||||
const poll = new Poll(event, this.client, this);
|
||||
this.polls.set(event.getId()!, poll);
|
||||
this.emit(PollEvent.New, poll);
|
||||
|
||||
// remove the poll when redacted
|
||||
event.once(MatrixEventEvent.BeforeRedaction, (redactedEvent: MatrixEvent) => {
|
||||
this.polls.delete(redactedEvent.getId()!);
|
||||
});
|
||||
} catch {}
|
||||
// poll creation can fail for malformed poll start events
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user