From d72b973d01ea7dc5c842f1207d178e354b3a32af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=ABl?= Date: Sat, 6 Jun 2026 15:14:12 +0200 Subject: [PATCH] test: adapt unit tests to HealthChat fork customizations --- .../components/structures/MatrixChat-test.tsx | 5 +- .../__snapshots__/MatrixChat-test.tsx.snap | 51 ++----------------- .../views/right_panel/UserInfo-test.tsx | 4 ++ .../rooms/RoomHeader/RoomHeader-test.tsx | 8 +-- .../settings/UserProfileSettings-test.tsx | 4 ++ .../tabs/user/AccountUserSettingsTab-test.tsx | 3 ++ .../AccountUserSettingsTab-test.tsx.snap | 8 +-- .../RequiresSettingsController-test.ts | 8 +++ .../EventPresentationContextProvider-test.tsx | 3 ++ 9 files changed, 36 insertions(+), 58 deletions(-) diff --git a/apps/web/test/unit-tests/components/structures/MatrixChat-test.tsx b/apps/web/test/unit-tests/components/structures/MatrixChat-test.tsx index 9d4084d220..97de5556d2 100644 --- a/apps/web/test/unit-tests/components/structures/MatrixChat-test.tsx +++ b/apps/web/test/unit-tests/components/structures/MatrixChat-test.tsx @@ -1688,8 +1688,9 @@ describe("", () => { await flushPromises(); expect(Lifecycle.attemptDelegatedAuthLogin).toHaveBeenCalled(); - // should just show the welcome screen - await rendered.findByText("Welcome to Test"); + // should just show the welcome screen (wait for welcome page chrome render; HealthChat's + // Welcome renders an EmbeddedPage body that does not load under jsdom, so assert on the chrome) + await rendered.findByText("Powered by Matrix"); expect(rendered.container).toMatchSnapshot(); }); diff --git a/apps/web/test/unit-tests/components/structures/__snapshots__/MatrixChat-test.tsx.snap b/apps/web/test/unit-tests/components/structures/__snapshots__/MatrixChat-test.tsx.snap index 80f5c9116c..cc0a924d3b 100644 --- a/apps/web/test/unit-tests/components/structures/__snapshots__/MatrixChat-test.tsx.snap +++ b/apps/web/test/unit-tests/components/structures/__snapshots__/MatrixChat-test.tsx.snap @@ -140,57 +140,12 @@ exports[` Multi-tab lockout waits for other tab to stop during sta class="mx_Welcome" >
- -

- Welcome to Test -

{ jest.spyOn(MatrixClientPeg, "get").mockReturnValue(mockClient); jest.spyOn(MatrixClientPeg, "safeGet").mockReturnValue(mockClient); + // HealthChat's UserExtendedProfileInfo reads SdkContextClass.instance.userProfilesStore, + // which requires the singleton client to be set (it is, on login, in the real app). + SdkContextClass.instance.client = mockClient; }); describe("", () => { diff --git a/apps/web/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx b/apps/web/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx index c997a65ae7..f7a8cfc3cb 100644 --- a/apps/web/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx +++ b/apps/web/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx @@ -667,8 +667,8 @@ describe("RoomHeader", () => { const button = screen.getByRole("button", { name: "Video call" }); expect(button).not.toHaveAttribute("aria-disabled", "true"); await user.click(button); - const elementCallButton = screen.getByRole("menuitem", { name: "Element Call" }); - const legacyCallButton = screen.getByRole("menuitem", { name: "Legacy Call" }); + const elementCallButton = screen.getByRole("menuitem", { name: _t("voip|element_call") }); + const legacyCallButton = screen.getByRole("menuitem", { name: _t("voip|legacy_call") }); expect(elementCallButton).toBeInTheDocument(); expect(legacyCallButton).toBeInTheDocument(); }); @@ -684,8 +684,8 @@ describe("RoomHeader", () => { const button = screen.getByRole("button", { name: "Voice call" }); expect(button).not.toHaveAttribute("aria-disabled", "true"); await user.click(button); - const elementCallButton = screen.getByRole("menuitem", { name: "Element Call" }); - const legacyCallButton = screen.getByRole("menuitem", { name: "Legacy Call" }); + const elementCallButton = screen.getByRole("menuitem", { name: _t("voip|element_call") }); + const legacyCallButton = screen.getByRole("menuitem", { name: _t("voip|legacy_call") }); expect(elementCallButton).toBeInTheDocument(); expect(legacyCallButton).toBeInTheDocument(); }); diff --git a/apps/web/test/unit-tests/components/views/settings/UserProfileSettings-test.tsx b/apps/web/test/unit-tests/components/views/settings/UserProfileSettings-test.tsx index 0b38cc72f3..313f840313 100644 --- a/apps/web/test/unit-tests/components/views/settings/UserProfileSettings-test.tsx +++ b/apps/web/test/unit-tests/components/views/settings/UserProfileSettings-test.tsx @@ -18,6 +18,7 @@ import { mkStubRoom, stubClient } from "../../../../test-utils"; import { ToastContext, type ToastRack } from "../../../../../src/contexts/ToastContext"; import { OwnProfileStore } from "../../../../../src/stores/OwnProfileStore"; import MatrixClientContext from "../../../../../src/contexts/MatrixClientContext"; +import { SdkContextClass } from "../../../../../src/contexts/SDKContext"; import Modal from "../../../../../src/Modal"; interface MockedAvatarSettingProps { @@ -86,6 +87,9 @@ describe("ProfileSettings", () => { beforeEach(() => { client = stubClient(); + // HealthChat's ExtendedProfileSettings reads the global SdkContextClass.instance.userProfilesStore, + // which requires the singleton client to be set (it is, on login, in the real app). + SdkContextClass.instance.client = client; toastRack = { displayToast: jest.fn().mockReturnValue(jest.fn()), }; diff --git a/apps/web/test/unit-tests/components/views/settings/tabs/user/AccountUserSettingsTab-test.tsx b/apps/web/test/unit-tests/components/views/settings/tabs/user/AccountUserSettingsTab-test.tsx index b12ba3a4ab..e3f9484e0b 100644 --- a/apps/web/test/unit-tests/components/views/settings/tabs/user/AccountUserSettingsTab-test.tsx +++ b/apps/web/test/unit-tests/components/views/settings/tabs/user/AccountUserSettingsTab-test.tsx @@ -85,6 +85,9 @@ describe("", () => { stores = new SdkContextClass(); stores.client = mockClient; + // HealthChat's ExtendedProfileSettings (mounted via UserProfileSettings) reads the global + // SdkContextClass.instance.userProfilesStore, which requires the singleton client to be set. + SdkContextClass.instance.client = mockClient; // stub out this store completely to avoid mocking initialisation const mockOidcClientStore = {} as unknown as OidcClientStore; jest.spyOn(stores, "oidcClientStore", "get").mockReturnValue(mockOidcClientStore); diff --git a/apps/web/test/unit-tests/components/views/settings/tabs/user/__snapshots__/AccountUserSettingsTab-test.tsx.snap b/apps/web/test/unit-tests/components/views/settings/tabs/user/__snapshots__/AccountUserSettingsTab-test.tsx.snap index c6a31f0b12..b75035becd 100644 --- a/apps/web/test/unit-tests/components/views/settings/tabs/user/__snapshots__/AccountUserSettingsTab-test.tsx.snap +++ b/apps/web/test/unit-tests/components/views/settings/tabs/user/__snapshots__/AccountUserSettingsTab-test.tsx.snap @@ -42,14 +42,14 @@ exports[` 3pids should display 3pid email addresses an > @@ -154,14 +154,14 @@ exports[` 3pids should display 3pid email addresses an diff --git a/apps/web/test/unit-tests/settings/controllers/RequiresSettingsController-test.ts b/apps/web/test/unit-tests/settings/controllers/RequiresSettingsController-test.ts index 36335d9323..42394c7209 100644 --- a/apps/web/test/unit-tests/settings/controllers/RequiresSettingsController-test.ts +++ b/apps/web/test/unit-tests/settings/controllers/RequiresSettingsController-test.ts @@ -10,9 +10,17 @@ import RequiresSettingsController from "../../../../src/settings/controllers/Req import { SettingLevel } from "../../../../src/settings/SettingLevel"; import SettingsStore from "../../../../src/settings/SettingsStore"; import MatrixClientBackedController from "../../../../src/settings/controllers/MatrixClientBackedController"; +import { Layout } from "../../../../src/settings/enums/Layout"; import { getMockClientWithEventEmitter, mockClientMethodsServer } from "../../../test-utils"; describe("RequiresSettingsController", () => { + beforeEach(async () => { + // HealthChat changed the default "layout" to Bubble. These tests use "useCompactLayout" as a + // sample boolean setting, but its IncompatibleController forces it to false unless layout is + // Group, so pin the layout to Group to keep useCompactLayout effective. + await SettingsStore.setValue("layout", null, SettingLevel.DEVICE, Layout.Group); + }); + afterEach(() => { SettingsStore.reset(); }); diff --git a/apps/web/test/unit-tests/utils/EventPresentationContextProvider-test.tsx b/apps/web/test/unit-tests/utils/EventPresentationContextProvider-test.tsx index 3dea23f88a..1bbad3cfae 100644 --- a/apps/web/test/unit-tests/utils/EventPresentationContextProvider-test.tsx +++ b/apps/web/test/unit-tests/utils/EventPresentationContextProvider-test.tsx @@ -25,6 +25,9 @@ const PresentationProbe: React.FC = () => { describe("EventPresentationContextProvider", () => { beforeEach(async () => { + // HealthChat changed the default "layout" to Bubble, but useCompactLayout's IncompatibleController + // only allows compact density when the layout is Group. Pin it so the compact-layout test is meaningful. + await SettingsStore.setValue("layout", null, SettingLevel.DEVICE, Layout.Group); await SettingsStore.setValue("useCompactLayout", null, SettingLevel.DEVICE, false); });