@@ -55,6 +55,23 @@ describe('EventTimelineSet', () => {
5555 } ) ;
5656 } ;
5757
58+ const mkThreadResponse = ( root : MatrixEvent ) => utils . mkEvent ( {
59+ event : true ,
60+ type : EventType . RoomMessage ,
61+ user : userA ,
62+ room : roomId ,
63+ content : {
64+ "body" : "Thread response :: " + Math . random ( ) ,
65+ "m.relates_to" : {
66+ "event_id" : root . getId ( ) ,
67+ "m.in_reply_to" : {
68+ "event_id" : root . getId ( ) ! ,
69+ } ,
70+ "rel_type" : "m.thread" ,
71+ } ,
72+ } ,
73+ } , room . client ) ;
74+
5875 beforeEach ( ( ) => {
5976 client = utils . mock ( MatrixClient , 'MatrixClient' ) ;
6077 client . reEmitter = utils . mock ( ReEmitter , 'ReEmitter' ) ;
@@ -117,6 +134,13 @@ describe('EventTimelineSet', () => {
117134 } ) ;
118135
119136 describe ( 'addEventToTimeline' , ( ) => {
137+ let thread : Thread ;
138+
139+ beforeEach ( ( ) => {
140+ ( client . supportsExperimentalThreads as jest . Mock ) . mockReturnValue ( true ) ;
141+ thread = new Thread ( "!thread_id:server" , messageEvent , { room, client } ) ;
142+ } ) ;
143+
120144 it ( "Adds event to timeline" , ( ) => {
121145 const liveTimeline = eventTimelineSet . getLiveTimeline ( ) ;
122146 expect ( liveTimeline . getEvents ( ) . length ) . toStrictEqual ( 0 ) ;
@@ -144,6 +168,41 @@ describe('EventTimelineSet', () => {
144168 ) ;
145169 } ) . not . toThrow ( ) ;
146170 } ) ;
171+
172+ it ( "should not add an event to a timeline that does not belong to the timelineSet" , ( ) => {
173+ const eventTimelineSet2 = new EventTimelineSet ( room ) ;
174+ const liveTimeline2 = eventTimelineSet2 . getLiveTimeline ( ) ;
175+ expect ( liveTimeline2 . getEvents ( ) . length ) . toStrictEqual ( 0 ) ;
176+
177+ expect ( ( ) => {
178+ eventTimelineSet . addEventToTimeline ( messageEvent , liveTimeline2 , {
179+ toStartOfTimeline : true ,
180+ } ) ;
181+ } ) . toThrowError ( ) ;
182+ } ) ;
183+
184+ it ( "should not add a threaded reply to the main room timeline" , ( ) => {
185+ const liveTimeline = eventTimelineSet . getLiveTimeline ( ) ;
186+ expect ( liveTimeline . getEvents ( ) . length ) . toStrictEqual ( 0 ) ;
187+
188+ const threadedReplyEvent = mkThreadResponse ( messageEvent ) ;
189+
190+ eventTimelineSet . addEventToTimeline ( threadedReplyEvent , liveTimeline , {
191+ toStartOfTimeline : true ,
192+ } ) ;
193+ expect ( liveTimeline . getEvents ( ) . length ) . toStrictEqual ( 0 ) ;
194+ } ) ;
195+
196+ it ( "should not add a normal message to the timelineSet representing a thread" , ( ) => {
197+ const eventTimelineSetForThread = new EventTimelineSet ( room , { } , client , thread ) ;
198+ const liveTimeline = eventTimelineSetForThread . getLiveTimeline ( ) ;
199+ expect ( liveTimeline . getEvents ( ) . length ) . toStrictEqual ( 0 ) ;
200+
201+ eventTimelineSetForThread . addEventToTimeline ( messageEvent , liveTimeline , {
202+ toStartOfTimeline : true ,
203+ } ) ;
204+ expect ( liveTimeline . getEvents ( ) . length ) . toStrictEqual ( 0 ) ;
205+ } ) ;
147206 } ) ;
148207
149208 describe ( 'aggregateRelations' , ( ) => {
0 commit comments