From 304c2b12bfe5a74e400f0bb4edfeffb08061fe9a Mon Sep 17 00:00:00 2001 From: Andy Balaam Date: Tue, 7 Nov 2023 13:44:50 +0000 Subject: [PATCH] Revert "Revert "Factor out utils in redaction tests"" This reverts commit 2525c82049dc1a958446b66cc85656c1b57a5271. --- spec/unit/models/event.spec.ts | 116 ++++++++++++++++----------------- 1 file changed, 55 insertions(+), 61 deletions(-) diff --git a/spec/unit/models/event.spec.ts b/spec/unit/models/event.spec.ts index c3ac23ce4..696681aff 100644 --- a/spec/unit/models/event.spec.ts +++ b/spec/unit/models/event.spec.ts @@ -72,13 +72,7 @@ describe("MatrixEvent", () => { describe("redaction", () => { it("should prune clearEvent when being redacted", () => { - const ev = new MatrixEvent({ - type: "m.room.message", - content: { - body: "Test", - }, - event_id: "$event1:server", - }); + const ev = createEvent("$event1:server", "Test"); expect(ev.getContent().body).toBe("Test"); expect(ev.getWireContent().body).toBe("Test"); @@ -89,10 +83,7 @@ describe("MatrixEvent", () => { const mockClient = {} as unknown as MockedObject; const room = new Room("!roomid:e.xyz", mockClient, "myname"); - const redaction = new MatrixEvent({ - type: "m.room.redaction", - redacts: ev.getId(), - }); + const redaction = createRedaction(ev.getId()!); ev.makeRedacted(redaction, room); expect(ev.getContent().body).toBeUndefined(); @@ -102,82 +93,85 @@ describe("MatrixEvent", () => { it("should remain in the main timeline when redacted", async () => { // Given an event in the main timeline - const mockClient = { - supportsThreads: jest.fn().mockReturnValue(true), - decryptEventIfNeeded: jest.fn().mockReturnThis(), - getUserId: jest.fn().mockReturnValue("@user:server"), - } as unknown as MockedObject; + const mockClient = createMockClient(); const room = new Room("!roomid:e.xyz", mockClient, "myname"); - const ev = new MatrixEvent({ - type: "m.room.message", - content: { - body: "Test", - }, - event_id: "$event1:server", - }); + const ev = createEvent("$event1:server"); await room.addLiveEvents([ev]); await room.createThreadsTimelineSets(); expect(ev.threadRootId).toBeUndefined(); - expect(mainTimelineLiveEventIds(room)).toEqual(["$event1:server"]); + expect(mainTimelineLiveEventIds(room)).toEqual([ev.getId()]); // When I redact it - const redaction = new MatrixEvent({ - type: "m.room.redaction", - redacts: ev.getId(), - }); + const redaction = createRedaction(ev.getId()!); ev.makeRedacted(redaction, room); // Then it remains in the main timeline expect(ev.threadRootId).toBeUndefined(); - expect(mainTimelineLiveEventIds(room)).toEqual(["$event1:server"]); + expect(mainTimelineLiveEventIds(room)).toEqual([ev.getId()]); }); it("should move into the main timeline when redacted", async () => { // Given an event in a thread - const mockClient = { - supportsThreads: jest.fn().mockReturnValue(true), - decryptEventIfNeeded: jest.fn().mockReturnThis(), - getUserId: jest.fn().mockReturnValue("@user:server"), - } as unknown as MockedObject; + const mockClient = createMockClient(); const room = new Room("!roomid:e.xyz", mockClient, "myname"); - const threadRoot = new MatrixEvent({ - type: "m.room.message", - content: { - body: "threadRoot", - }, - event_id: "$threadroot:server", - }); - const ev = new MatrixEvent({ - type: "m.room.message", - content: { - "body": "Test", - "m.relates_to": { - rel_type: THREAD_RELATION_TYPE.name, - event_id: "$threadroot:server", - }, - }, - event_id: "$event1:server", - }); + const threadRoot = createEvent("$threadroot:server"); + const ev = createThreadedEvent("$event1:server", threadRoot.getId()!); await room.addLiveEvents([threadRoot, ev]); await room.createThreadsTimelineSets(); - expect(ev.threadRootId).toEqual("$threadroot:server"); - expect(mainTimelineLiveEventIds(room)).toEqual(["$threadroot:server"]); - expect(threadLiveEventIds(room, 0)).toEqual(["$threadroot:server", "$event1:server"]); + expect(ev.threadRootId).toEqual(threadRoot.getId()); + expect(mainTimelineLiveEventIds(room)).toEqual([threadRoot.getId()]); + expect(threadLiveEventIds(room, 0)).toEqual([threadRoot.getId(), ev.getId()]); // When I redact it - const redaction = new MatrixEvent({ - type: "m.room.redaction", - redacts: ev.getId(), - }); + const redaction = createRedaction(ev.getId()!); ev.makeRedacted(redaction, room); // Then it disappears from the thread and appears in the main timeline expect(ev.threadRootId).toBeUndefined(); - expect(mainTimelineLiveEventIds(room)).toEqual(["$threadroot:server", "$event1:server"]); - expect(threadLiveEventIds(room, 0)).not.toContain("$event1:server"); + expect(mainTimelineLiveEventIds(room)).toEqual([threadRoot.getId(), ev.getId()]); + expect(threadLiveEventIds(room, 0)).not.toContain(ev.getId()); }); + + function createMockClient(): MatrixClient { + return { + supportsThreads: jest.fn().mockReturnValue(true), + decryptEventIfNeeded: jest.fn().mockReturnThis(), + getUserId: jest.fn().mockReturnValue("@user:server"), + } as unknown as MockedObject; + } + + function createEvent(eventId: string, body?: string): MatrixEvent { + return new MatrixEvent({ + type: "m.room.message", + content: { + body: body ?? eventId, + }, + event_id: eventId, + }); + } + + function createThreadedEvent(eventId: string, threadRootId: string): MatrixEvent { + return new MatrixEvent({ + type: "m.room.message", + content: { + "body": eventId, + "m.relates_to": { + rel_type: THREAD_RELATION_TYPE.name, + event_id: threadRootId, + }, + }, + event_id: eventId, + }); + } + + function createRedaction(redactedEventid: string): MatrixEvent { + return new MatrixEvent({ + type: "m.room.redaction", + redacts: redactedEventid, + }); + } }); describe("applyVisibilityEvent", () => {