|
1 | 1 | import * as utils from "../test-utils/test-utils"; |
2 | | -import { EventTimeline } from "../../src/matrix"; |
| 2 | +import { EventTimeline, Filter, MatrixEvent } from "../../src/matrix"; |
3 | 3 | import { logger } from "../../src/logger"; |
4 | 4 | import { TestClient } from "../TestClient"; |
5 | 5 | import { Thread, THREAD_RELATION_TYPE } from "../../src/models/thread"; |
@@ -500,7 +500,8 @@ describe("MatrixClient event timelines", function() { |
500 | 500 | Thread.setServerSideSupport(true); |
501 | 501 | client.stopClient(); // we don't need the client to be syncing at this time |
502 | 502 | const room = client.getRoom(roomId); |
503 | | - const timelineSet = room.getTimelineSets()[0]; |
| 503 | + const thread = room.createThread(THREAD_ROOT.event_id, undefined, [], false); |
| 504 | + const timelineSet = thread.timelineSet; |
504 | 505 |
|
505 | 506 | httpBackend.when("GET", "/rooms/!foo%3Abar/context/" + encodeURIComponent(THREAD_REPLY.event_id)) |
506 | 507 | .respond(200, function() { |
@@ -538,6 +539,92 @@ describe("MatrixClient event timelines", function() { |
538 | 539 | expect(timeline.getEvents().find(e => e.getId() === THREAD_ROOT.event_id)).toBeTruthy(); |
539 | 540 | expect(timeline.getEvents().find(e => e.getId() === THREAD_REPLY.event_id)).toBeTruthy(); |
540 | 541 | }); |
| 542 | + |
| 543 | + it("should return undefined when event is not within a thread but timelineSet is", async () => { |
| 544 | + client.clientOpts.experimentalThreadSupport = true; |
| 545 | + Thread.setServerSideSupport(true); |
| 546 | + client.stopClient(); // we don't need the client to be syncing at this time |
| 547 | + const room = client.getRoom(roomId); |
| 548 | + const threadRoot = new MatrixEvent(THREAD_ROOT); |
| 549 | + const thread = room.createThread(THREAD_ROOT.event_id, threadRoot, [threadRoot], false); |
| 550 | + const timelineSet = thread.timelineSet; |
| 551 | + |
| 552 | + httpBackend.when("GET", "/rooms/!foo%3Abar/event/" + encodeURIComponent(THREAD_ROOT.event_id)) |
| 553 | + .respond(200, function() { |
| 554 | + return THREAD_ROOT; |
| 555 | + }); |
| 556 | + |
| 557 | + httpBackend.when("GET", "/rooms/!foo%3Abar/context/" + encodeURIComponent(EVENTS[0].event_id)) |
| 558 | + .respond(200, function() { |
| 559 | + return { |
| 560 | + start: "start_token0", |
| 561 | + events_before: [], |
| 562 | + event: EVENTS[0], |
| 563 | + events_after: [], |
| 564 | + end: "end_token0", |
| 565 | + state: [], |
| 566 | + }; |
| 567 | + }); |
| 568 | + |
| 569 | + const timelinePromise = client.getEventTimeline(timelineSet, EVENTS[0].event_id); |
| 570 | + await httpBackend.flushAllExpected(); |
| 571 | + |
| 572 | + const timeline = await timelinePromise; |
| 573 | + expect(timeline).toBeUndefined(); |
| 574 | + }); |
| 575 | + |
| 576 | + it("should return undefined when event is within a thread but timelineSet is not", async () => { |
| 577 | + client.clientOpts.experimentalThreadSupport = true; |
| 578 | + Thread.setServerSideSupport(true); |
| 579 | + client.stopClient(); // we don't need the client to be syncing at this time |
| 580 | + const room = client.getRoom(roomId); |
| 581 | + const timelineSet = room.getTimelineSets()[0]; |
| 582 | + |
| 583 | + httpBackend.when("GET", "/rooms/!foo%3Abar/context/" + encodeURIComponent(THREAD_REPLY.event_id)) |
| 584 | + .respond(200, function() { |
| 585 | + return { |
| 586 | + start: "start_token0", |
| 587 | + events_before: [], |
| 588 | + event: THREAD_REPLY, |
| 589 | + events_after: [], |
| 590 | + end: "end_token0", |
| 591 | + state: [], |
| 592 | + }; |
| 593 | + }); |
| 594 | + |
| 595 | + const timelinePromise = client.getEventTimeline(timelineSet, THREAD_REPLY.event_id); |
| 596 | + await httpBackend.flushAllExpected(); |
| 597 | + |
| 598 | + const timeline = await timelinePromise; |
| 599 | + expect(timeline).toBeUndefined(); |
| 600 | + }); |
| 601 | + |
| 602 | + it("should should add lazy loading filter when requested", async () => { |
| 603 | + client.clientOpts.lazyLoadMembers = true; |
| 604 | + client.stopClient(); // we don't need the client to be syncing at this time |
| 605 | + const room = client.getRoom(roomId); |
| 606 | + const timelineSet = room.getTimelineSets()[0]; |
| 607 | + |
| 608 | + const req = httpBackend.when("GET", "/rooms/!foo%3Abar/context/" + encodeURIComponent(EVENTS[0].event_id)); |
| 609 | + req.respond(200, function() { |
| 610 | + return { |
| 611 | + start: "start_token0", |
| 612 | + events_before: [], |
| 613 | + event: EVENTS[0], |
| 614 | + events_after: [], |
| 615 | + end: "end_token0", |
| 616 | + state: [], |
| 617 | + }; |
| 618 | + }); |
| 619 | + req.check((request) => { |
| 620 | + expect(request.opts.qs.filter).toEqual(JSON.stringify(Filter.LAZY_LOADING_MESSAGES_FILTER)); |
| 621 | + }); |
| 622 | + |
| 623 | + await Promise.all([ |
| 624 | + client.getEventTimeline(timelineSet, EVENTS[0].event_id), |
| 625 | + httpBackend.flushAllExpected(), |
| 626 | + ]); |
| 627 | + }); |
541 | 628 | }); |
542 | 629 |
|
543 | 630 | describe("getLatestTimeline", function() { |
|
0 commit comments