From f4152334fc162cad05e94fd6ef54dc4b49f3aecd Mon Sep 17 00:00:00 2001 From: Will Hunt Date: Tue, 15 Apr 2025 11:43:28 +0100 Subject: [PATCH] Ensure we include the client on rendered messages. --- .../views/messages/HideActionButton-test.tsx | 20 +++++++++++++------ .../views/messages/MImageBody-test.tsx | 6 ++++++ .../views/messages/MStickerBody-test.tsx | 4 +++- .../views/messages/MVideoBody-test.tsx | 1 + 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/test/unit-tests/components/views/messages/HideActionButton-test.tsx b/test/unit-tests/components/views/messages/HideActionButton-test.tsx index 4286bf7b22..650afe69e6 100644 --- a/test/unit-tests/components/views/messages/HideActionButton-test.tsx +++ b/test/unit-tests/components/views/messages/HideActionButton-test.tsx @@ -8,13 +8,15 @@ Please see LICENSE files in the repository root for full details. import React from "react"; import { fireEvent, render, screen } from "jest-matrix-react"; -import { MatrixEvent } from "matrix-js-sdk/src/matrix"; +import { MatrixEvent, type MatrixClient } from "matrix-js-sdk/src/matrix"; import { HideActionButton } from "../../../../../src/components/views/messages/HideActionButton"; import SettingsStore from "../../../../../src/settings/SettingsStore"; import { SettingLevel } from "../../../../../src/settings/SettingLevel"; import type { Settings } from "../../../../../src/settings/Settings"; import { MediaPreviewValue } from "../../../../../src/@types/media_preview"; +import { getMockClientWithEventEmitter, withClientContextRenderOptions } from "../../../../test-utils"; +import type { MockedObject } from "jest-mock"; function mockSetting(mediaPreviews: MediaPreviewValue, showMediaEventIds: Settings["showMediaEventIds"]["default"]) { jest.spyOn(SettingsStore, "getValue").mockImplementation((settingName) => { @@ -42,32 +44,38 @@ const event = new MatrixEvent({ }); describe("HideActionButton", () => { + let cli: MockedObject; + beforeEach(() => { + cli = getMockClientWithEventEmitter({ + getRoom: jest.fn(), + }); + }); afterEach(() => { jest.restoreAllMocks(); }); it("should show button when event is visible by showMediaEventIds setting", async () => { mockSetting(MediaPreviewValue.Off, { [EVENT_ID]: true }); - render(); + render(, withClientContextRenderOptions(cli)); expect(screen.getByRole("button")).toBeVisible(); }); it("should show button when event is visible by mediaPreviewConfig setting", async () => { mockSetting(MediaPreviewValue.On, {}); - render(); + render(, withClientContextRenderOptions(cli)); expect(screen.getByRole("button")).toBeVisible(); }); it("should hide button when event is hidden by showMediaEventIds setting", async () => { mockSetting(MediaPreviewValue.Off, { [EVENT_ID]: false }); - render(); + render(, withClientContextRenderOptions(cli)); expect(screen.queryByRole("button")).toBeNull(); }); it("should hide button when event is hidden by showImages setting", async () => { mockSetting(MediaPreviewValue.Off, {}); - render(); + render(, withClientContextRenderOptions(cli)); expect(screen.queryByRole("button")).toBeNull(); }); it("should store event as hidden when clicked", async () => { const spy = jest.spyOn(SettingsStore, "setValue"); - render(); + render(, withClientContextRenderOptions(cli)); fireEvent.click(screen.getByRole("button")); expect(spy).toHaveBeenCalledWith("showMediaEventIds", null, SettingLevel.DEVICE, { "$foo:bar": false }); // Button should be hidden after the setting is set. diff --git a/test/unit-tests/components/views/messages/MImageBody-test.tsx b/test/unit-tests/components/views/messages/MImageBody-test.tsx index 8a918ea788..edda0d3add 100644 --- a/test/unit-tests/components/views/messages/MImageBody-test.tsx +++ b/test/unit-tests/components/views/messages/MImageBody-test.tsx @@ -100,6 +100,7 @@ describe("", () => { mxEvent={encryptedMediaEvent} mediaEventHelper={new MediaEventHelper(encryptedMediaEvent)} />, + withClientContextRenderOptions(cli), ); // thumbnail with dimensions present @@ -115,6 +116,7 @@ describe("", () => { mxEvent={encryptedMediaEvent} mediaEventHelper={new MediaEventHelper(encryptedMediaEvent)} />, + withClientContextRenderOptions(cli), ); expect(fetchMock).toHaveBeenCalledWith(url); @@ -132,6 +134,7 @@ describe("", () => { mxEvent={encryptedMediaEvent} mediaEventHelper={new MediaEventHelper(encryptedMediaEvent)} />, + withClientContextRenderOptions(cli), ); await screen.findByText("Error decrypting image"); @@ -212,6 +215,7 @@ describe("", () => { const { container } = render( , + withClientContextRenderOptions(cli), ); const img = container.querySelector(".mx_MImageBody_thumbnail")!; @@ -265,6 +269,7 @@ describe("", () => { const { container } = render( , + withClientContextRenderOptions(cli), ); // Wait for spinners to go away @@ -290,6 +295,7 @@ describe("", () => { const { container } = render( , + withClientContextRenderOptions(cli), ); const img = container.querySelector(".mx_MImageBody_thumbnail")!; diff --git a/test/unit-tests/components/views/messages/MStickerBody-test.tsx b/test/unit-tests/components/views/messages/MStickerBody-test.tsx index d78f797dea..3ae44215d1 100644 --- a/test/unit-tests/components/views/messages/MStickerBody-test.tsx +++ b/test/unit-tests/components/views/messages/MStickerBody-test.tsx @@ -19,6 +19,7 @@ import { mockClientMethodsDevice, mockClientMethodsServer, mockClientMethodsUser, + withClientContextRenderOptions, } from "../../../../test-utils"; import SettingsStore from "../../../../../src/settings/SettingsStore"; import MStickerBody from "../../../../../src/components/views/messages/MStickerBody"; @@ -31,6 +32,7 @@ describe("", () => { ...mockClientMethodsServer(), ...mockClientMethodsDevice(deviceId), ...mockClientMethodsCrypto(), + getRoom: jest.fn(), getRooms: jest.fn().mockReturnValue([]), getIgnoredUsers: jest.fn(), getVersions: jest.fn().mockResolvedValue({ @@ -76,7 +78,7 @@ describe("", () => { it("should show a tooltip on hover", async () => { fetchMock.getOnce(url, { status: 200 }); - render(); + render(, withClientContextRenderOptions(cli)); expect(screen.queryByRole("tooltip")).toBeNull(); await userEvent.hover(screen.getByRole("img")); diff --git a/test/unit-tests/components/views/messages/MVideoBody-test.tsx b/test/unit-tests/components/views/messages/MVideoBody-test.tsx index d5dcfca59b..1d058a7b0c 100644 --- a/test/unit-tests/components/views/messages/MVideoBody-test.tsx +++ b/test/unit-tests/components/views/messages/MVideoBody-test.tsx @@ -98,6 +98,7 @@ describe("MVideoBody", () => { fetchMock.getOnce(thumbUrl, { status: 200 }); const { asFragment } = render( , + withClientContextRenderOptions(cli), ); expect(asFragment()).toMatchSnapshot(); });