RoomListStore: Remove invite rooms on decline (#29804)

* Remove room when new membership is leave

It doesn't really matter what the previous membership was.

* Fix test

* Remove on join/invite only

* Exclude kicked rooms from being removed
This commit is contained in:
R Midhun Suresh
2025-04-26 18:13:23 +05:30
committed by GitHub
parent adc110a8d9
commit 83e6753c4e
2 changed files with 43 additions and 6 deletions

View File

@@ -122,11 +122,38 @@ describe("RoomListStoreV3", () => {
expect(store.getSortedRooms()[0].roomId).toEqual(room.roomId);
});
it("Room is removed when membership changes from join to leave", async () => {
const { store, rooms, dispatcher } = await getRoomListStore();
it.each([KnownMembership.Join, KnownMembership.Invite])(
"Room is removed when membership changes to leave",
async (membership) => {
const { store, rooms, dispatcher } = await getRoomListStore();
// Let's say the user leaves room at index 37
// Let's say the user leaves room at index 37
const room = rooms[37];
const payload = {
action: "MatrixActions.Room.myMembership",
oldMembership: membership,
membership: KnownMembership.Leave,
room,
};
const fn = jest.fn();
store.on(LISTS_UPDATE_EVENT, fn);
dispatcher.dispatch(payload, true);
expect(fn).toHaveBeenCalled();
expect(store.getSortedRooms()).not.toContain(room);
},
);
it("Room is not removed when user is kicked", async () => {
const { store, rooms, dispatcher, client } = await getRoomListStore();
// Let's say the user gets kicked out of room at index 37
const room = rooms[37];
const mockMember = room.getMember(client.getSafeUserId())!;
mockMember.isKicked = () => true;
room.getMember = () => mockMember;
const payload = {
action: "MatrixActions.Room.myMembership",
@@ -140,7 +167,7 @@ describe("RoomListStoreV3", () => {
dispatcher.dispatch(payload, true);
expect(fn).toHaveBeenCalled();
expect(store.getSortedRooms()).not.toContain(room);
expect(store.getSortedRooms()).toContain(room);
});
it("Predecessor room is removed on room upgrade", async () => {