Skip to content

Commit 394bffb

Browse files
authored
Await start DM in right panel (matrix-org#10290)
1 parent 667ec16 commit 394bffb

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

src/components/views/right_panel/UserInfo.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ async function openDmForUser(matrixClient: MatrixClient, user: Member): Promise<
131131
display_name: user.rawDisplayName,
132132
avatar_url: avatarUrl,
133133
});
134-
startDmOnFirstMessage(matrixClient, [startDmUser]);
134+
await startDmOnFirstMessage(matrixClient, [startDmUser]);
135135
}
136136

137137
type SetUpdating = (updating: boolean) => void;

test/components/views/right_panel/UserInfo-test.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ limitations under the License.
1515
*/
1616

1717
import React from "react";
18-
import { fireEvent, render, screen, waitFor, cleanup } from "@testing-library/react";
18+
import { fireEvent, render, screen, waitFor, cleanup, act } from "@testing-library/react";
1919
import userEvent from "@testing-library/user-event";
2020
import { mocked } from "jest-mock";
2121
import { Room, User, MatrixClient, RoomMember, MatrixEvent, EventType } from "matrix-js-sdk/src/matrix";
2222
import { Phase, VerificationRequest } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest";
2323
import { DeviceTrustLevel, UserTrustLevel } from "matrix-js-sdk/src/crypto/CrossSigning";
2424
import { DeviceInfo } from "matrix-js-sdk/src/crypto/deviceinfo";
25+
import { defer } from "matrix-js-sdk/src/utils";
2526

2627
import UserInfo, {
2728
BanToggleButton,
@@ -44,6 +45,7 @@ import * as mockVerification from "../../../../src/verification";
4445
import Modal from "../../../../src/Modal";
4546
import { E2EStatus } from "../../../../src/utils/ShieldUtils";
4647
import { DirectoryMember, startDmOnFirstMessage } from "../../../../src/utils/direct-messages";
48+
import { flushPromises } from "../../../test-utils";
4749

4850
jest.mock("../../../../src/utils/direct-messages", () => ({
4951
...jest.requireActual("../../../../src/utils/direct-messages"),
@@ -608,15 +610,30 @@ describe("<UserOptionsSection />", () => {
608610
])(
609611
"clicking »message« %s should start a DM",
610612
async (test: string, member: RoomMember | User, expectedAvatarUrl: string | undefined) => {
613+
const deferred = defer<string>();
614+
mocked(startDmOnFirstMessage).mockReturnValue(deferred.promise);
615+
611616
renderComponent({ member });
612617
await userEvent.click(screen.getByText("Message"));
618+
619+
// Checking the attribute, because the button is a DIV and toBeDisabled() does not work.
620+
expect(screen.getByText("Message")).toHaveAttribute("disabled");
621+
613622
expect(startDmOnFirstMessage).toHaveBeenCalledWith(mockClient, [
614623
new DirectoryMember({
615624
user_id: member.userId,
616625
display_name: member.rawDisplayName,
617626
avatar_url: expectedAvatarUrl,
618627
}),
619628
]);
629+
630+
await act(async () => {
631+
deferred.resolve("!dm:example.com");
632+
await flushPromises();
633+
});
634+
635+
// Checking the attribute, because the button is a DIV and toBeDisabled() does not work.
636+
expect(screen.getByText("Message")).not.toHaveAttribute("disabled");
620637
},
621638
);
622639
});

0 commit comments

Comments
 (0)