/* 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 } from "jest-matrix-react"; import { mocked } from "jest-mock"; import { RoomMember } from "matrix-js-sdk/src/matrix"; import MemberAvatar from "../../../../../src/components/views/avatars/MemberAvatar"; import { EventTileAvatarAdapter } from "../../../../../src/components/views/rooms/EventTile/EventTileAvatarAdapter"; import { type EventTileSenderSnapshot } from "../../../../../src/viewmodels/room/timeline/event-tile/EventTileViewModel"; jest.mock("../../../../../src/components/views/avatars/MemberAvatar", () => jest.fn(() =>
), ); function makeSenderSnapshot(overrides: Partial = {}): EventTileSenderSnapshot { return { senderId: "@alice:example.org", member: null, viewUserOnClick: true, profileMode: "clickable", forceHistoricalAvatar: false, isEmote: false, ...overrides, profileState: { avatarSize: "30px", needsSenderProfile: true, ...overrides.profileState, }, }; } describe("EventTileAvatarAdapter", () => { const mockedMemberAvatar = mocked(MemberAvatar); beforeEach(() => { jest.clearAllMocks(); }); it("passes render data through to MemberAvatar", () => { const avatarMember = new RoomMember("!room:example.org", "@alice:example.org"); const senderSnapshot = makeSenderSnapshot({ profileState: { avatarSize: "24px", needsSenderProfile: true, }, viewUserOnClick: false, forceHistoricalAvatar: true, }); const { container } = render( , ); expect(container.querySelector(".mx_EventTile_avatar")).not.toBeNull(); expect(mockedMemberAvatar.mock.calls[0][0]).toMatchObject({ member: avatarMember, size: "24px", viewUserOnClick: false, forceHistorical: true, }); }); it("renders nothing when the avatar is not available", () => { const { container } = render( , ); expect(container.querySelector(".mx_EventTile_avatar")).toBeNull(); expect(mockedMemberAvatar).not.toHaveBeenCalled(); }); });