@@ -34,68 +34,61 @@ jest.mock("../../../../src/dispatcher/dispatcher");
34
34
describe ( "<RoomPredecessorTile />" , ( ) => {
35
35
const userId = "@alice:server.org" ;
36
36
const roomId = "!room:server.org" ;
37
- const createEvent = new MatrixEvent ( {
38
- type : EventType . RoomCreate ,
39
- state_key : "" ,
40
- sender : userId ,
41
- room_id : roomId ,
42
- content : {
43
- predecessor : { room_id : "old_room_id" , event_id : "tombstone_event_id" } ,
44
- } ,
45
- event_id : "$create" ,
46
- } ) ;
47
- const createEventWithoutPredecessor = new MatrixEvent ( {
48
- type : EventType . RoomCreate ,
49
- state_key : "" ,
50
- sender : userId ,
51
- room_id : roomId ,
52
- content : { } ,
53
- event_id : "$create" ,
54
- } ) ;
55
- const predecessorEvent = new MatrixEvent ( {
56
- type : EventType . RoomPredecessor ,
57
- state_key : "" ,
58
- sender : userId ,
59
- room_id : roomId ,
60
- content : {
61
- predecessor_room_id : "old_room_id_from_predecessor" ,
62
- } ,
63
- event_id : "$create" ,
64
- } ) ;
65
- const viaPredecessorEvent = new MatrixEvent ( {
66
- type : EventType . RoomPredecessor ,
67
- state_key : "" ,
68
- sender : userId ,
69
- room_id : roomId ,
70
- content : {
71
- predecessor_room_id : "old_room_id_from_predecessor" ,
72
- via_servers : [ "a.example.com" , "b.example.com" ] ,
73
- } ,
74
- event_id : "$create" ,
75
- } ) ;
76
- const predecessorEventWithEventId = new MatrixEvent ( {
77
- type : EventType . RoomPredecessor ,
78
- state_key : "" ,
79
- sender : userId ,
80
- room_id : roomId ,
81
- content : {
82
- predecessor_room_id : "old_room_id_from_predecessor" ,
83
- last_known_event_id : "tombstone_event_id_from_predecessor" ,
84
- } ,
85
- event_id : "$create" ,
86
- } ) ;
87
37
stubClient ( ) ;
88
38
const client = mocked ( MatrixClientPeg . get ( ) ) ;
89
- const roomJustCreate = new Room ( roomId , client , userId ) ;
90
- upsertRoomStateEvents ( roomJustCreate , [ createEvent ] ) ;
91
- const roomCreateAndPredecessor = new Room ( roomId , client , userId ) ;
92
- upsertRoomStateEvents ( roomCreateAndPredecessor , [ createEvent , predecessorEvent ] ) ;
93
- const roomCreateAndPredecessorWithEventId = new Room ( roomId , client , userId ) ;
94
- upsertRoomStateEvents ( roomCreateAndPredecessorWithEventId , [ createEvent , predecessorEventWithEventId ] ) ;
95
- const roomNoPredecessors = new Room ( roomId , client , userId ) ;
96
- upsertRoomStateEvents ( roomNoPredecessors , [ createEventWithoutPredecessor ] ) ;
97
- const roomCreateAndViaPredecessor = new Room ( roomId , client , userId ) ;
98
- upsertRoomStateEvents ( roomCreateAndViaPredecessor , [ createEvent , viaPredecessorEvent ] ) ;
39
+
40
+ function makeRoom ( {
41
+ createEventHasPredecessor = false ,
42
+ predecessorEventExists = false ,
43
+ predecessorEventHasEventId = false ,
44
+ predecessorEventHasViaServers = false ,
45
+ } ) : Room {
46
+ const room = new Room ( roomId , client , userId ) ;
47
+
48
+ const createInfo = {
49
+ type : EventType . RoomCreate ,
50
+ state_key : "" ,
51
+ sender : userId ,
52
+ room_id : roomId ,
53
+ content : { } ,
54
+ event_id : "$create" ,
55
+ } ;
56
+
57
+ if ( createEventHasPredecessor ) {
58
+ createInfo . content = {
59
+ predecessor : { room_id : "old_room_id" , event_id : "$tombstone_event_id" } ,
60
+ } ;
61
+ }
62
+
63
+ const createEvent = new MatrixEvent ( createInfo ) ;
64
+ upsertRoomStateEvents ( room , [ createEvent ] ) ;
65
+
66
+ if ( predecessorEventExists ) {
67
+ const predecessorInfo = {
68
+ type : EventType . RoomPredecessor ,
69
+ state_key : "" ,
70
+ sender : userId ,
71
+ room_id : roomId ,
72
+ content : {
73
+ predecessor_room_id : "old_room_id_from_predecessor" ,
74
+ last_known_event_id : undefined ,
75
+ via_servers : undefined ,
76
+ } ,
77
+ event_id : "$predecessor" ,
78
+ } ;
79
+
80
+ if ( predecessorEventHasEventId ) {
81
+ predecessorInfo . content . last_known_event_id = "$tombstone_event_id_from_predecessor" ;
82
+ }
83
+ if ( predecessorEventHasViaServers ) {
84
+ predecessorInfo . content . via_servers = [ "a.example.com" , "b.example.com" ] ;
85
+ }
86
+
87
+ const predecessorEvent = new MatrixEvent ( predecessorInfo ) ;
88
+ upsertRoomStateEvents ( room , [ predecessorEvent ] ) ;
89
+ }
90
+ return room ;
91
+ }
99
92
100
93
beforeEach ( ( ) => {
101
94
jest . clearAllMocks ( ) ;
@@ -111,6 +104,10 @@ describe("<RoomPredecessorTile />", () => {
111
104
} ) ;
112
105
113
106
function renderTile ( room : Room ) {
107
+ // Find this room's create event (it should have one!)
108
+ const createEvent = room . currentState . getStateEvents ( "m.room.create" ) [ 0 ] ;
109
+ expect ( createEvent ) . toBeTruthy ( ) ;
110
+
114
111
return render (
115
112
< RoomContext . Provider value = { getRoomContext ( room , { } ) } >
116
113
< RoomPredecessorTile mxEvent = { createEvent } />
@@ -119,15 +116,15 @@ describe("<RoomPredecessorTile />", () => {
119
116
}
120
117
121
118
it ( "Renders as expected" , ( ) => {
122
- const roomCreate = renderTile ( roomJustCreate ) ;
119
+ const roomCreate = renderTile ( makeRoom ( { createEventHasPredecessor : true } ) ) ;
123
120
expect ( roomCreate . asFragment ( ) ) . toMatchSnapshot ( ) ;
124
121
} ) ;
125
122
126
123
it ( "Links to the old version of the room" , ( ) => {
127
- renderTile ( roomJustCreate ) ;
124
+ renderTile ( makeRoom ( { createEventHasPredecessor : true } ) ) ;
128
125
expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
129
126
"href" ,
130
- "https://matrix.to/#/old_room_id/tombstone_event_id" ,
127
+ "https://matrix.to/#/old_room_id/$ tombstone_event_id" ,
131
128
) ;
132
129
} ) ;
133
130
@@ -136,21 +133,21 @@ describe("<RoomPredecessorTile />", () => {
136
133
137
134
it ( "Shows an empty div if there is no predecessor" , ( ) => {
138
135
filterConsole ;
139
- renderTile ( roomNoPredecessors ) ;
136
+ renderTile ( makeRoom ( { } ) ) ;
140
137
expect ( screen . queryByText ( "Click here to see older messages." , { exact : false } ) ) . toBeNull ( ) ;
141
138
} ) ;
142
139
} ) ;
143
140
144
141
it ( "Opens the old room on click" , async ( ) => {
145
- renderTile ( roomJustCreate ) ;
142
+ renderTile ( makeRoom ( { createEventHasPredecessor : true } ) ) ;
146
143
const link = screen . getByText ( "Click here to see older messages." ) ;
147
144
148
145
await act ( ( ) => userEvent . click ( link ) ) ;
149
146
150
147
await waitFor ( ( ) =>
151
148
expect ( dis . dispatch ) . toHaveBeenCalledWith ( {
152
149
action : Action . ViewRoom ,
153
- event_id : "tombstone_event_id" ,
150
+ event_id : "$ tombstone_event_id" ,
154
151
highlighted : true ,
155
152
room_id : "old_room_id" ,
156
153
metricsTrigger : "Predecessor" ,
@@ -160,10 +157,10 @@ describe("<RoomPredecessorTile />", () => {
160
157
} ) ;
161
158
162
159
it ( "Ignores m.predecessor if labs flag is off" , ( ) => {
163
- renderTile ( roomCreateAndPredecessor ) ;
160
+ renderTile ( makeRoom ( { createEventHasPredecessor : true , predecessorEventExists : true } ) ) ;
164
161
expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
165
162
"href" ,
166
- "https://matrix.to/#/old_room_id/tombstone_event_id" ,
163
+ "https://matrix.to/#/old_room_id/$ tombstone_event_id" ,
167
164
) ;
168
165
} ) ;
169
166
@@ -175,7 +172,7 @@ describe("<RoomPredecessorTile />", () => {
175
172
} ) ;
176
173
177
174
it ( "Shows an error if there are no via servers" , ( ) => {
178
- renderTile ( roomCreateAndPredecessor ) ;
175
+ renderTile ( makeRoom ( { createEventHasPredecessor : true , predecessorEventExists : true } ) ) ;
179
176
expect ( screen . getByText ( "Can't find the old version of this room" , { exact : false } ) ) . toBeInTheDocument ( ) ;
180
177
} ) ;
181
178
} ) ;
@@ -192,26 +189,32 @@ describe("<RoomPredecessorTile />", () => {
192
189
} ) ;
193
190
194
191
it ( "Uses the create event if there is no m.predecessor" , ( ) => {
195
- renderTile ( roomJustCreate ) ;
192
+ renderTile ( makeRoom ( { createEventHasPredecessor : true } ) ) ;
196
193
expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
197
194
"href" ,
198
- "https://matrix.to/#/old_room_id/tombstone_event_id" ,
195
+ "https://matrix.to/#/old_room_id/$ tombstone_event_id" ,
199
196
) ;
200
197
} ) ;
201
198
202
199
it ( "Uses m.predecessor when it's there" , ( ) => {
203
- renderTile ( roomCreateAndPredecessor ) ;
200
+ renderTile ( makeRoom ( { createEventHasPredecessor : true , predecessorEventExists : true } ) ) ;
204
201
expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
205
202
"href" ,
206
203
"https://matrix.to/#/old_room_id_from_predecessor" ,
207
204
) ;
208
205
} ) ;
209
206
210
207
it ( "Links to the event in the room if event ID is provided" , ( ) => {
211
- renderTile ( roomCreateAndPredecessorWithEventId ) ;
208
+ renderTile (
209
+ makeRoom ( {
210
+ createEventHasPredecessor : true ,
211
+ predecessorEventExists : true ,
212
+ predecessorEventHasEventId : true ,
213
+ } ) ,
214
+ ) ;
212
215
expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
213
216
"href" ,
214
- "https://matrix.to/#/old_room_id_from_predecessor/tombstone_event_id_from_predecessor" ,
217
+ "https://matrix.to/#/old_room_id_from_predecessor/$ tombstone_event_id_from_predecessor" ,
215
218
) ;
216
219
} ) ;
217
220
@@ -223,40 +226,38 @@ describe("<RoomPredecessorTile />", () => {
223
226
} ) ;
224
227
225
228
it ( "Shows an error if there are no via servers" , ( ) => {
226
- renderTile ( roomCreateAndPredecessor ) ;
229
+ renderTile ( makeRoom ( { createEventHasPredecessor : true , predecessorEventExists : true } ) ) ;
227
230
expect (
228
231
screen . getByText ( "Can't find the old version of this room" , { exact : false } ) ,
229
232
) . toBeInTheDocument ( ) ;
230
233
} ) ;
231
234
232
235
it ( "Shows a tile if there are via servers" , ( ) => {
233
- renderTile ( roomCreateAndViaPredecessor ) ;
236
+ renderTile (
237
+ makeRoom ( {
238
+ createEventHasPredecessor : true ,
239
+ predecessorEventExists : true ,
240
+ predecessorEventHasViaServers : true ,
241
+ } ) ,
242
+ ) ;
234
243
expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
235
244
"href" ,
236
245
"https://matrix.to/#/old_room_id_from_predecessor?via=a.example.com&via=b.example.com" ,
237
246
) ;
238
247
} ) ;
239
248
240
249
it ( "Shows a tile linking to an event if there are via servers" , ( ) => {
241
- const predecessorEvent = new MatrixEvent ( {
242
- type : EventType . RoomPredecessor ,
243
- state_key : "" ,
244
- sender : userId ,
245
- room_id : roomId ,
246
- content : {
247
- predecessor_room_id : "old_room_id_from_predecessor" ,
248
- last_known_event_id : "$tombstone" ,
249
- via_servers : [ "a.example.com" , "b.example.com" ] ,
250
- } ,
251
- event_id : "$create" ,
252
- } ) ;
253
- const room = new Room ( roomId , client , userId ) ;
254
- upsertRoomStateEvents ( room , [ createEvent , predecessorEvent ] ) ;
255
-
256
- renderTile ( room ) ;
250
+ renderTile (
251
+ makeRoom ( {
252
+ createEventHasPredecessor : true ,
253
+ predecessorEventExists : true ,
254
+ predecessorEventHasEventId : true ,
255
+ predecessorEventHasViaServers : true ,
256
+ } ) ,
257
+ ) ;
257
258
expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
258
259
"href" ,
259
- "https://matrix.to/#/old_room_id_from_predecessor/$tombstone ?via=a.example.com&via=b.example.com" ,
260
+ "https://matrix.to/#/old_room_id_from_predecessor/$tombstone_event_id_from_predecessor ?via=a.example.com&via=b.example.com" ,
260
261
) ;
261
262
} ) ;
262
263
} ) ;
0 commit comments