From 163a46ee8b05352f696a495d35dc554ca024f9ef Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Fri, 10 Feb 2023 10:45:24 +0100 Subject: [PATCH] Fix strict types --- src/utils/dm/findDMForUser.ts | 8 ++++--- test/utils/dm/findDMForUser-test.ts | 37 ++++++++++++++++++----------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/utils/dm/findDMForUser.ts b/src/utils/dm/findDMForUser.ts index 9c3f483972d2..3f6fcbfca08d 100644 --- a/src/utils/dm/findDMForUser.ts +++ b/src/utils/dm/findDMForUser.ts @@ -35,7 +35,7 @@ function extractSuitableRoom(rooms: Room[], userId: string): Room | undefined { const functionalUsers = getFunctionalMembers(r); const members = r.currentState.getMembers(); const joinedMembers = members.filter( - (m) => !functionalUsers.includes(m.userId) && isJoinedOrNearlyJoined(m.membership), + (m) => !functionalUsers.includes(m.userId) && m.membership && isJoinedOrNearlyJoined(m.membership), ); const otherMember = joinedMembers.find((m) => m.userId === userId); return otherMember && joinedMembers.length === 2; @@ -62,7 +62,7 @@ function extractSuitableRoom(rooms: Room[], userId: string): Room | undefined { */ export function findDMForUser(client: MatrixClient, userId: string): Room | undefined { const roomIdsForUserId = DMRoomMap.shared().getDMRoomsForUserId(userId); - const roomsForUserId = roomIdsForUserId.map((id) => client.getRoom(id)); + const roomsForUserId = roomIdsForUserId.map((id) => client.getRoom(id)).filter((r): r is Room => r !== null); const suitableRoomForUserId = extractSuitableRoom(roomsForUserId, userId); if (suitableRoomForUserId) { @@ -71,6 +71,8 @@ export function findDMForUser(client: MatrixClient, userId: string): Room | unde // Try to find in all rooms as a fallback const allRoomIds = DMRoomMap.shared().getRoomIds(); - const allRooms = Array.from(allRoomIds).map((id) => client.getRoom(id)); + const allRooms = Array.from(allRoomIds) + .map((id) => client.getRoom(id)) + .filter((r): r is Room => r !== null); return extractSuitableRoom(allRooms, userId); } diff --git a/test/utils/dm/findDMForUser-test.ts b/test/utils/dm/findDMForUser-test.ts index 964dcd93a5d2..60c5b342f486 100644 --- a/test/utils/dm/findDMForUser-test.ts +++ b/test/utils/dm/findDMForUser-test.ts @@ -38,6 +38,7 @@ describe("findDMForUser", () => { let room4: Room; let room5: Room; let room6: Room; + const room7Id = "!room7:example.com"; let dmRoomMap: DMRoomMap; let mockClient: MatrixClient; @@ -89,29 +90,37 @@ describe("findDMForUser", () => { ]); mocked(mockClient.getRoom).mockImplementation((roomId: string) => { - return { - [room1.roomId]: room1, - [room2.roomId]: room2, - [room3.roomId]: room3, - [room4.roomId]: room4, - [room5.roomId]: room5, - [room6.roomId]: room6, - }[roomId]; + return ( + { + [room1.roomId]: room1, + [room2.roomId]: room2, + [room3.roomId]: room3, + [room4.roomId]: room4, + [room5.roomId]: room5, + [room6.roomId]: room6, + }[roomId] || null + ); }); dmRoomMap = { getDMRoomForIdentifiers: jest.fn(), getDMRoomsForUserId: jest.fn(), - getRoomIds: jest - .fn() - .mockReturnValue( - new Set([room1.roomId, room2.roomId, room3.roomId, room4.roomId, room5.roomId, room6.roomId]), - ), + getRoomIds: jest.fn().mockReturnValue( + new Set([ + room1.roomId, + room2.roomId, + room3.roomId, + room4.roomId, + room5.roomId, + room6.roomId, + room7Id, // this room does not exist in client + ]), + ), } as unknown as DMRoomMap; jest.spyOn(DMRoomMap, "shared").mockReturnValue(dmRoomMap); mocked(dmRoomMap.getDMRoomsForUserId).mockImplementation((userId: string) => { if (userId === userId1) { - return [room1.roomId, room2.roomId, room3.roomId, room4.roomId, room5.roomId]; + return [room1.roomId, room2.roomId, room3.roomId, room4.roomId, room5.roomId, room7Id]; } return [];