Fix people space notification badge not updating for new DM invites (#10849)

* Add regression test

* Fix people space notification state not updating for new DM invites
This commit is contained in:
Michael Telatynski 2023-05-12 11:49:41 +01:00 committed by GitHub
parent cb779fe872
commit 9611cbf6c4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 5 deletions

View file

@ -765,7 +765,7 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
const hiddenChildren = new EnhancedMap<string, Set<string>>(); const hiddenChildren = new EnhancedMap<string, Set<string>>();
visibleRooms.forEach((room) => { visibleRooms.forEach((room) => {
if (room.getMyMembership() !== "join") return; if (!["join", "invite"].includes(room.getMyMembership())) return;
this.getParents(room.roomId).forEach((parent) => { this.getParents(room.roomId).forEach((parent) => {
hiddenChildren.getOrCreate(parent.roomId, new Set()).add(room.roomId); hiddenChildren.getOrCreate(parent.roomId, new Set()).add(room.roomId);
}); });
@ -872,10 +872,9 @@ export class SpaceStoreClass extends AsyncStoreWithClient<IState> {
} }
const notificationStatesToUpdate = [...changeSet]; const notificationStatesToUpdate = [...changeSet];
if ( // We update the People metaspace even if we didn't detect any changes
this.enabledMetaSpaces.includes(MetaSpace.People) && // as roomIdsBySpace does not pre-calculate it so we have to assume it could have changed
userDiff.added.length + userDiff.removed.length + usersChanged.length > 0 if (this.enabledMetaSpaces.includes(MetaSpace.People)) {
) {
notificationStatesToUpdate.push(MetaSpace.People); notificationStatesToUpdate.push(MetaSpace.People);
} }
this.updateNotificationStates(notificationStatesToUpdate); this.updateNotificationStates(notificationStatesToUpdate);

View file

@ -672,6 +672,29 @@ describe("SpaceStore", () => {
}); });
}); });
it("should add new DM Invites to the People Space Notification State", async () => {
mkRoom(dm1);
mocked(client.getRoom(dm1)!).getMyMembership.mockReturnValue("join");
mocked(client).getRoom.mockImplementation((roomId) => rooms.find((room) => room.roomId === roomId) || null);
await run();
mkRoom(dm2);
const cliDm2 = client.getRoom(dm2)!;
mocked(cliDm2).getMyMembership.mockReturnValue("invite");
mocked(client).getRoom.mockImplementation((roomId) => rooms.find((room) => room.roomId === roomId) || null);
client.emit(RoomEvent.MyMembership, cliDm2, "invite");
[dm1, dm2].forEach((d) => {
expect(
store
.getNotificationState(MetaSpace.People)
.rooms.map((r) => r.roomId)
.includes(d),
).toBeTruthy();
});
});
describe("hierarchy resolution update tests", () => { describe("hierarchy resolution update tests", () => {
it("updates state when spaces are joined", async () => { it("updates state when spaces are joined", async () => {
await run(); await run();