From cff9119324dced2ab570201d159ea0c8169344c2 Mon Sep 17 00:00:00 2001 From: Skye Elliot Date: Wed, 10 Dec 2025 10:37:04 +0000 Subject: [PATCH] Implement UI for history visibility acknowledgement. (#31156) * feat: Implement UI for history visibility acknowledgement. Shows a banner above the message composer whenever a user opens a room with non-join history visibility, which they can dismiss. - Whenever a user opens an encrypted room with non-join history visibility, show them a banner, unless we have already marked it as dismissed. - Whenever a user opens an encrypted room with joined history visibility, we unmark it as dismissed. Issue: https://github.com/element-hq/element-meta/issues/2875 * tests: Add test suite for `RoomStatusBarHistoryVisible`. * docs: Document `RoomStatusBarHistoryVisible` and props interface. * feat: Use newer `@vector-im/compound` components. * test: Update snapshots for `RoomStatusBarHistoryVisible` tests. * chore: Update playwright screenshots. * feat: Move `RoomStatusBarHistoryVisible` to `shared-components`. * fix: Address review comments on `RoomStatusBarHistoryVisible`. * fix: Address review comments on `RoomStatusBar` and tests. * chore: Move `RoomStatusBarHistoryVisible` to `room/RoomStatusBarHistoryVisible` * chore: Fix linting issues. * feat: Gate behind history visibility labs flag. * feat: Add link to history sharing docs. * fix: Resolve build issue with shared-components. * tests: Enable history sharing lab for unit tests. * tests: Set labs flag in SettingsStore mock. * fix: Remove non-existent arg - documentation should be updated! * chore: Remove old CSS rule filter. * fix: Use package name for import over relative path. * fix: Mark styles as important due to improper CSS load order. * docs: Add doc comments to `!important` directives. This change should restore my status as a good person. * docs: Correct license header. * tests: Update `RoomStatusBarHistoryVisible` snapshot. * tests: Update shared history invite screenshot. * tests: Revert spurious screenshot changes. * feat: Update to use `Banner` component. * chore: Remove broken import. * chore: Remove unused translation string. * tests: Add `getHistoryVisibility` to `currentState` of stub room. * tests: Update screenshot. * chore: Remove old snapshots. * tests: Update playwright screenshot. * feat: Separate `HistoryVisibleBanner` hooks into MVVM architecture. * chore: Remove unused imports. * feat: Use info link over action button for `HistoryVisibleBanner` * tests: Update snapshot for `HistoryVisibleBanner`. * chore: Remove unused imports. * feat: Switch to MVVM architecture per style guide. * tests: Update snapshot for `HistoryVisibleBanner`. * tests: Update shared components snapshots. * tests: Add unit tests for `HistoryVisibleBannerView` stories. * fix: Linting errors from SonarCloud. * feat: Finalise conversion to MVVM. * fix: Silent `this` binding issue. * tests: Update playwright snapshot. * feat: Introduce wrapper component for `HistoryVisibleBanner`. * tests: Update playwright screenshots for `HistoryVisibleBanner`. * docs: Add doc comments to fields in `HistoryVisibleBannerViewModel`. * tests: Update playwright snapshot. --- ...istoryvisiblebannerview--default-linux.png | Bin 0 -> 19979 bytes .../HistoryVisibleBannerView.stories.tsx | 42 ++++++ .../HistoryVisibleBannerView.test.tsx | 28 ++++ .../HistoryVisibleBannerView.tsx | 79 +++++++++++ .../HistoryVisibleBannerView.test.tsx.snap | 62 +++++++++ .../HistoryVisibleBannerView/index.ts | 8 ++ packages/shared-components/src/index.ts | 1 + .../shared-history-invite-accepted-linux.png | Bin 50430 -> 54660 bytes .../views/composer/HistoryVisibleBanner.tsx | 17 +++ .../views/rooms/MessageComposer.tsx | 2 + src/i18n/strings/en_EN.json | 1 + src/settings/Settings.tsx | 5 + .../HistoryVisibleBannerViewModel.tsx | 112 +++++++++++++++ test/test-utils/test-utils.ts | 4 +- .../HistoryVisibleBannerViewModel-test.tsx | 130 ++++++++++++++++++ 15 files changed, 490 insertions(+), 1 deletion(-) create mode 100644 packages/shared-components/playwright/snapshots/composer-historyvisiblebannerview--default-linux.png create mode 100644 packages/shared-components/src/composer/HistoryVisibleBannerView/HistoryVisibleBannerView.stories.tsx create mode 100644 packages/shared-components/src/composer/HistoryVisibleBannerView/HistoryVisibleBannerView.test.tsx create mode 100644 packages/shared-components/src/composer/HistoryVisibleBannerView/HistoryVisibleBannerView.tsx create mode 100644 packages/shared-components/src/composer/HistoryVisibleBannerView/__snapshots__/HistoryVisibleBannerView.test.tsx.snap create mode 100644 packages/shared-components/src/composer/HistoryVisibleBannerView/index.ts create mode 100644 src/components/views/composer/HistoryVisibleBanner.tsx create mode 100644 src/viewmodels/composer/HistoryVisibleBannerViewModel.tsx create mode 100644 test/unit-tests/components/viewmodels/composer/HistoryVisibleBannerViewModel-test.tsx diff --git a/packages/shared-components/playwright/snapshots/composer-historyvisiblebannerview--default-linux.png b/packages/shared-components/playwright/snapshots/composer-historyvisiblebannerview--default-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..902ac00f7b9fdb144545f388ad3c1574e2e755aa GIT binary patch literal 19979 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 literal 0 HcmV?d00001 diff --git a/packages/shared-components/src/composer/HistoryVisibleBannerView/HistoryVisibleBannerView.stories.tsx b/packages/shared-components/src/composer/HistoryVisibleBannerView/HistoryVisibleBannerView.stories.tsx new file mode 100644 index 0000000000..5bd95e0113 --- /dev/null +++ b/packages/shared-components/src/composer/HistoryVisibleBannerView/HistoryVisibleBannerView.stories.tsx @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2025 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ +import { type Meta, type StoryFn } from "@storybook/react-vite"; +import React, { type JSX } from "react"; +import { fn } from "storybook/test"; + +import { useMockedViewModel } from "../../useMockedViewModel"; +import { + HistoryVisibleBannerView, + type HistoryVisibleBannerViewActions, + type HistoryVisibleBannerViewSnapshot, +} from "./HistoryVisibleBannerView"; + +type HistoryVisibleBannerProps = HistoryVisibleBannerViewSnapshot & HistoryVisibleBannerViewActions; + +const HistoryVisibleBannerViewWrapper = ({ onClose, ...rest }: HistoryVisibleBannerProps): JSX.Element => { + const vm = useMockedViewModel(rest, { + onClose, + }); + return ; +}; + +export default { + title: "composer/HistoryVisibleBannerView", + component: HistoryVisibleBannerViewWrapper, + tags: ["autodocs"], + argTypes: {}, + args: { + visible: true, + onClose: fn(), + }, +} as Meta; + +const Template: StoryFn = (args) => ( + +); + +export const Default = Template.bind({}); diff --git a/packages/shared-components/src/composer/HistoryVisibleBannerView/HistoryVisibleBannerView.test.tsx b/packages/shared-components/src/composer/HistoryVisibleBannerView/HistoryVisibleBannerView.test.tsx new file mode 100644 index 0000000000..04d1ca40e6 --- /dev/null +++ b/packages/shared-components/src/composer/HistoryVisibleBannerView/HistoryVisibleBannerView.test.tsx @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2025 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import React from "react"; +import { render } from "jest-matrix-react"; +import { composeStories } from "@storybook/react-vite"; + +import * as stories from "./HistoryVisibleBannerView.stories.tsx"; + +const { Default } = composeStories(stories); + +describe("HistoryVisibleBannerView", () => { + it("renders a history visible banner", () => { + const dismissFn = jest.fn(); + + const { container } = render(); + expect(container).toMatchSnapshot(); + + const button = container.querySelector("button"); + expect(button).not.toBeNull(); + button?.click(); + expect(dismissFn).toHaveBeenCalled(); + }); +}); diff --git a/packages/shared-components/src/composer/HistoryVisibleBannerView/HistoryVisibleBannerView.tsx b/packages/shared-components/src/composer/HistoryVisibleBannerView/HistoryVisibleBannerView.tsx new file mode 100644 index 0000000000..fcd00327d6 --- /dev/null +++ b/packages/shared-components/src/composer/HistoryVisibleBannerView/HistoryVisibleBannerView.tsx @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2025 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { Link } from "@vector-im/compound-web"; +import React, { type JSX } from "react"; + +import { useViewModel } from "../../useViewModel"; +import { _t } from "../../utils/i18n"; +import { type ViewModel } from "../../viewmodel"; +import { Banner } from "../Banner"; + +export interface HistoryVisibleBannerViewActions { + /** + * Called when the user dismisses the banner. + */ + onClose: () => void; +} + +export interface HistoryVisibleBannerViewSnapshot { + /** + * Whether the banner is currently visible. + */ + visible: boolean; +} + +/** + * The view model for the banner. + */ +export type HistoryVisibleBannerViewModel = ViewModel & + HistoryVisibleBannerViewActions; + +interface HistoryVisibleBannerViewProps { + /** + * The view model for the banner. + */ + vm: HistoryVisibleBannerViewModel; +} + +/** + * A component to alert that history is shared to new members of the room. + * + * @example + * ```tsx + * + * ``` + */ +export function HistoryVisibleBannerView({ vm }: Readonly): JSX.Element { + const { visible } = useViewModel(vm); + + const contents = _t( + "room|status_bar|history_visible", + {}, + { + a: substituteATag, + }, + ); + + return ( + <> + {visible && ( + vm.onClose()}> + {contents} + + )} + + ); +} + +function substituteATag(sub: string): JSX.Element { + return ( + + {sub} + + ); +} diff --git a/packages/shared-components/src/composer/HistoryVisibleBannerView/__snapshots__/HistoryVisibleBannerView.test.tsx.snap b/packages/shared-components/src/composer/HistoryVisibleBannerView/__snapshots__/HistoryVisibleBannerView.test.tsx.snap new file mode 100644 index 0000000000..b046bf3572 --- /dev/null +++ b/packages/shared-components/src/composer/HistoryVisibleBannerView/__snapshots__/HistoryVisibleBannerView.test.tsx.snap @@ -0,0 +1,62 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`HistoryVisibleBannerView renders a history visible banner 1`] = ` +
+ +
+`; diff --git a/packages/shared-components/src/composer/HistoryVisibleBannerView/index.ts b/packages/shared-components/src/composer/HistoryVisibleBannerView/index.ts new file mode 100644 index 0000000000..96bf208bea --- /dev/null +++ b/packages/shared-components/src/composer/HistoryVisibleBannerView/index.ts @@ -0,0 +1,8 @@ +/* + * Copyright (c) 2025 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +export * from "./HistoryVisibleBannerView"; diff --git a/packages/shared-components/src/index.ts b/packages/shared-components/src/index.ts index 8440a4fb0a..a806971a3f 100644 --- a/packages/shared-components/src/index.ts +++ b/packages/shared-components/src/index.ts @@ -12,6 +12,7 @@ export * from "./audio/PlayPauseButton"; export * from "./audio/SeekBar"; export * from "./avatar/AvatarWithDetails"; export * from "./composer/Banner"; +export * from "./composer/HistoryVisibleBannerView"; export * from "./event-tiles/TextualEventView"; export * from "./message-body/MediaBody"; export * from "./pill-input/Pill"; diff --git a/playwright/snapshots/crypto/history-sharing.spec.ts/shared-history-invite-accepted-linux.png b/playwright/snapshots/crypto/history-sharing.spec.ts/shared-history-invite-accepted-linux.png index b5467fe9dc48d83548d852558606a440d54e55b1..ff22d723584dfd7139d175be5b39f62d97254b17 100644 GIT binary patch literal 54660 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 RV2l1?urNzF^p&}H;y)YZ`NjYM literal 50430 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 = ({ room }) => { + const vm = useCreateAutoDisposedViewModel(() => new HistoryVisibleBannerViewModel({ room })); + return ; +}; diff --git a/src/components/views/rooms/MessageComposer.tsx b/src/components/views/rooms/MessageComposer.tsx index 06c843f190..3c5dbf1891 100644 --- a/src/components/views/rooms/MessageComposer.tsx +++ b/src/components/views/rooms/MessageComposer.tsx @@ -54,6 +54,7 @@ import { type MatrixClientProps, withMatrixClientHOC } from "../../../contexts/M import { UIFeature } from "../../../settings/UIFeature"; import { formatTimeLeft } from "../../../DateUtils"; import RoomReplacedSvg from "../../../../res/img/room_replaced.svg"; +import { HistoryVisibleBanner } from "../composer/HistoryVisibleBanner"; // The prefix used when persisting editor drafts to localstorage. export const WYSIWYG_EDITOR_STATE_STORAGE_PREFIX = "mx_wysiwyg_state_"; @@ -674,6 +675,7 @@ export class MessageComposer extends React.Component { return (
+
contact your service administrator to continue using the service.", + "history_visible": "Messages you send will be shared with new members invited to this room. Learn more", "homeserver_blocked": "Your message wasn't sent because this homeserver has been blocked by its administrator. Please contact your service administrator to continue using the service.", "monthly_user_limit_reached": "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.", "requires_consent_agreement": "You can't send any messages until you review and agree to our terms and conditions.", diff --git a/src/settings/Settings.tsx b/src/settings/Settings.tsx index 2ceb1b807f..fe57708dfa 100644 --- a/src/settings/Settings.tsx +++ b/src/settings/Settings.tsx @@ -371,6 +371,7 @@ export interface Settings { "inviteRules": IBaseSetting; "blockInvites": IBaseSetting; "Developer.elementCallUrl": IBaseSetting; + "acknowledgedHistoryVisibility": IBaseSetting; } export type SettingKey = keyof Settings; @@ -1488,4 +1489,8 @@ export const SETTINGS: Settings = { displayName: _td("devtools|settings|elementCallUrl"), default: "", }, + "acknowledgedHistoryVisibility": { + supportedLevels: [SettingLevel.ROOM_ACCOUNT], + default: false, + }, }; diff --git a/src/viewmodels/composer/HistoryVisibleBannerViewModel.tsx b/src/viewmodels/composer/HistoryVisibleBannerViewModel.tsx new file mode 100644 index 0000000000..12aa589506 --- /dev/null +++ b/src/viewmodels/composer/HistoryVisibleBannerViewModel.tsx @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2025 Element Creations Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { + BaseViewModel, + type HistoryVisibleBannerViewModel as HistoryVisibleBannerViewModelInterface, + type HistoryVisibleBannerViewSnapshot, +} from "@element-hq/web-shared-components"; +import { HistoryVisibility, RoomStateEvent, type Room } from "matrix-js-sdk/src/matrix"; + +import SettingsStore from "../../settings/SettingsStore"; +import { SettingLevel } from "../../settings/SettingLevel"; + +interface Props { + room: Room; +} + +export class HistoryVisibleBannerViewModel + extends BaseViewModel + implements HistoryVisibleBannerViewModelInterface +{ + /** + * Watcher ID for the "feature_share_history_on_invite" setting. + */ + private readonly featureWatcher: string; + + /** + * Watcher ID for the "acknowledgedHistoryVisibility" setting specific to the room. + */ + private readonly acknowledgedWatcher: string; + + private static readonly computeSnapshot = (room: Room): HistoryVisibleBannerViewSnapshot => { + const featureEnabled = SettingsStore.getValue("feature_share_history_on_invite"); + const acknowledged = SettingsStore.getValue("acknowledgedHistoryVisibility", room.roomId); + + return { + visible: + featureEnabled && + room.hasEncryptionStateEvent() && + room.getHistoryVisibility() !== HistoryVisibility.Joined && + !acknowledged, + }; + }; + + public constructor(props: Props) { + super(props, HistoryVisibleBannerViewModel.computeSnapshot(props.room)); + + this.disposables.trackListener(props.room, RoomStateEvent.Update, () => this.setSnapshot()); + + // `SettingsStore` is not an `EventListener`, so we must manage these manually. + this.featureWatcher = SettingsStore.watchSetting( + "feature_share_history_on_invite", + null, + (_key, _roomId, _level, value: boolean) => this.setSnapshot(), + ); + this.acknowledgedWatcher = SettingsStore.watchSetting( + "acknowledgedHistoryVisibility", + props.room.roomId, + (_key, _roomId, _level, value: boolean) => this.setSnapshot(), + ); + } + + private setSnapshot(): void { + const acknowledged = SettingsStore.getValue("acknowledgedHistoryVisibility", this.props.room.roomId); + + // Reset the acknowleded flag when the history visibility is set back to joined. + if (this.props.room.getHistoryVisibility() === HistoryVisibility.Joined && acknowledged) { + SettingsStore.setValue( + "acknowledgedHistoryVisibility", + this.props.room.roomId, + SettingLevel.ROOM_ACCOUNT, + false, + ); + } + + this.snapshot.set(HistoryVisibleBannerViewModel.computeSnapshot(this.props.room)); + } + + /** + * Revoke the banner's acknoledgement status. + */ + public async revoke(): Promise { + await SettingsStore.setValue( + "acknowledgedHistoryVisibility", + this.props.room.roomId, + SettingLevel.ROOM_ACCOUNT, + false, + ); + } + + /** + * Called when the user dismisses the banner. + */ + public async onClose(): Promise { + await SettingsStore.setValue( + "acknowledgedHistoryVisibility", + this.props.room.roomId, + SettingLevel.ROOM_ACCOUNT, + true, + ); + } + + public dispose(): void { + super.dispose(); + SettingsStore.unwatchSetting(this.featureWatcher); + SettingsStore.unwatchSetting(this.acknowledgedWatcher); + } +} diff --git a/test/test-utils/test-utils.ts b/test/test-utils/test-utils.ts index 9fe885429b..b0746fc422 100644 --- a/test/test-utils/test-utils.ts +++ b/test/test-utils/test-utils.ts @@ -9,6 +9,7 @@ Please see LICENSE files in the repository root for full details. import EventEmitter from "events"; import { mocked, type MockedObject } from "jest-mock"; import { + type EventTimeline, MatrixEvent, type Room, type User, @@ -16,7 +17,6 @@ import { type IEvent, type RoomMember, type MatrixClient, - type EventTimeline, type RoomState, EventType, type IEventRelation, @@ -30,6 +30,7 @@ import { JoinRule, type OidcClientConfig, type GroupCall, + HistoryVisibility, } from "matrix-js-sdk/src/matrix"; import { KnownMembership } from "matrix-js-sdk/src/types"; import { normalize } from "matrix-js-sdk/src/utils"; @@ -627,6 +628,7 @@ export function mkStubRoom( createThreadsTimelineSets: jest.fn().mockReturnValue(new Promise(() => {})), currentState: { getStateEvents: jest.fn((_type, key) => (key === undefined ? [] : null)), + getHistoryVisibility: jest.fn().mockReturnValue(HistoryVisibility.Joined), getMember: jest.fn(), mayClientSendStateEvent: jest.fn().mockReturnValue(true), maySendStateEvent: jest.fn().mockReturnValue(true), diff --git a/test/unit-tests/components/viewmodels/composer/HistoryVisibleBannerViewModel-test.tsx b/test/unit-tests/components/viewmodels/composer/HistoryVisibleBannerViewModel-test.tsx new file mode 100644 index 0000000000..12b7edc6f4 --- /dev/null +++ b/test/unit-tests/components/viewmodels/composer/HistoryVisibleBannerViewModel-test.tsx @@ -0,0 +1,130 @@ +/* + * Copyright 2025 New Vector Ltd. + * + * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial + * Please see LICENSE files in the repository root for full details. + */ + +import { Room } from "matrix-js-sdk/src/matrix"; + +import { SettingLevel } from "../../../../../src/settings/SettingLevel"; +import SettingsStore, { type CallbackFn } from "../../../../../src/settings/SettingsStore"; +import { mkEvent, stubClient, upsertRoomStateEvents } from "../../../../test-utils"; +import { HistoryVisibleBannerViewModel } from "../../../../../src/viewmodels/composer/HistoryVisibleBannerViewModel"; + +describe("HistoryVisibleBannerViewModel", () => { + const ROOM_ID = "!roomId:example.org"; + + let room: Room; + let watcherCallbacks: CallbackFn[]; + let acknowledgedHistoryVisibility: boolean; + + beforeEach(() => { + watcherCallbacks = []; + acknowledgedHistoryVisibility = false; + + jest.spyOn(SettingsStore, "setValue").mockImplementation(async (settingName, roomId, level, value) => { + if (settingName === "acknowledgedHistoryVisibility") { + acknowledgedHistoryVisibility = value; + } + watcherCallbacks.forEach((callbackFn) => callbackFn(settingName, roomId, level, value, value)); + }); + + jest.spyOn(SettingsStore, "getValue").mockImplementation((settingName, roomId) => { + if (settingName === "acknowledgedHistoryVisibility") { + return acknowledgedHistoryVisibility; + } + if (settingName === "feature_share_history_on_invite") { + return true; + } + return SettingsStore.getDefaultValue(settingName); + }); + + jest.spyOn(SettingsStore, "watchSetting").mockImplementation((settingName, roomId, callbackFn) => { + watcherCallbacks.push(callbackFn); + return `mockWatcherId-${settingName}-${roomId}`; + }); + + stubClient(); + room = new Room(ROOM_ID, {} as any, "@user:example.org"); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it("should not show the banner in unencrypted rooms", () => { + const vm = new HistoryVisibleBannerViewModel({ room }); + expect(vm.getSnapshot().visible).toBe(false); + }); + + it("should not show the banner in encrypted rooms with joined history visibility", () => { + upsertRoomStateEvents(room, [ + mkEvent({ + event: true, + type: "m.room.encryption", + user: "@user1:server", + content: {}, + }), + mkEvent({ + event: true, + type: "m.room.history_visibility", + content: { + history_visibility: "joined", + }, + user: "@user1:server", + }), + ]); + + const vm = new HistoryVisibleBannerViewModel({ room }); + expect(vm.getSnapshot().visible).toBe(false); + }); + + it("should not show the banner if it has been dismissed", async () => { + await SettingsStore.setValue("acknowledgedHistoryVisibility", ROOM_ID, SettingLevel.ROOM_ACCOUNT, true); + upsertRoomStateEvents(room, [ + mkEvent({ + event: true, + type: "m.room.encryption", + user: "@user1:server", + content: {}, + }), + mkEvent({ + event: true, + type: "m.room.history_visibility", + user: "@user1:server", + content: { + history_visibility: "shared", + }, + }), + ]); + + const vm = new HistoryVisibleBannerViewModel({ room }); + expect(vm.getSnapshot().visible).toBe(false); + vm.dispose(); + }); + + it("should show the banner in encrypted rooms with non-joined history visibility", async () => { + upsertRoomStateEvents(room, [ + mkEvent({ + event: true, + type: "m.room.encryption", + user: "@user1:server", + content: {}, + }), + mkEvent({ + event: true, + type: "m.room.history_visibility", + user: "@user1:server", + content: { + history_visibility: "shared", + }, + }), + ]); + + const vm = new HistoryVisibleBannerViewModel({ room }); + expect(vm.getSnapshot().visible).toBe(true); + await vm.onClose(); + expect(vm.getSnapshot().visible).toBe(false); + }); +});