Introduce Membership type

This commit is contained in:
Stanislav Demydiuk 2024-03-11 17:16:53 +00:00 committed by Andy Balaam
parent 3c6fd58628
commit da99bad7b9
115 changed files with 582 additions and 526 deletions

View file

@ -168,10 +168,10 @@ describe("MultiInviter", () => {
const room = new Room(ROOMID, client, client.getSafeUserId());
mocked(client.getRoom).mockReturnValue(room);
const ourMember = new RoomMember(ROOMID, client.getSafeUserId());
ourMember.membership = "join";
ourMember.membership = Membership.Join;
ourMember.powerLevel = 100;
const member = new RoomMember(ROOMID, MXID1);
member.membership = "ban";
member.membership = Membership.Ban;
member.powerLevel = 0;
room.getMember = (userId: string) => {
if (userId === client.getSafeUserId()) return ourMember;

View file

@ -86,7 +86,7 @@ describe("direct-messages", () => {
});
room1 = new Room("!room1:example.com", mockClient, userId1);
room1.getMyMembership = () => "join";
room1.getMyMembership = () => Membership.Join;
localRoom = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test", mockClient, userId1);

View file

@ -37,16 +37,16 @@ function assertLocalRoom(room: LocalRoom, targets: Member[], encrypted: boolean)
expect(room.name).toBe(targets.length ? targets[0].name : "Empty Room");
expect(room.encrypted).toBe(encrypted);
expect(room.targets).toEqual(targets);
expect(room.getMyMembership()).toBe("join");
expect(room.getMyMembership()).toBe(Membership.Join);
const roomCreateEvent = room.currentState.getStateEvents(EventType.RoomCreate)[0];
expect(roomCreateEvent).toBeDefined();
expect(roomCreateEvent.getContent()["room_version"]).toBe(KNOWN_SAFE_ROOM_VERSION);
// check that the user and all targets are joined
expect(room.getMember("@userId:matrix.org")?.membership).toBe("join");
expect(room.getMember("@userId:matrix.org").membership).toBe(Membership.Join);
targets.forEach((target: Member) => {
expect(room.getMember(target.userId)?.membership).toBe("join");
expect(room.getMember(target.userId).membership).toBe(Membership.Join);
});
if (encrypted) {

View file

@ -51,32 +51,32 @@ describe("findDMForUser", () => {
mocked(getFunctionalMembers).mockReturnValue([botId]);
room1 = new Room("!room1:example.com", mockClient, userId1);
room1.getMyMembership = () => "join";
room1.getMyMembership = () => Membership.Join;
room1.currentState.setStateEvents([
makeMembershipEvent(room1.roomId, userId1, "join"),
makeMembershipEvent(room1.roomId, userId2, "join"),
makeMembershipEvent(room1.roomId, userId1, Membership.Join),
makeMembershipEvent(room1.roomId, userId2, Membership.Join),
]);
// this should not be a DM room because it is a local room
room2 = new LocalRoom("!room2:example.com", mockClient, userId1);
room2.getMyMembership = () => "join";
room2.getMyMembership = () => Membership.Join;
room2.getLastActiveTimestamp = () => 100;
room3 = new Room("!room3:example.com", mockClient, userId1);
room3.getMyMembership = () => "join";
room3.getMyMembership = () => Membership.Join;
room3.currentState.setStateEvents([
makeMembershipEvent(room3.roomId, userId1, "join"),
makeMembershipEvent(room3.roomId, userId2, "join"),
makeMembershipEvent(room3.roomId, userId1, Membership.Join),
makeMembershipEvent(room3.roomId, userId2, Membership.Join),
// Adding the bot user here. Should be excluded when determining if the room is a DM.
makeMembershipEvent(room3.roomId, botId, "join"),
makeMembershipEvent(room3.roomId, botId, Membership.Join),
]);
// this should not be a DM room because it has only one joined user
room4 = new Room("!room4:example.com", mockClient, userId1);
room4.getMyMembership = () => "join";
room4.getMyMembership = () => Membership.Join;
room4.currentState.setStateEvents([
makeMembershipEvent(room4.roomId, userId1, "invite"),
makeMembershipEvent(room4.roomId, userId2, "join"),
makeMembershipEvent(room4.roomId, userId1, Membership.Invite),
makeMembershipEvent(room4.roomId, userId2, Membership.Join),
]);
// this should not be a DM room because it has no users
@ -85,17 +85,17 @@ describe("findDMForUser", () => {
// room not correctly stored in userId → room map; should be found by the "all rooms" fallback
room6 = new Room("!room6:example.com", mockClient, userId1);
room6.getMyMembership = () => "join";
room6.getMyMembership = () => Membership.Join;
room6.currentState.setStateEvents([
makeMembershipEvent(room6.roomId, userId1, "join"),
makeMembershipEvent(room6.roomId, userId3, "join"),
makeMembershipEvent(room6.roomId, userId1, Membership.Join),
makeMembershipEvent(room6.roomId, userId3, Membership.Join),
]);
// room with pending third-party invite
room7 = new Room("!room7:example.com", mockClient, userId1);
room7.getMyMembership = () => "join";
room7.getMyMembership = () => Membership.Join;
room7.currentState.setStateEvents([
makeMembershipEvent(room7.roomId, userId1, "join"),
makeMembershipEvent(room7.roomId, userId1, Membership.Join),
mkThirdPartyInviteEvent(thirdPartyId, "third-party", room7.roomId),
]);

View file

@ -201,8 +201,8 @@ describe("export", function () {
getMxcAvatarUrl: () => "mxc://avatar.url/image.png",
} as unknown as RoomMember,
ts: ts0 + i * 1000,
mship: "join",
prevMship: "join",
mship: Membership.Join,
prevMship: Membership.Join,
name: "A user",
}),
);

View file

@ -36,7 +36,7 @@ describe("local-room", () => {
beforeEach(() => {
client = createTestClient();
room1 = new Room("!room1:example.com", client, userId1);
room1.getMyMembership = () => "join";
room1.getMyMembership = () => Membership.Join;
localRoom = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test", client, "@test:example.com");
mocked(client.getRoom).mockImplementation((roomId: string) => {
if (roomId === localRoom.roomId) {

View file

@ -33,7 +33,7 @@ describe("isRoomReady", () => {
beforeEach(() => {
client = createTestClient();
room1 = new Room("!room1:example.com", client, userId1);
room1.getMyMembership = () => "join";
room1.getMyMembership = () => Membership.Join;
localRoom = new LocalRoom(LOCAL_ROOM_ID_PREFIX + "test", client, "@test:example.com");
});
@ -70,8 +70,8 @@ describe("isRoomReady", () => {
describe("and all members have been invited or joined", () => {
beforeEach(() => {
room1.currentState.setStateEvents([
makeMembershipEvent(room1.roomId, userId1, "join"),
makeMembershipEvent(room1.roomId, userId2, "invite"),
makeMembershipEvent(room1.roomId, userId1, Membership.Join),
makeMembershipEvent(room1.roomId, userId2, Membership.Invite),
]);
});

View file

@ -31,16 +31,16 @@ describe("isKnockDenied", () => {
});
it("checks that the user knock has been denied", () => {
const roomMember = mkRoomMember(room.roomId, userId, "leave", true, { membership: "knock" });
const roomMember = mkRoomMember(room.roomId, userId, Membership.Leave, true, { membership: Membership.Knock });
jest.spyOn(room, "getMember").mockReturnValue(roomMember);
expect(isKnockDenied(room)).toBe(true);
});
it.each([
{ membership: "leave", isKicked: false, prevMembership: "invite" },
{ membership: "leave", isKicked: true, prevMembership: "invite" },
{ membership: "leave", isKicked: false, prevMembership: "join" },
{ membership: "leave", isKicked: true, prevMembership: "join" },
{ membership: Membership.Leave, isKicked: false, prevMembership: Membership.Invite },
{ membership: Membership.Leave, isKicked: true, prevMembership: Membership.Invite },
{ membership: Membership.Leave, isKicked: false, prevMembership: Membership.Join },
{ membership: Membership.Leave, isKicked: true, prevMembership: Membership.Join },
])("checks that the user knock has been not denied", ({ membership, isKicked, prevMembership }) => {
const roomMember = mkRoomMember(room.roomId, userId, membership, isKicked, { membership: prevMembership });
jest.spyOn(room, "getMember").mockReturnValue(roomMember);

View file

@ -45,7 +45,7 @@ describe("Permalinks", function () {
members: RoomMember[],
serverACLContent?: { deny?: string[]; allow?: string[] },
): Room {
members.forEach((m) => (m.membership = "join"));
members.forEach((m) => (m.membership = Membership.Join));
const powerLevelsUsers = members.reduce<Record<string, number>>((pl, member) => {
if (Number.isFinite(member.powerLevel)) {
pl[member.userId] = member.powerLevel;
@ -152,11 +152,11 @@ describe("Permalinks", function () {
const creator = new RoomPermalinkCreator(room, null);
creator.load();
expect(creator.serverCandidates![0]).toBe("pl_95");
member95.membership = "left";
member95.membership = Membership.Leave;
// @ts-ignore illegal private property
creator.onRoomStateUpdate();
expect(creator.serverCandidates![0]).toBe("pl_75");
member95.membership = "join";
member95.membership = Membership.Join;
// @ts-ignore illegal private property
creator.onRoomStateUpdate();
expect(creator.serverCandidates![0]).toBe("pl_95");

View file

@ -39,7 +39,7 @@ describe("canInviteTo()", () => {
...mockClientMethodsUser(userId),
});
const room = new Room(roomId, client, userId);
jest.spyOn(room, "getMyMembership").mockReturnValue("join");
jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Join);
jest.spyOn(room, "getJoinRule").mockReturnValue(JoinRule.Public);
jest.spyOn(room, "canInvite").mockReturnValue(true);
return room;
@ -54,7 +54,7 @@ describe("canInviteTo()", () => {
it("should return false when current user membership is not joined", () => {
const room = makeRoom();
jest.spyOn(room, "getMyMembership").mockReturnValue("invite");
jest.spyOn(room, "getMyMembership").mockReturnValue(Membership.Invite);
expect(canInviteTo(room)).toEqual(false);
});