@@ -15,18 +15,14 @@ limitations under the License.
1515*/
1616
1717import React from 'react' ;
18- import {
19- renderIntoDocument ,
20- Simulate ,
21- findRenderedDOMComponentWithClass ,
22- act ,
23- } from 'react-dom/test-utils' ;
18+ import { render , fireEvent , RenderResult , waitFor } from "@testing-library/react" ;
2419import { Room , RoomMember , MatrixError , IContent } from 'matrix-js-sdk/src/matrix' ;
2520
2621import { stubClient } from '../../../test-utils' ;
2722import { MatrixClientPeg } from '../../../../src/MatrixClientPeg' ;
2823import DMRoomMap from '../../../../src/utils/DMRoomMap' ;
2924import RoomPreviewBar from '../../../../src/components/views/rooms/RoomPreviewBar' ;
25+ import defaultDispatcher from "../../../../src/dispatcher/dispatcher" ;
3026
3127jest . mock ( '../../../../src/IdentityAuthClient' , ( ) => {
3228 return jest . fn ( ) . mockImplementation ( ( ) => {
@@ -79,19 +75,18 @@ describe('<RoomPreviewBar />', () => {
7975 const defaultProps = {
8076 room : createRoom ( roomId , userId ) ,
8177 } ;
82- const wrapper = renderIntoDocument < React . Component > (
83- < RoomPreviewBar { ...defaultProps } { ...props } /> ,
84- ) as React . Component ;
85- return findRenderedDOMComponentWithClass ( wrapper , 'mx_RoomPreviewBar' ) as HTMLDivElement ;
78+ return render ( < RoomPreviewBar { ...defaultProps } { ...props } /> ) ;
8679 } ;
8780
88- const isSpinnerRendered = ( element : Element ) => ! ! element . querySelector ( '.mx_Spinner' ) ;
89- const getMessage = ( element : Element ) => element . querySelector < HTMLDivElement > ( '.mx_RoomPreviewBar_message' ) ;
90- const getActions = ( element : Element ) => element . querySelector < HTMLDivElement > ( '.mx_RoomPreviewBar_actions' ) ;
91- const getPrimaryActionButton = ( element : Element ) =>
92- getActions ( element ) . querySelector ( '.mx_AccessibleButton_kind_primary' ) ;
93- const getSecondaryActionButton = ( element : Element ) =>
94- getActions ( element ) . querySelector ( '.mx_AccessibleButton_kind_secondary' ) ;
81+ const isSpinnerRendered = ( wrapper : RenderResult ) => ! ! wrapper . container . querySelector ( '.mx_Spinner' ) ;
82+ const getMessage = ( wrapper : RenderResult ) =>
83+ wrapper . container . querySelector < HTMLDivElement > ( '.mx_RoomPreviewBar_message' ) ;
84+ const getActions = ( wrapper : RenderResult ) =>
85+ wrapper . container . querySelector < HTMLDivElement > ( '.mx_RoomPreviewBar_actions' ) ;
86+ const getPrimaryActionButton = ( wrapper : RenderResult ) =>
87+ getActions ( wrapper ) . querySelector ( '.mx_AccessibleButton_kind_primary' ) ;
88+ const getSecondaryActionButton = ( wrapper : RenderResult ) =>
89+ getActions ( wrapper ) . querySelector ( '.mx_AccessibleButton_kind_secondary' ) ;
9590
9691 beforeEach ( ( ) => {
9792 stubClient ( ) ;
@@ -128,6 +123,36 @@ describe('<RoomPreviewBar />', () => {
128123 expect ( getMessage ( component ) . textContent ) . toEqual ( 'Join the conversation with an account' ) ;
129124 } ) ;
130125
126+ it ( "should send room oob data to start login" , async ( ) => {
127+ MatrixClientPeg . get ( ) . isGuest = jest . fn ( ) . mockReturnValue ( true ) ;
128+ const component = getComponent ( {
129+ oobData : {
130+ name : "Room Name" ,
131+ avatarUrl : "mxc://foo/bar" ,
132+ inviterName : "Charlie" ,
133+ } ,
134+ } ) ;
135+
136+ const dispatcherSpy = jest . fn ( ) ;
137+ const dispatcherRef = defaultDispatcher . register ( dispatcherSpy ) ;
138+
139+ expect ( getMessage ( component ) . textContent ) . toEqual ( 'Join the conversation with an account' ) ;
140+ fireEvent . click ( getPrimaryActionButton ( component ) ) ;
141+
142+ await waitFor ( ( ) => expect ( dispatcherSpy ) . toHaveBeenCalledWith ( expect . objectContaining ( {
143+ screenAfterLogin : {
144+ screen : 'room' ,
145+ params : expect . objectContaining ( {
146+ room_name : "Room Name" ,
147+ room_avatar_url : "mxc://foo/bar" ,
148+ inviter_name : "Charlie" ,
149+ } ) ,
150+ } ,
151+ } ) ) ) ;
152+
153+ defaultDispatcher . unregister ( dispatcherRef ) ;
154+ } ) ;
155+
131156 it ( 'renders kicked message' , ( ) => {
132157 const room = createRoom ( roomId , otherUserId ) ;
133158 jest . spyOn ( room , 'getMember' ) . mockReturnValue ( makeMockRoomMember ( { isKicked : true } ) ) ;
@@ -233,18 +258,14 @@ describe('<RoomPreviewBar />', () => {
233258
234259 it ( 'joins room on primary button click' , ( ) => {
235260 const component = getComponent ( { inviterName, room, onJoinClick, onRejectClick } ) ;
236- act ( ( ) => {
237- Simulate . click ( getPrimaryActionButton ( component ) ) ;
238- } ) ;
261+ fireEvent . click ( getPrimaryActionButton ( component ) ) ;
239262
240263 expect ( onJoinClick ) . toHaveBeenCalled ( ) ;
241264 } ) ;
242265
243266 it ( 'rejects invite on secondary button click' , ( ) => {
244267 const component = getComponent ( { inviterName, room, onJoinClick, onRejectClick } ) ;
245- act ( ( ) => {
246- Simulate . click ( getSecondaryActionButton ( component ) ) ;
247- } ) ;
268+ fireEvent . click ( getSecondaryActionButton ( component ) ) ;
248269
249270 expect ( onRejectClick ) . toHaveBeenCalled ( ) ;
250271 } ) ;
@@ -296,9 +317,7 @@ describe('<RoomPreviewBar />', () => {
296317 await new Promise ( setImmediate ) ;
297318 expect ( getPrimaryActionButton ( component ) ) . toBeTruthy ( ) ;
298319 expect ( getSecondaryActionButton ( component ) ) . toBeFalsy ( ) ;
299- act ( ( ) => {
300- Simulate . click ( getPrimaryActionButton ( component ) ) ;
301- } ) ;
320+ fireEvent . click ( getPrimaryActionButton ( component ) ) ;
302321 expect ( onJoinClick ) . toHaveBeenCalled ( ) ;
303322 } ;
304323
0 commit comments