@@ -17,6 +17,7 @@ limitations under the License.
17
17
import * as utils from "../test-utils/test-utils" ;
18
18
import { ClientEvent , EventTimeline , Filter , IEvent , MatrixClient , MatrixEvent , Room } from "../../src/matrix" ;
19
19
import { logger } from "../../src/logger" ;
20
+ import { encodeUri } from "../../lib/utils" ;
20
21
import { TestClient } from "../TestClient" ;
21
22
import { FeatureSupport , Thread , THREAD_RELATION_TYPE } from "../../src/models/thread" ;
22
23
@@ -925,6 +926,96 @@ describe("MatrixClient event timelines", function() {
925
926
} ) ;
926
927
} ) ;
927
928
929
+ describe ( "paginateEventTimeline for thread list timeline" , function ( ) {
930
+ async function flushHttp < T > ( promise : Promise < T > ) : Promise < T > {
931
+ return Promise . all ( [ promise , httpBackend . flushAllExpected ( ) ] ) . then ( ( [ result ] ) => result ) ;
932
+ }
933
+
934
+ it ( "should allow you to paginate backwards" , async function ( ) {
935
+ // @ts -ignore
936
+ client . clientOpts . experimentalThreadSupport = true ;
937
+ Thread . setServerSideSupport ( FeatureSupport . Experimental ) ;
938
+ Thread . setServerSideListSupport ( FeatureSupport . Stable ) ;
939
+
940
+ const room = client . getRoom ( roomId ) ;
941
+ const [ allThreads ] = await room . createThreadsTimelineSets ( ) ;
942
+
943
+ httpBackend . when ( "GET" , encodeUri ( "/_matrix/client/r0/rooms/$roomId/context/$eventId" , {
944
+ $roomId : roomId ,
945
+ $eventId : THREAD_ROOT . event_id ,
946
+ } ) ) . respond ( 200 , {
947
+ end : "" ,
948
+ start : "" ,
949
+ state : [ ] ,
950
+ events_before : [ ] ,
951
+ events_after : [ ] ,
952
+ event : THREAD_ROOT ,
953
+ } ) ;
954
+
955
+ await flushHttp ( client . getEventTimeline ( allThreads , THREAD_ROOT . event_id ) ) ;
956
+ httpBackend . when ( "GET" , encodeUri ( "/_matrix/client/r0/rooms/$roomId/threads" , {
957
+ $roomId : roomId ,
958
+ } ) ) . respond ( 200 , {
959
+ chunk : [ THREAD_ROOT ] ,
960
+ } ) ;
961
+ const timeline = await flushHttp ( client . getLatestTimeline ( allThreads ) ) ;
962
+ httpBackend . when ( "GET" , encodeUri ( "/_matrix/client/r0/rooms/$roomId/threads" , {
963
+ $roomId : roomId ,
964
+ } ) ) . respond ( 200 , {
965
+ chunk : [ THREAD_ROOT ] ,
966
+ next_batch : "end_token0" ,
967
+ } ) ;
968
+ const success = await flushHttp ( client . paginateEventTimeline ( timeline , { backwards : true } ) ) ;
969
+ expect ( success ) . toBeTruthy ( ) ;
970
+ expect ( timeline . getEvents ( ) . length ) . toEqual ( 1 ) ;
971
+ expect ( timeline . getEvents ( ) [ 0 ] . event ) . toEqual ( THREAD_ROOT ) ;
972
+ expect ( timeline . getPaginationToken ( EventTimeline . BACKWARDS ) )
973
+ . toEqual ( "end_token0" ) ;
974
+ } ) ;
975
+
976
+ it ( "should allow you to paginate forwards" , async function ( ) {
977
+ // @ts -ignore
978
+ client . clientOpts . experimentalThreadSupport = true ;
979
+ Thread . setServerSideSupport ( FeatureSupport . Experimental ) ;
980
+ Thread . setServerSideListSupport ( FeatureSupport . Stable ) ;
981
+
982
+ const room = client . getRoom ( roomId ) ;
983
+ const [ allThreads ] = await room . createThreadsTimelineSets ( ) ;
984
+
985
+ httpBackend . when ( "GET" , encodeUri ( "/_matrix/client/r0/rooms/$roomId/context/$eventId" , {
986
+ $roomId : roomId ,
987
+ $eventId : THREAD_ROOT . event_id ,
988
+ } ) ) . respond ( 200 , {
989
+ end : "" ,
990
+ start : "" ,
991
+ state : [ ] ,
992
+ events_before : [ ] ,
993
+ events_after : [ ] ,
994
+ event : THREAD_ROOT ,
995
+ } ) ;
996
+
997
+ await flushHttp ( client . getEventTimeline ( allThreads , THREAD_ROOT . event_id ) ) ;
998
+ httpBackend . when ( "GET" , encodeUri ( "/_matrix/client/r0/rooms/$roomId/threads" , {
999
+ $roomId : roomId ,
1000
+ } ) ) . respond ( 200 , {
1001
+ chunk : [ THREAD_ROOT ] ,
1002
+ } ) ;
1003
+ const timeline = await flushHttp ( client . getLatestTimeline ( allThreads ) ) ;
1004
+ httpBackend . when ( "GET" , encodeUri ( "/_matrix/client/r0/rooms/$roomId/threads" , {
1005
+ $roomId : roomId ,
1006
+ } ) ) . respond ( 200 , {
1007
+ chunk : [ THREAD_ROOT ] ,
1008
+ next_batch : "start_token1" ,
1009
+ } ) ;
1010
+ const success = await flushHttp ( client . paginateEventTimeline ( timeline , { backwards : false } ) ) ;
1011
+ expect ( success ) . toBeTruthy ( ) ;
1012
+ expect ( timeline . getEvents ( ) . length ) . toEqual ( 1 ) ;
1013
+ expect ( timeline . getEvents ( ) [ 0 ] . event ) . toEqual ( THREAD_ROOT ) ;
1014
+ expect ( timeline . getPaginationToken ( EventTimeline . FORWARDS ) )
1015
+ . toEqual ( "start_token1" ) ;
1016
+ } ) ;
1017
+ } ) ;
1018
+
928
1019
describe ( "event timeline for sent events" , function ( ) {
929
1020
const TXN_ID = "txn1" ;
930
1021
const event = utils . mkMessage ( {
0 commit comments