@@ -17,11 +17,11 @@ limitations under the License.
17
17
import React from "react" ;
18
18
import { render , screen } from "@testing-library/react" ;
19
19
import { RoomType } from "matrix-js-sdk/src/@types/event" ;
20
+ import { Room } from "matrix-js-sdk/src/matrix" ;
20
21
21
22
import InviteDialog from "../../../../src/components/views/dialogs/InviteDialog" ;
22
- import { KIND_INVITE } from "../../../../src/components/views/dialogs/InviteDialogTypes" ;
23
- import { getMockClientWithEventEmitter , mkStubRoom } from "../../../test-utils" ;
24
- import { MatrixClientPeg } from "../../../../src/MatrixClientPeg" ;
23
+ import { KIND_DM , KIND_INVITE } from "../../../../src/components/views/dialogs/InviteDialogTypes" ;
24
+ import { getMockClientWithEventEmitter , mkMembership , mkMessage , mkRoomCreateEvent } from "../../../test-utils" ;
25
25
import DMRoomMap from "../../../../src/utils/DMRoomMap" ;
26
26
import SdkConfig from "../../../../src/SdkConfig" ;
27
27
import { ValidatedServerConfig } from "../../../../src/utils/ValidatedServerConfig" ;
@@ -37,8 +37,11 @@ jest.mock("../../../../src/IdentityAuthClient", () =>
37
37
describe ( "InviteDialog" , ( ) => {
38
38
const roomId = "!111111111111111111:example.org" ;
39
39
const aliceId = "@alice:example.org" ;
40
+ const aliceEmail = "[email protected] " ;
41
+ const bobId = "@bob:example.org" ;
40
42
const mockClient = getMockClientWithEventEmitter ( {
41
- getUserId : jest . fn ( ) . mockReturnValue ( aliceId ) ,
43
+ getUserId : jest . fn ( ) . mockReturnValue ( bobId ) ,
44
+ getSafeUserId : jest . fn ( ) . mockReturnValue ( bobId ) ,
42
45
isGuest : jest . fn ( ) . mockReturnValue ( false ) ,
43
46
getVisibleRooms : jest . fn ( ) . mockReturnValue ( [ ] ) ,
44
47
getRoom : jest . fn ( ) ,
@@ -58,36 +61,61 @@ describe("InviteDialog", () => {
58
61
getOpenIdToken : jest . fn ( ) . mockResolvedValue ( { } ) ,
59
62
getIdentityAccount : jest . fn ( ) . mockResolvedValue ( { } ) ,
60
63
getTerms : jest . fn ( ) . mockResolvedValue ( { policies : [ ] } ) ,
64
+ supportsThreads : jest . fn ( ) . mockReturnValue ( false ) ,
65
+ isInitialSyncComplete : jest . fn ( ) . mockReturnValue ( true ) ,
61
66
} ) ;
67
+ let room : Room ;
62
68
63
69
beforeEach ( ( ) => {
64
70
SdkConfig . put ( { validated_server_config : { } as ValidatedServerConfig } as IConfigOptions ) ;
65
71
DMRoomMap . makeShared ( ) ;
66
72
jest . clearAllMocks ( ) ;
67
- mockClient . getUserId . mockReturnValue ( "@bob:example.org" ) ;
68
-
69
- const room = mkStubRoom ( roomId , "Room" , mockClient ) ;
73
+ mockClient . getUserId . mockReturnValue ( bobId ) ;
74
+
75
+ room = new Room ( roomId , mockClient , mockClient . getSafeUserId ( ) ) ;
76
+ room . addLiveEvents ( [
77
+ mkMessage ( {
78
+ msg : "Hello" ,
79
+ relatesTo : undefined ,
80
+ event : true ,
81
+ room : roomId ,
82
+ user : mockClient . getSafeUserId ( ) ,
83
+ ts : Date . now ( ) ,
84
+ } ) ,
85
+ ] ) ;
86
+ room . currentState . setStateEvents ( [
87
+ mkRoomCreateEvent ( bobId , roomId ) ,
88
+ mkMembership ( {
89
+ event : true ,
90
+ room : roomId ,
91
+ mship : "join" ,
92
+ user : aliceId ,
93
+ skey : aliceId ,
94
+ } ) ,
95
+ ] ) ;
96
+ jest . spyOn ( DMRoomMap . shared ( ) , "getUniqueRoomsWithIndividuals" ) . mockReturnValue ( {
97
+ [ aliceId ] : room ,
98
+ } ) ;
70
99
mockClient . getRooms . mockReturnValue ( [ room ] ) ;
71
100
mockClient . getRoom . mockReturnValue ( room ) ;
72
101
} ) ;
73
102
74
103
afterAll ( ( ) => {
75
- jest . spyOn ( MatrixClientPeg , "get" ) . mockRestore ( ) ;
104
+ jest . restoreAllMocks ( ) ;
76
105
} ) ;
77
106
78
107
it ( "should label with space name" , ( ) => {
79
- mockClient . getRoom ( roomId ) ! . isSpaceRoom = jest . fn ( ) . mockReturnValue ( true ) ;
80
- mockClient . getRoom ( roomId ) ! . getType = jest . fn ( ) . mockReturnValue ( RoomType . Space ) ;
81
- mockClient . getRoom ( roomId ) ! . name = "Space" ;
108
+ room . isSpaceRoom = jest . fn ( ) . mockReturnValue ( true ) ;
109
+ room . getType = jest . fn ( ) . mockReturnValue ( RoomType . Space ) ;
110
+ room . name = "Space" ;
82
111
render ( < InviteDialog kind = { KIND_INVITE } roomId = { roomId } onFinished = { jest . fn ( ) } /> ) ;
83
112
84
113
expect ( screen . queryByText ( "Invite to Space" ) ) . toBeTruthy ( ) ;
85
114
} ) ;
86
115
87
116
it ( "should label with room name" , ( ) => {
88
117
render ( < InviteDialog kind = { KIND_INVITE } roomId = { roomId } onFinished = { jest . fn ( ) } /> ) ;
89
-
90
- expect ( screen . queryByText ( "Invite to Room" ) ) . toBeTruthy ( ) ;
118
+ expect ( screen . getByText ( `Invite to ${ roomId } ` ) ) . toBeInTheDocument ( ) ;
91
119
} ) ;
92
120
93
121
it ( "should suggest valid MXIDs even if unknown" , async ( ) => {
@@ -116,27 +144,37 @@ describe("InviteDialog", () => {
116
144
expect ( screen . queryByText ( "@localpart:server:tld" ) ) . toBeFalsy ( ) ;
117
145
} ) ;
118
146
119
- it ( "should lookup inputs which look like email addresses" , async ( ) => {
120
- mockClient . getIdentityServerUrl . mockReturnValue ( "https://identity-server" ) ;
121
- mockClient . lookupThreePid . mockResolvedValue ( {
122
-
123
- medium : "email" ,
124
- mxid : "@foobar:server" ,
125
- } ) ;
126
- mockClient . getProfileInfo . mockResolvedValue ( {
127
- displayname : "Mr. Foo" ,
128
- avatar_url : "mxc://foo/bar" ,
129
- } ) ;
130
-
131
- render (
132
- < InviteDialog kind = { KIND_INVITE } roomId = { roomId } onFinished = { jest . fn ( ) } initialText = "[email protected] " /> ,
133
- ) ;
134
-
135
- await screen . findByText ( "Mr. Foo" ) ;
136
- await screen . findByText ( "@foobar:server" ) ;
137
- expect ( mockClient . lookupThreePid ) . toHaveBeenCalledWith ( "email" , "[email protected] " , expect . anything ( ) ) ;
138
- expect ( mockClient . getProfileInfo ) . toHaveBeenCalledWith ( "@foobar:server" ) ;
139
- } ) ;
147
+ it . each ( [ [ KIND_DM ] , [ KIND_INVITE ] ] as [ typeof KIND_DM | typeof KIND_INVITE ] [ ] ) (
148
+ "should lookup inputs which look like email addresses (%s)" ,
149
+ async ( kind : typeof KIND_DM | typeof KIND_INVITE ) => {
150
+ mockClient . getIdentityServerUrl . mockReturnValue ( "https://identity-server" ) ;
151
+ mockClient . lookupThreePid . mockResolvedValue ( {
152
+ address : aliceEmail ,
153
+ medium : "email" ,
154
+ mxid : aliceId ,
155
+ } ) ;
156
+ mockClient . getProfileInfo . mockResolvedValue ( {
157
+ displayname : "Mrs Alice" ,
158
+ avatar_url : "mxc://foo/bar" ,
159
+ } ) ;
160
+
161
+ render (
162
+ < InviteDialog
163
+ kind = { kind }
164
+ roomId = { kind === KIND_INVITE ? roomId : "" }
165
+ onFinished = { jest . fn ( ) }
166
+ initialText = { aliceEmail }
167
+ /> ,
168
+ ) ;
169
+
170
+ await screen . findByText ( "Mrs Alice" ) ;
171
+ // expect the email and MXID to be visible
172
+ await screen . findByText ( aliceId ) ;
173
+ await screen . findByText ( aliceEmail ) ;
174
+ expect ( mockClient . lookupThreePid ) . toHaveBeenCalledWith ( "email" , aliceEmail , expect . anything ( ) ) ;
175
+ expect ( mockClient . getProfileInfo ) . toHaveBeenCalledWith ( aliceId ) ;
176
+ } ,
177
+ ) ;
140
178
141
179
it ( "should suggest e-mail even if lookup fails" , async ( ) => {
142
180
mockClient . getIdentityServerUrl . mockReturnValue ( "https://identity-server" ) ;
0 commit comments