/* Copyright 2026 Element Creations Ltd. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial Please see LICENSE files in the repository root for full details. */ import React from "react"; import { render, screen } from "jest-matrix-react"; import { mocked } from "jest-mock"; import SenderProfile from "../../../../../src/components/views/messages/SenderProfile"; import { EventTileSenderAdapter } from "../../../../../src/components/views/rooms/EventTile/EventTileSenderAdapter"; import { type MemberInfo } from "../../../../../src/viewmodels/room/timeline/event-tile/DisambiguatedProfileViewModel"; import { type EventTileSenderSnapshot } from "../../../../../src/viewmodels/room/timeline/event-tile/EventTileViewModel"; jest.mock("../../../../../src/components/views/messages/SenderProfile", () => jest.fn(() =>
), ); function makeSenderSnapshot(overrides: Partial = {}): EventTileSenderSnapshot { return { senderId: "@alice:example.org", member: { userId: "@alice:example.org", roomId: "!room:example.org", rawDisplayName: "Alice", disambiguate: false, }, viewUserOnClick: true, profileMode: "clickable", forceHistoricalAvatar: false, isEmote: false, ...overrides, profileState: { avatarSize: "30px", needsSenderProfile: true, ...overrides.profileState, }, }; } describe("EventTileSenderAdapter", () => { const mockedSenderProfile = mocked(SenderProfile); beforeEach(() => { jest.clearAllMocks(); }); it("passes clickable sender state to SenderProfile", () => { const onSenderProfileClick = jest.fn(); const senderSnapshot = makeSenderSnapshot({ profileMode: "clickable" }); const memberInfo: MemberInfo = senderSnapshot.member!; render(); expect(screen.getByTestId("sender-profile")).toBeInTheDocument(); expect(mockedSenderProfile.mock.calls[0][0]).toMatchObject({ senderId: "@alice:example.org", member: memberInfo, isEmote: false, onClick: onSenderProfileClick, }); }); it("enables tooltip rendering for tooltip mode", () => { const senderSnapshot = makeSenderSnapshot({ profileMode: "tooltip" }); render(); expect(screen.getByTestId("sender-profile")).toBeInTheDocument(); expect(mockedSenderProfile.mock.calls[0][0]).toMatchObject({ senderId: "@alice:example.org", isEmote: false, withTooltip: true, }); }); it("returns nothing when the sender should be hidden", () => { const senderSnapshot = makeSenderSnapshot({ profileMode: "hidden" }); const { container } = render( , ); expect(container).toBeEmptyDOMElement(); expect(mockedSenderProfile).not.toHaveBeenCalled(); }); });