/* Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ import { render } from "@testing-library/react"; import { EventType, MatrixEvent, Room } from "matrix-js-sdk/src/matrix"; import React from "react"; import ViewSource from "../../../src/components/structures/ViewSource"; import { mkEvent, stubClient, mkMessage } from "../../test-utils/test-utils"; import { MatrixClientPeg } from "../../../src/MatrixClientPeg"; describe("ViewSource", () => { const ROOM_ID = "!roomId:example.org"; const SENDER = "@alice:example.org"; let redactedMessageEvent: MatrixEvent; const redactionEvent = mkEvent({ user: SENDER, event: true, type: EventType.RoomRedaction, content: {}, }); beforeEach(() => { redactedMessageEvent = new MatrixEvent({ type: EventType.RoomMessageEncrypted, room_id: ROOM_ID, sender: SENDER, content: {}, state_key: undefined, }); redactedMessageEvent.makeRedacted(redactionEvent, new Room(ROOM_ID, stubClient(), SENDER)); }); beforeEach(stubClient); // See https://github.com/vector-im/element-web/issues/24165 it("doesn't error when viewing redacted encrypted messages", () => { // Sanity checks expect(redactedMessageEvent.isEncrypted()).toBeTruthy(); // @ts-ignore clearEvent is private, but it's being used directly expect(redactedMessageEvent.clearEvent).toBe(undefined); expect(() => render( {}} />)).not.toThrow(); }); it("should show edit button if we are the sender and can post an edit", () => { const event = mkMessage({ msg: "Test", user: MatrixClientPeg.get()!.getSafeUserId(), room: ROOM_ID, event: true, }); const { getByRole } = render( {}} />); expect(getByRole("button", { name: "Edit" })).toBeInTheDocument(); }); });