@@ -34,68 +34,61 @@ jest.mock("../../../../src/dispatcher/dispatcher");
3434describe ( "<RoomPredecessorTile />" , ( ) => {
3535 const userId = "@alice:server.org" ;
3636 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- } ) ;
8737 stubClient ( ) ;
8838 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+ }
9992
10093 beforeEach ( ( ) => {
10194 jest . clearAllMocks ( ) ;
@@ -111,6 +104,10 @@ describe("<RoomPredecessorTile />", () => {
111104 } ) ;
112105
113106 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+
114111 return render (
115112 < RoomContext . Provider value = { getRoomContext ( room , { } ) } >
116113 < RoomPredecessorTile mxEvent = { createEvent } />
@@ -119,15 +116,15 @@ describe("<RoomPredecessorTile />", () => {
119116 }
120117
121118 it ( "Renders as expected" , ( ) => {
122- const roomCreate = renderTile ( roomJustCreate ) ;
119+ const roomCreate = renderTile ( makeRoom ( { createEventHasPredecessor : true } ) ) ;
123120 expect ( roomCreate . asFragment ( ) ) . toMatchSnapshot ( ) ;
124121 } ) ;
125122
126123 it ( "Links to the old version of the room" , ( ) => {
127- renderTile ( roomJustCreate ) ;
124+ renderTile ( makeRoom ( { createEventHasPredecessor : true } ) ) ;
128125 expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
129126 "href" ,
130- "https://matrix.to/#/old_room_id/tombstone_event_id" ,
127+ "https://matrix.to/#/old_room_id/$ tombstone_event_id" ,
131128 ) ;
132129 } ) ;
133130
@@ -136,21 +133,21 @@ describe("<RoomPredecessorTile />", () => {
136133
137134 it ( "Shows an empty div if there is no predecessor" , ( ) => {
138135 filterConsole ;
139- renderTile ( roomNoPredecessors ) ;
136+ renderTile ( makeRoom ( { } ) ) ;
140137 expect ( screen . queryByText ( "Click here to see older messages." , { exact : false } ) ) . toBeNull ( ) ;
141138 } ) ;
142139 } ) ;
143140
144141 it ( "Opens the old room on click" , async ( ) => {
145- renderTile ( roomJustCreate ) ;
142+ renderTile ( makeRoom ( { createEventHasPredecessor : true } ) ) ;
146143 const link = screen . getByText ( "Click here to see older messages." ) ;
147144
148145 await act ( ( ) => userEvent . click ( link ) ) ;
149146
150147 await waitFor ( ( ) =>
151148 expect ( dis . dispatch ) . toHaveBeenCalledWith ( {
152149 action : Action . ViewRoom ,
153- event_id : "tombstone_event_id" ,
150+ event_id : "$ tombstone_event_id" ,
154151 highlighted : true ,
155152 room_id : "old_room_id" ,
156153 metricsTrigger : "Predecessor" ,
@@ -160,10 +157,10 @@ describe("<RoomPredecessorTile />", () => {
160157 } ) ;
161158
162159 it ( "Ignores m.predecessor if labs flag is off" , ( ) => {
163- renderTile ( roomCreateAndPredecessor ) ;
160+ renderTile ( makeRoom ( { createEventHasPredecessor : true , predecessorEventExists : true } ) ) ;
164161 expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
165162 "href" ,
166- "https://matrix.to/#/old_room_id/tombstone_event_id" ,
163+ "https://matrix.to/#/old_room_id/$ tombstone_event_id" ,
167164 ) ;
168165 } ) ;
169166
@@ -175,7 +172,7 @@ describe("<RoomPredecessorTile />", () => {
175172 } ) ;
176173
177174 it ( "Shows an error if there are no via servers" , ( ) => {
178- renderTile ( roomCreateAndPredecessor ) ;
175+ renderTile ( makeRoom ( { createEventHasPredecessor : true , predecessorEventExists : true } ) ) ;
179176 expect ( screen . getByText ( "Can't find the old version of this room" , { exact : false } ) ) . toBeInTheDocument ( ) ;
180177 } ) ;
181178 } ) ;
@@ -192,26 +189,32 @@ describe("<RoomPredecessorTile />", () => {
192189 } ) ;
193190
194191 it ( "Uses the create event if there is no m.predecessor" , ( ) => {
195- renderTile ( roomJustCreate ) ;
192+ renderTile ( makeRoom ( { createEventHasPredecessor : true } ) ) ;
196193 expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
197194 "href" ,
198- "https://matrix.to/#/old_room_id/tombstone_event_id" ,
195+ "https://matrix.to/#/old_room_id/$ tombstone_event_id" ,
199196 ) ;
200197 } ) ;
201198
202199 it ( "Uses m.predecessor when it's there" , ( ) => {
203- renderTile ( roomCreateAndPredecessor ) ;
200+ renderTile ( makeRoom ( { createEventHasPredecessor : true , predecessorEventExists : true } ) ) ;
204201 expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
205202 "href" ,
206203 "https://matrix.to/#/old_room_id_from_predecessor" ,
207204 ) ;
208205 } ) ;
209206
210207 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+ ) ;
212215 expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
213216 "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" ,
215218 ) ;
216219 } ) ;
217220
@@ -223,40 +226,38 @@ describe("<RoomPredecessorTile />", () => {
223226 } ) ;
224227
225228 it ( "Shows an error if there are no via servers" , ( ) => {
226- renderTile ( roomCreateAndPredecessor ) ;
229+ renderTile ( makeRoom ( { createEventHasPredecessor : true , predecessorEventExists : true } ) ) ;
227230 expect (
228231 screen . getByText ( "Can't find the old version of this room" , { exact : false } ) ,
229232 ) . toBeInTheDocument ( ) ;
230233 } ) ;
231234
232235 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+ ) ;
234243 expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
235244 "href" ,
236245 "https://matrix.to/#/old_room_id_from_predecessor?via=a.example.com&via=b.example.com" ,
237246 ) ;
238247 } ) ;
239248
240249 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+ ) ;
257258 expect ( screen . getByText ( "Click here to see older messages." ) ) . toHaveAttribute (
258259 "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" ,
260261 ) ;
261262 } ) ;
262263 } ) ;
0 commit comments