Skip to content

Commit f83093c

Browse files
committed
try fix RoomHeader tests again by also mocking useParticipants
1 parent c45ad30 commit f83093c

2 files changed

Lines changed: 31 additions & 14 deletions

File tree

src/hooks/useCall.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,10 @@ export const useConnectionState = (call: Call | null): ConnectionState =>
4242
);
4343

4444
export const useParticipants = (call: Call | null): Map<RoomMember, Set<string>> => {
45-
const participants = call?.participants;
4645
return useTypedEventEmitterState(
4746
call ?? undefined,
4847
CallEvent.Participants,
49-
useCallback((state) => state ?? participants ?? new Map(), [participants]),
48+
useCallback((state) => state ?? call?.participants ?? new Map(), [call]),
5049
);
5150
};
5251

test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -554,15 +554,19 @@ describe("RoomHeader", () => {
554554
});
555555

556556
it("join button is shown if there is an ongoing call", async () => {
557-
mockRoomMembers(room, 3);
557+
const members = mockRoomMembers(room, 3);
558+
const participants = mockParticipants(members);
559+
jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants);
558560
jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3);
559561
render(<RoomHeader room={room} />, getWrapper());
560562
const joinButton = getByLabelText(document.body, "Join");
561563
expect(joinButton).not.toHaveAttribute("aria-disabled", "true");
562564
});
563565

564566
it("join button is disabled if there is an other ongoing call", async () => {
565-
mockRoomMembers(room, 3);
567+
const members = mockRoomMembers(room, 3);
568+
const participants = mockParticipants(members);
569+
jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants);
566570
jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3);
567571
jest.spyOn(CallStore.prototype, "connectedCalls", "get").mockReturnValue(
568572
new Set([{ roomId: "some_other_room" } as Call]),
@@ -582,7 +586,9 @@ describe("RoomHeader", () => {
582586
});
583587

584588
it("close lobby button is shown if there is an ongoing call but we are viewing the lobby", async () => {
585-
mockRoomMembers(room, 3);
589+
const members = mockRoomMembers(room, 3);
590+
const participants = mockParticipants(members);
591+
jest.spyOn(UseCall, "useParticipants").mockReturnValue(participants);
586592
jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3);
587593
jest.spyOn(SdkContextClass.instance.roomViewStore, "isViewingCall").mockReturnValue(true);
588594

@@ -792,20 +798,32 @@ describe("RoomHeader", () => {
792798
/**
793799
*
794800
* @param count the number of users to create
801+
* @returns the created members
795802
*/
796803
function mockRoomMembers(room: Room, count: number) {
797804
const members = Array(count)
798805
.fill(0)
799-
.map((_, index) => ({
800-
userId: `@user-${index}:example.org`,
801-
name: `Member ${index}`,
802-
rawDisplayName: `Member ${index}`,
803-
roomId: room.roomId,
804-
membership: KnownMembership.Join,
805-
getAvatarUrl: () => `mxc://avatar.url/user-${index}.png`,
806-
getMxcAvatarUrl: () => `mxc://avatar.url/user-${index}.png`,
807-
}));
806+
.map((_, index) => {
807+
const userId = `@user-${index}:example.org`;
808+
const member = new RoomMember(room.roomId, userId);
809+
member.name = `Member ${index}`;
810+
member.rawDisplayName = `Member ${index}`;
811+
member.membership = KnownMembership.Join;
812+
member.getAvatarUrl = () => `mxc://avatar.url/user-${index}.png`;
813+
member.getMxcAvatarUrl = () => `mxc://avatar.url/user-${index}.png`;
814+
return member;
815+
});
808816

809817
room.currentState.setJoinedMemberCount(members.length);
810818
room.getJoinedMembers = jest.fn().mockReturnValue(members);
819+
return members;
820+
}
821+
822+
/**
823+
* Creates a participants map from room members
824+
* @param members the room members to convert to participants
825+
* @returns Map of participants with device sets
826+
*/
827+
function mockParticipants(members: RoomMember[]): Map<RoomMember, Set<string>> {
828+
return new Map(members.map((member, index) => [member, new Set([`device${index + 1}`])]));
811829
}

0 commit comments

Comments
 (0)