diff --git a/test/components/views/avatars/DecoratedRoomAvatar-test.tsx b/test/components/views/avatars/DecoratedRoomAvatar-test.tsx index a43d41c086bc..43a8ec6b4f18 100644 --- a/test/components/views/avatars/DecoratedRoomAvatar-test.tsx +++ b/test/components/views/avatars/DecoratedRoomAvatar-test.tsx @@ -26,6 +26,14 @@ import { stubClient } from "../../../test-utils"; import DecoratedRoomAvatar from "../../../../src/components/views/avatars/DecoratedRoomAvatar"; import DMRoomMap from "../../../../src/utils/DMRoomMap"; +jest.mock("../../../../src/utils/presence", () => ({ isPresenceEnabled: jest.fn().mockReturnValue(true) })); + +jest.mock("../../../../src/utils/room/getJoinedNonFunctionalMembers", () => ({ + getJoinedNonFunctionalMembers: jest.fn().mockReturnValue([0, 1]), +})); + +jest.spyOn(DecoratedRoomAvatar.prototype as any, "getPresenceIcon").mockImplementation(() => "ONLINE"); + describe("DecoratedRoomAvatar", () => { const ROOM_ID = "roomId"; @@ -39,14 +47,14 @@ describe("DecoratedRoomAvatar", () => { room = new Room(ROOM_ID, mockClient, mockClient.getUserId() ?? "", { pendingEventOrdering: PendingEventOrdering.Detached, }); + }); + it("shows an avatar with globe icon and tooltip for public room", async () => { const dmRoomMap = { getUserIdForRoomId: jest.fn(), } as unknown as DMRoomMap; jest.spyOn(DMRoomMap, "shared").mockReturnValue(dmRoomMap); - }); - it("shows an avatar with globe icon and tooltip for public room", async () => { room.getJoinRule = jest.fn().mockReturnValue(JoinRule.Public); const { container, asFragment } = render(, { wrapper: TooltipProvider, @@ -66,4 +74,31 @@ describe("DecoratedRoomAvatar", () => { expect(asFragment()).toMatchSnapshot(); }); + + it("shows the presence indicator in a DM room that also has functional members", async () => { + const DM_USER_ID = "@bob:foo.bar"; + const dmRoomMap = { + getUserIdForRoomId: () => { + return DM_USER_ID; + }, + } as unknown as DMRoomMap; + jest.spyOn(DMRoomMap, "shared").mockReturnValue(dmRoomMap); + const { container, asFragment } = render(, { + wrapper: TooltipProvider, + }); + + const presence = container.querySelector(".mx_DecoratedRoomAvatar_icon")!; + expect(presence).toBeVisible(); + await userEvent.hover(presence!); + + // wait for the tooltip to open + const tooltip = await waitFor(() => { + const tooltip = document.getElementById(presence.getAttribute("aria-describedby")!); + expect(tooltip).toBeVisible(); + return tooltip; + }); + expect(tooltip).toHaveTextContent("Online"); + + expect(asFragment()).toMatchSnapshot(); + }); });