Try to resolve emails before creating a DM (#10164)
This commit is contained in:
parent
f0359a5c18
commit
8feed1a225
6 changed files with 319 additions and 7 deletions
|
@ -16,6 +16,7 @@ limitations under the License.
|
|||
|
||||
import { mocked } from "jest-mock";
|
||||
import { ClientEvent, MatrixClient, Room } from "matrix-js-sdk/src/matrix";
|
||||
import { logger } from "matrix-js-sdk/src/logger";
|
||||
|
||||
import DMRoomMap from "../../src/utils/DMRoomMap";
|
||||
import { createTestClient } from "../test-utils";
|
||||
|
@ -28,6 +29,8 @@ import { waitForRoomReadyAndApplyAfterCreateCallbacks } from "../../src/utils/lo
|
|||
import { findDMRoom } from "../../src/utils/dm/findDMRoom";
|
||||
import { createDmLocalRoom } from "../../src/utils/dm/createDmLocalRoom";
|
||||
import { startDm } from "../../src/utils/dm/startDm";
|
||||
import { Member } from "../../src/utils/direct-messages";
|
||||
import { resolveThreePids } from "../../src/utils/threepids";
|
||||
|
||||
jest.mock("../../src/utils/rooms", () => ({
|
||||
...(jest.requireActual("../../src/utils/rooms") as object),
|
||||
|
@ -59,6 +62,12 @@ jest.mock("../../src/utils/dm/startDm", () => ({
|
|||
startDm: jest.fn(),
|
||||
}));
|
||||
|
||||
jest.mock("../../src/utils/threepids", () => ({
|
||||
resolveThreePids: jest.fn().mockImplementation(async (members: Member[]) => {
|
||||
return members;
|
||||
}),
|
||||
}));
|
||||
|
||||
describe("direct-messages", () => {
|
||||
const userId1 = "@user1:example.com";
|
||||
const member1 = new dmModule.DirectoryMember({ user_id: userId1 });
|
||||
|
@ -69,8 +78,6 @@ describe("direct-messages", () => {
|
|||
let roomEvents: Room[];
|
||||
|
||||
beforeEach(() => {
|
||||
jest.restoreAllMocks();
|
||||
|
||||
mockClient = createTestClient();
|
||||
jest.spyOn(MatrixClientPeg, "get").mockReturnValue(mockClient);
|
||||
roomEvents = [];
|
||||
|
@ -89,10 +96,17 @@ describe("direct-messages", () => {
|
|||
} as unknown as DMRoomMap;
|
||||
jest.spyOn(DMRoomMap, "shared").mockReturnValue(dmRoomMap);
|
||||
jest.spyOn(dis, "dispatch");
|
||||
jest.spyOn(logger, "warn");
|
||||
|
||||
jest.useFakeTimers();
|
||||
jest.setSystemTime(new Date(2022, 7, 4, 11, 12, 30, 42));
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
jest.restoreAllMocks();
|
||||
jest.useRealTimers();
|
||||
});
|
||||
|
||||
describe("startDmOnFirstMessage", () => {
|
||||
describe("if no room exists", () => {
|
||||
beforeEach(() => {
|
||||
|
@ -101,7 +115,8 @@ describe("direct-messages", () => {
|
|||
|
||||
it("should create a local room and dispatch a view room event", async () => {
|
||||
mocked(createDmLocalRoom).mockResolvedValue(localRoom);
|
||||
const room = await dmModule.startDmOnFirstMessage(mockClient, [member1]);
|
||||
const members = [member1];
|
||||
const room = await dmModule.startDmOnFirstMessage(mockClient, members);
|
||||
expect(room).toBe(localRoom);
|
||||
expect(dis.dispatch).toHaveBeenCalledWith({
|
||||
action: Action.ViewRoom,
|
||||
|
@ -109,6 +124,25 @@ describe("direct-messages", () => {
|
|||
joining: false,
|
||||
targets: [member1],
|
||||
});
|
||||
|
||||
// assert, that startDmOnFirstMessage tries to resolve 3rd-party IDs
|
||||
expect(resolveThreePids).toHaveBeenCalledWith(members, mockClient);
|
||||
});
|
||||
|
||||
it("should work when resolveThreePids raises an error", async () => {
|
||||
const error = new Error("error 4711");
|
||||
mocked(resolveThreePids).mockRejectedValue(error);
|
||||
|
||||
mocked(createDmLocalRoom).mockResolvedValue(localRoom);
|
||||
const members = [member1];
|
||||
const room = await dmModule.startDmOnFirstMessage(mockClient, members);
|
||||
expect(room).toBe(localRoom);
|
||||
|
||||
// ensure that startDmOnFirstMessage tries to resolve 3rd-party IDs
|
||||
expect(resolveThreePids).toHaveBeenCalledWith(members, mockClient);
|
||||
|
||||
// ensure that the error is logged
|
||||
expect(logger.warn).toHaveBeenCalledWith("Error resolving 3rd-party members", error);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue