@@ -77,6 +77,7 @@ import { CallStore } from "../../../../src/stores/CallStore.ts";
7777import MediaDeviceHandler , { MediaDeviceKindEnum } from "../../../../src/MediaDeviceHandler.ts" ;
7878import Modal , { type ComponentProps } from "../../../../src/Modal.tsx" ;
7979import ErrorDialog from "../../../../src/components/views/dialogs/ErrorDialog.tsx" ;
80+ import * as pinnedEventHooks from "../../../../src/hooks/usePinnedEvents" ;
8081
8182// Used by group calls
8283jest . spyOn ( MediaDeviceHandler , "getDevices" ) . mockResolvedValue ( {
@@ -124,6 +125,11 @@ describe("RoomView", () => {
124125 afterEach ( ( ) => {
125126 unmockPlatformPeg ( ) ;
126127 jest . clearAllMocks ( ) ;
128+
129+ // Can't jest.restoreAllMocks() because some tests will break
130+ jest . spyOn ( pinnedEventHooks , "usePinnedEvents" ) . mockRestore ( ) ;
131+ jest . spyOn ( pinnedEventHooks , "useSortedFetchedPinnedEvents" ) . mockRestore ( ) ;
132+
127133 cleanup ( ) ;
128134 } ) ;
129135
@@ -298,6 +304,35 @@ describe("RoomView", () => {
298304 expect ( asFragment ( ) ) . toMatchSnapshot ( ) ;
299305 } ) ;
300306
307+ it ( "should hide the pinned message banner when hidePinnedMessageBanner=true" , async ( ) => {
308+ // Join the room
309+ jest . spyOn ( room , "getMyMembership" ) . mockReturnValue ( KnownMembership . Join ) ;
310+
311+ const pinnedEvent = new MatrixEvent ( {
312+ type : EventType . RoomMessage ,
313+ sender : "@alice:example.org" ,
314+ content : {
315+ body : "First pinned message" ,
316+ msgtype : "m.text" ,
317+ } ,
318+ room_id : room . roomId ,
319+ origin_server_ts : 0 ,
320+ event_id : "$eventId" ,
321+ } ) ;
322+
323+ jest . spyOn ( pinnedEventHooks , "usePinnedEvents" ) . mockReturnValue ( [ pinnedEvent . getId ( ) ! ] ) ;
324+ jest . spyOn ( pinnedEventHooks , "useSortedFetchedPinnedEvents" ) . mockReturnValue ( [ pinnedEvent ] ) ;
325+
326+ const { asFragment, rerender } = await mountRoomView ( undefined ) ;
327+ // Check that the pinned message banner is rendered
328+ await expect ( screen . findByTestId ( "pinned-message-banner" ) ) . resolves . toBeTruthy ( ) ;
329+ // Now rerender with hidePinnedMessagesBanner=true
330+ rerender ( < RoomView threepidInvite = { undefined } forceTimeline = { false } hidePinnedMessageBanner = { true } /> ) ;
331+ // Check that the pinned message banner is not rendered
332+ await expect ( screen . findByTestId ( "pinned-message-banner" ) ) . rejects . toThrow ( ) ;
333+ expect ( asFragment ( ) ) . toMatchSnapshot ( ) ;
334+ } ) ;
335+
301336 describe ( "invites" , ( ) => {
302337 beforeEach ( ( ) => {
303338 const member = new RoomMember ( room . roomId , cli . getSafeUserId ( ) ) ;
0 commit comments