From 92034aaff9b46fd135ee4dbcd93dd62ad5985e5e Mon Sep 17 00:00:00 2001 From: David Langley Date: Wed, 27 Aug 2025 20:44:53 +0100 Subject: [PATCH] try mocking useCall rather than just useParticipantCount --- .../rooms/RoomHeader/RoomHeader-test.tsx | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx index a9f02532c8..9391af0049 100644 --- a/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx +++ b/test/unit-tests/components/views/rooms/RoomHeader/RoomHeader-test.tsx @@ -96,6 +96,9 @@ describe("RoomHeader", () => { setCardSpy = jest.spyOn(RightPanelStore.instance, "setCard"); jest.spyOn(ShieldUtils, "shieldStatusForRoom").mockResolvedValue(ShieldUtils.E2EStatus.Normal); + + // Mock useCall to return a Call object with stable participants to prevent React dependency errors + jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall()); }); afterEach(() => { @@ -555,7 +558,8 @@ describe("RoomHeader", () => { it("join button is shown if there is an ongoing call", async () => { mockRoomMembers(room, 3); - jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); + // Mock a call with 3 participants instead of mocking useParticipantCount + jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); render(, getWrapper()); const joinButton = getByLabelText(document.body, "Join"); expect(joinButton).not.toHaveAttribute("aria-disabled", "true"); @@ -563,7 +567,8 @@ describe("RoomHeader", () => { it("join button is disabled if there is an other ongoing call", async () => { mockRoomMembers(room, 3); - jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); + // Mock a call with 3 participants instead of mocking useParticipantCount + jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); jest.spyOn(CallStore.prototype, "connectedCalls", "get").mockReturnValue( new Set([{ roomId: "some_other_room" } as Call]), ); @@ -583,7 +588,8 @@ describe("RoomHeader", () => { it("close lobby button is shown if there is an ongoing call but we are viewing the lobby", async () => { mockRoomMembers(room, 3); - jest.spyOn(UseCall, "useParticipantCount").mockReturnValue(3); + // Mock a call with 3 participants instead of mocking useParticipantCount + jest.spyOn(UseCall, 'useCall').mockReturnValue(createMockCall(ROOM_ID, 3)); jest.spyOn(SdkContextClass.instance.roomViewStore, "isViewingCall").mockReturnValue(true); render(, getWrapper()); @@ -789,6 +795,34 @@ describe("RoomHeader", () => { }); }); +/** + * Creates a mock Call object with stable participants to prevent React dependency errors + */ +function createMockCall(roomId: string = "!1:example.org", participantCount: number = 0): Call { + const participants = new Map(); + + // Create mock participants with devices + for (let i = 0; i < participantCount; i++) { + const mockMember = { + userId: `@user-${i}:example.org`, + name: `Member ${i}`, + } as RoomMember; + + const deviceSet = new Set([`device-${i}`]); + participants.set(mockMember, deviceSet); + } + + return { + roomId, + participants, + widget: { id: "test-widget" }, + connectionState: "disconnected", + on: jest.fn(), + off: jest.fn(), + emit: jest.fn(), + } as unknown as Call; +} + /** * * @param count the number of users to create