You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-08-06 12:02:40 +03:00
room lazy loading tests + fix
This commit is contained in:
@@ -1272,4 +1272,64 @@ describe("Room", function() {
|
|||||||
expect(callCount).toEqual(1);
|
expect(callCount).toEqual(1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("setLazyLoadedMembers", function() {
|
||||||
|
it("should apply member info in promise", async function() {
|
||||||
|
const room = new Room(roomId);
|
||||||
|
expect(room.membersNeedLoading()).toEqual(true);
|
||||||
|
const infoA = {userId: userA, membership: "invite"};
|
||||||
|
const infoB = {userId: userB, membership: "join"};
|
||||||
|
const promise = room.setLazyLoadedMembers(Promise.resolve([infoA, infoB]));
|
||||||
|
await promise;
|
||||||
|
expect(room.membersNeedLoading()).toEqual(false);
|
||||||
|
const memberA = room.getMember(userA);
|
||||||
|
const memberB = room.getMember(userB);
|
||||||
|
expect(memberA.membership).toEqual("invite");
|
||||||
|
expect(memberA.isLazyLoaded()).toEqual(true);
|
||||||
|
expect(memberB.membership).toEqual("join");
|
||||||
|
expect(memberB.isLazyLoaded()).toEqual(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should revert needs loading on error", async function() {
|
||||||
|
const room = new Room(roomId);
|
||||||
|
let hasThrown = false;
|
||||||
|
try {
|
||||||
|
await room.setLazyLoadedMembers(Promise.reject(new Error("bugger")));
|
||||||
|
}
|
||||||
|
catch(err) {
|
||||||
|
hasThrown = true;
|
||||||
|
}
|
||||||
|
expect(hasThrown).toEqual(true);
|
||||||
|
expect(room.membersNeedLoading()).toEqual(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should revert needs loading on error", async function() {
|
||||||
|
const room = new Room(roomId);
|
||||||
|
let hasThrown = false;
|
||||||
|
try {
|
||||||
|
await room.setLazyLoadedMembers(Promise.reject(new Error("bugger")));
|
||||||
|
}
|
||||||
|
catch(err) {
|
||||||
|
hasThrown = true;
|
||||||
|
}
|
||||||
|
expect(hasThrown).toEqual(true);
|
||||||
|
expect(room.membersNeedLoading()).toEqual(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("second call (also in immediate succession) should be ignored", async function() {
|
||||||
|
const room = new Room(roomId);
|
||||||
|
const promise1 = room.setLazyLoadedMembers(Promise.resolve([
|
||||||
|
{userId: userA, membership: "join"},
|
||||||
|
{userId: userB, membership: "join"}
|
||||||
|
]));
|
||||||
|
const promise2 = room.setLazyLoadedMembers(Promise.resolve([
|
||||||
|
{userId: userC, membership: "join"}
|
||||||
|
]));
|
||||||
|
await Promise.all([promise1, promise2]);
|
||||||
|
expect(room.getMember(userA)).toBeTruthy();
|
||||||
|
expect(room.getMember(userB)).toBeTruthy();
|
||||||
|
expect(room.getMember(userC)).toBeFalsy();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@@ -229,6 +229,9 @@ Room.prototype.membersNeedLoading = function() {
|
|||||||
* @param {Promise} membersPromise promise with array of {userId, avatarUrl, displayName, membership} tuples
|
* @param {Promise} membersPromise promise with array of {userId, avatarUrl, displayName, membership} tuples
|
||||||
*/
|
*/
|
||||||
Room.prototype.setLazyLoadedMembers = async function(membersPromise) {
|
Room.prototype.setLazyLoadedMembers = async function(membersPromise) {
|
||||||
|
if (!this._membersNeedLoading) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
this._membersNeedLoading = false;
|
this._membersNeedLoading = false;
|
||||||
let members = null;
|
let members = null;
|
||||||
try {
|
try {
|
||||||
|
Reference in New Issue
Block a user