Skip to content

Commit a3be071

Browse files
committed
write test for thread list pagination
1 parent 94390da commit a3be071

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

@@ -925,6 +926,96 @@ describe("MatrixClient event timelines", function() {
925926
});
926927
});
927928

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+
9281019
describe("event timeline for sent events", function() {
9291020
const TXN_ID = "txn1";
9301021
const event = utils.mkMessage({

0 commit comments

Comments
 (0)