Skip to content

Commit c5aff2d

Browse files
committed
write test for thread list pagination
1 parent d22cfcb commit c5aff2d

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

spec/integ/matrix-client-event-timeline.spec.ts

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
import * as utils from "../test-utils/test-utils";
1818
import { ClientEvent, EventTimeline, Filter, IEvent, MatrixClient, MatrixEvent, Room } from "../../src/matrix";
1919
import { logger } from "../../src/logger";
20+
import { encodeUri } from "../../lib/utils";
2021
import { TestClient } from "../TestClient";
2122
import { FeatureSupport, Thread, THREAD_RELATION_TYPE } from "../../src/models/thread";
2223

@@ -886,6 +887,96 @@ describe("MatrixClient event timelines", function() {
886887
});
887888
});
888889

890+
describe("paginateEventTimeline for thread list timeline", function() {
891+
async function flushHttp<T>(promise: Promise<T>): Promise<T> {
892+
return Promise.all([promise, httpBackend.flushAllExpected()]).then(([result]) => result);
893+
}
894+
895+
it("should allow you to paginate backwards", async function() {
896+
// @ts-ignore
897+
client.clientOpts.experimentalThreadSupport = true;
898+
Thread.setServerSideSupport(FeatureSupport.Experimental);
899+
Thread.setServerSideListSupport(FeatureSupport.Stable);
900+
901+
const room = client.getRoom(roomId);
902+
const [allThreads] = await room.createThreadsTimelineSets();
903+
904+
httpBackend.when("GET", encodeUri("/_matrix/client/r0/rooms/$roomId/context/$eventId", {
905+
$roomId: roomId,
906+
$eventId: THREAD_ROOT.event_id,
907+
})).respond(200, {
908+
end: "",
909+
start: "",
910+
state: [],
911+
events_before: [],
912+
events_after: [],
913+
event: THREAD_ROOT,
914+
});
915+
916+
await flushHttp(client.getEventTimeline(allThreads, THREAD_ROOT.event_id));
917+
httpBackend.when("GET", encodeUri("/_matrix/client/r0/rooms/$roomId/threads", {
918+
$roomId: roomId,
919+
})).respond(200, {
920+
chunk: [THREAD_ROOT],
921+
});
922+
const timeline = await flushHttp(client.getLatestTimeline(allThreads));
923+
httpBackend.when("GET", encodeUri("/_matrix/client/r0/rooms/$roomId/threads", {
924+
$roomId: roomId,
925+
})).respond(200, {
926+
chunk: [THREAD_ROOT],
927+
next_batch: "end_token0",
928+
});
929+
const success = await flushHttp(client.paginateEventTimeline(timeline, { backwards: true }));
930+
expect(success).toBeTruthy();
931+
expect(timeline.getEvents().length).toEqual(1);
932+
expect(timeline.getEvents()[0].event).toEqual(THREAD_ROOT);
933+
expect(timeline.getPaginationToken(EventTimeline.BACKWARDS))
934+
.toEqual("end_token0");
935+
});
936+
937+
it("should allow you to paginate forwards", async function() {
938+
// @ts-ignore
939+
client.clientOpts.experimentalThreadSupport = true;
940+
Thread.setServerSideSupport(FeatureSupport.Experimental);
941+
Thread.setServerSideListSupport(FeatureSupport.Stable);
942+
943+
const room = client.getRoom(roomId);
944+
const [allThreads] = await room.createThreadsTimelineSets();
945+
946+
httpBackend.when("GET", encodeUri("/_matrix/client/r0/rooms/$roomId/context/$eventId", {
947+
$roomId: roomId,
948+
$eventId: THREAD_ROOT.event_id,
949+
})).respond(200, {
950+
end: "",
951+
start: "",
952+
state: [],
953+
events_before: [],
954+
events_after: [],
955+
event: THREAD_ROOT,
956+
});
957+
958+
await flushHttp(client.getEventTimeline(allThreads, THREAD_ROOT.event_id));
959+
httpBackend.when("GET", encodeUri("/_matrix/client/r0/rooms/$roomId/threads", {
960+
$roomId: roomId,
961+
})).respond(200, {
962+
chunk: [THREAD_ROOT],
963+
});
964+
const timeline = await flushHttp(client.getLatestTimeline(allThreads));
965+
httpBackend.when("GET", encodeUri("/_matrix/client/r0/rooms/$roomId/threads", {
966+
$roomId: roomId,
967+
})).respond(200, {
968+
chunk: [THREAD_ROOT],
969+
next_batch: "start_token1",
970+
});
971+
const success = await flushHttp(client.paginateEventTimeline(timeline, { backwards: false }));
972+
expect(success).toBeTruthy();
973+
expect(timeline.getEvents().length).toEqual(1);
974+
expect(timeline.getEvents()[0].event).toEqual(THREAD_ROOT);
975+
expect(timeline.getPaginationToken(EventTimeline.FORWARDS))
976+
.toEqual("start_token1");
977+
});
978+
});
979+
889980
describe("event timeline for sent events", function() {
890981
const TXN_ID = "txn1";
891982
const event = utils.mkMessage({

0 commit comments

Comments
 (0)