Files
rbondessonandGitHub 4decd338fb Move EventTile to shared components - #2 (#33828)
* Add pure sender render inputs to EventTileViewModel

* Move sender/avatar normalization to EventTile

* Split sender and avatar adapters into focused leaf components

* Add tests for the sender and avatar adapters

* Fix sonar issues

* Make sender profile consume pure member info

* Collapse sender adapter onto snapshot-driven props

* Share current-member resolution for event and reply tiles

* Fix Prettier issues

* Keep settings preview on historical sender profiles

* Update the proprty name to reflect the use of the event-time sender data instead of resolving the current room member

* Fix Sonar issue

* Tighten member to MemberInfo | null in the view model
2026-07-27 09:26:06 +00:00

68 lines
2.2 KiB
TypeScript

/*
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 { EventType, MsgType } from "matrix-js-sdk/src/matrix";
import ReplyTile from "../../../../../src/components/views/rooms/ReplyTile";
import { renderReplyTile } from "../../../../../src/events/EventTileFactory";
import { VideoBodyFactory } from "../../../../../src/components/views/messages/MBodyFactory";
import { mkEvent, stubClient } from "../../../../test-utils";
jest.mock("../../../../../src/events/EventTileFactory", () => {
const actual = jest.requireActual("../../../../../src/events/EventTileFactory");
return {
...actual,
renderReplyTile: jest.fn(() => null),
};
});
jest.mock("../../../../../src/components/views/messages/SenderProfile", () => jest.fn(() => null));
jest.mock("../../../../../src/components/views/avatars/MemberAvatar", () => jest.fn(() => null));
describe("ReplyTile", () => {
beforeEach(() => {
stubClient();
jest.mocked(renderReplyTile).mockClear().mockReturnValue(null);
});
afterEach(() => {
jest.restoreAllMocks();
});
it("renders video replies with the video body", () => {
const mxEvent = mkEvent({
event: true,
type: EventType.RoomMessage,
user: "@alice:server",
room: "!room:server",
id: "$video",
content: {
body: "video.mp4",
msgtype: MsgType.Video,
url: "mxc://server/video",
info: {
mimetype: "video/mp4",
w: 640,
h: 360,
},
},
});
render(<ReplyTile mxEvent={mxEvent} />);
expect(renderReplyTile).toHaveBeenCalledWith(
expect.objectContaining({
overrideBodyTypes: expect.objectContaining({
[MsgType.Video]: VideoBodyFactory,
}),
}),
false,
);
});
});