Improve types for sendEvent
(#12335)
This commit is contained in:
parent
4941327c78
commit
ef2bd7ae04
26 changed files with 209 additions and 99 deletions
|
@ -25,6 +25,7 @@ import {
|
|||
M_TEXT,
|
||||
} from "matrix-js-sdk/src/matrix";
|
||||
import { PollStartEvent } from "matrix-js-sdk/src/extensible_events_v1/PollStartEvent";
|
||||
import { ReplacementEvent } from "matrix-js-sdk/src/types";
|
||||
|
||||
import { getMockClientWithEventEmitter } from "../../../test-utils";
|
||||
import { MatrixClientPeg } from "../../../../src/MatrixClientPeg";
|
||||
|
@ -273,7 +274,9 @@ describe("PollCreateDialog", () => {
|
|||
const [, , eventType, sentEventContent] = mockClient.sendEvent.mock.calls[0];
|
||||
expect(M_POLL_START.matches(eventType)).toBeTruthy();
|
||||
// didnt change
|
||||
expect(sentEventContent["m.new_content"][M_POLL_START.name].kind).toEqual(M_POLL_KIND_DISCLOSED.name);
|
||||
expect((sentEventContent as ReplacementEvent<any>)["m.new_content"][M_POLL_START.name].kind).toEqual(
|
||||
M_POLL_KIND_DISCLOSED.name,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ import React from "react";
|
|||
import { fireEvent, render, screen } from "@testing-library/react";
|
||||
import userEvent from "@testing-library/user-event";
|
||||
import { Room } from "matrix-js-sdk/src/matrix";
|
||||
import { ReplacementEvent, RoomMessageEventContent } from "matrix-js-sdk/src/types";
|
||||
|
||||
import EditMessageComposerWithMatrixClient, {
|
||||
createEditContent,
|
||||
|
@ -296,11 +297,12 @@ describe("<EditMessageComposer/>", () => {
|
|||
|
||||
fireEvent.click(screen.getByText("Save"));
|
||||
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2];
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent &
|
||||
ReplacementEvent<RoomMessageEventContent>;
|
||||
|
||||
// both content.mentions and new_content.mentions are empty
|
||||
expect(messageContent["m.mentions"]).toEqual({});
|
||||
expect(messageContent["m.new_content"]["m.mentions"]).toEqual({});
|
||||
expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({});
|
||||
});
|
||||
|
||||
it("should retain mentions in the original message that are not removed by the edit", async () => {
|
||||
|
@ -312,12 +314,13 @@ describe("<EditMessageComposer/>", () => {
|
|||
|
||||
fireEvent.click(screen.getByText("Save"));
|
||||
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2];
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent &
|
||||
ReplacementEvent<RoomMessageEventContent>;
|
||||
|
||||
// no new mentions were added, so nothing in top level mentions
|
||||
expect(messageContent["m.mentions"]).toEqual({});
|
||||
// bob is still mentioned, charlie removed
|
||||
expect(messageContent["m.new_content"]["m.mentions"]).toEqual({
|
||||
expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({
|
||||
user_ids: ["@bob:server.org"],
|
||||
});
|
||||
});
|
||||
|
@ -331,12 +334,13 @@ describe("<EditMessageComposer/>", () => {
|
|||
|
||||
fireEvent.click(screen.getByText("Save"));
|
||||
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2];
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent &
|
||||
ReplacementEvent<RoomMessageEventContent>;
|
||||
|
||||
// no new mentions were added, so nothing in top level mentions
|
||||
expect(messageContent["m.mentions"]).toEqual({});
|
||||
// bob is not longer mentioned in the edited message, so empty mentions in new_content
|
||||
expect(messageContent["m.new_content"]["m.mentions"]).toEqual({});
|
||||
expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({});
|
||||
});
|
||||
|
||||
it("should add mentions that were added in the edit", async () => {
|
||||
|
@ -352,13 +356,14 @@ describe("<EditMessageComposer/>", () => {
|
|||
|
||||
fireEvent.click(screen.getByText("Save"));
|
||||
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2];
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent &
|
||||
ReplacementEvent<RoomMessageEventContent>;
|
||||
|
||||
// new mention in the edit
|
||||
expect(messageContent["m.mentions"]).toEqual({
|
||||
user_ids: ["@dan:server.org"],
|
||||
});
|
||||
expect(messageContent["m.new_content"]["m.mentions"]).toEqual({
|
||||
expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({
|
||||
user_ids: ["@dan:server.org"],
|
||||
});
|
||||
});
|
||||
|
@ -377,14 +382,15 @@ describe("<EditMessageComposer/>", () => {
|
|||
|
||||
fireEvent.click(screen.getByText("Save"));
|
||||
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2];
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent &
|
||||
ReplacementEvent<RoomMessageEventContent>;
|
||||
|
||||
// new mention in the edit
|
||||
expect(messageContent["m.mentions"]).toEqual({
|
||||
user_ids: ["@dan:server.org"],
|
||||
});
|
||||
// all mentions in the edited version of the event
|
||||
expect(messageContent["m.new_content"]["m.mentions"]).toEqual({
|
||||
expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({
|
||||
user_ids: ["@bob:server.org", "@dan:server.org"],
|
||||
});
|
||||
});
|
||||
|
@ -454,12 +460,13 @@ describe("<EditMessageComposer/>", () => {
|
|||
|
||||
fireEvent.click(screen.getByText("Save"));
|
||||
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2];
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent &
|
||||
ReplacementEvent<RoomMessageEventContent>;
|
||||
|
||||
// no new mentions from edit
|
||||
expect(messageContent["m.mentions"]).toEqual({});
|
||||
// edited reply still mentions the parent event sender
|
||||
expect(messageContent["m.new_content"]["m.mentions"]).toEqual({
|
||||
expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({
|
||||
user_ids: [originalEvent.getSender()],
|
||||
});
|
||||
});
|
||||
|
@ -475,7 +482,8 @@ describe("<EditMessageComposer/>", () => {
|
|||
|
||||
fireEvent.click(screen.getByText("Save"));
|
||||
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2];
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent &
|
||||
ReplacementEvent<RoomMessageEventContent>;
|
||||
|
||||
// new mention in edit
|
||||
expect(messageContent["m.mentions"]).toEqual({
|
||||
|
@ -483,7 +491,7 @@ describe("<EditMessageComposer/>", () => {
|
|||
});
|
||||
// edited reply still mentions the parent event sender
|
||||
// plus new mention @dan
|
||||
expect(messageContent["m.new_content"]["m.mentions"]).toEqual({
|
||||
expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({
|
||||
user_ids: [originalEvent.getSender(), "@dan:server.org"],
|
||||
});
|
||||
});
|
||||
|
@ -496,13 +504,14 @@ describe("<EditMessageComposer/>", () => {
|
|||
|
||||
fireEvent.click(screen.getByText("Save"));
|
||||
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2];
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent &
|
||||
ReplacementEvent<RoomMessageEventContent>;
|
||||
|
||||
// no mentions in edit
|
||||
expect(messageContent["m.mentions"]).toEqual({});
|
||||
// edited reply still mentions the parent event sender
|
||||
// existing @bob mention removed
|
||||
expect(messageContent["m.new_content"]["m.mentions"]).toEqual({
|
||||
expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({
|
||||
user_ids: [originalEvent.getSender()],
|
||||
});
|
||||
});
|
||||
|
@ -536,12 +545,13 @@ describe("<EditMessageComposer/>", () => {
|
|||
|
||||
fireEvent.click(screen.getByText("Save"));
|
||||
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2];
|
||||
const messageContent = mockClient.sendMessage.mock.calls[0][2] as RoomMessageEventContent &
|
||||
ReplacementEvent<RoomMessageEventContent>;
|
||||
|
||||
// no mentions in edit
|
||||
expect(messageContent["m.mentions"]).toEqual({});
|
||||
// edited reply still mentions the parent event sender
|
||||
expect(messageContent["m.new_content"]["m.mentions"]).toEqual({
|
||||
expect(messageContent["m.new_content"]!["m.mentions"]).toEqual({
|
||||
user_ids: [originalEvent.getSender()],
|
||||
});
|
||||
});
|
||||
|
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { EventStatus, IEventRelation } from "matrix-js-sdk/src/matrix";
|
||||
import { EventStatus, IEventRelation, MsgType } from "matrix-js-sdk/src/matrix";
|
||||
|
||||
import { IRoomState } from "../../../../../../src/components/structures/RoomView";
|
||||
import { editMessage, sendMessage } from "../../../../../../src/components/views/rooms/wysiwyg_composer/utils/message";
|
||||
|
@ -272,7 +272,10 @@ describe("message", () => {
|
|||
it("returns undefined when the command is not successful", async () => {
|
||||
// When
|
||||
const validCommand = "/spoiler";
|
||||
jest.spyOn(Commands, "runSlashCommand").mockResolvedValueOnce([{ content: "mock content" }, false]);
|
||||
jest.spyOn(Commands, "runSlashCommand").mockResolvedValueOnce([
|
||||
{ body: "mock content", msgtype: MsgType.Text },
|
||||
false,
|
||||
]);
|
||||
|
||||
const result = await sendMessage(validCommand, true, {
|
||||
roomContext: defaultRoomContext,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue