1
0
mirror of https://github.com/matrix-org/matrix-react-sdk.git synced 2025-08-06 10:22:45 +03:00
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
Michael Telatynski
2024-08-02 14:03:31 +01:00
parent 899ba238ac
commit df1b7772f2
10 changed files with 95 additions and 24 deletions

View File

@@ -156,7 +156,7 @@ describe("<MatrixChat />", () => {
realQueryParams: {},
};
const getComponent = (props: Partial<ComponentProps<typeof MatrixChat>> = {}) =>
render(<MatrixChat {...defaultProps} {...props} />);
render(<MatrixChat {...defaultProps} {...props} />, { legacyRoot: true });
// make test results readable
filterConsole(
@@ -1380,7 +1380,6 @@ describe("<MatrixChat />", () => {
it("while we are checking the sync store", async () => {
const rendered = getComponent({});
await flushPromises();
expect(rendered.getByTestId("spinner")).toBeInTheDocument();
// now a third session starts

View File

@@ -102,6 +102,7 @@ describe("<ForgotPassword>", () => {
beforeEach(() => {
renderResult = render(
<ForgotPassword serverConfig={serverConfig} onComplete={onComplete} onLoginClick={onLoginClick} />,
{ legacyRoot: true },
);
});

View File

@@ -73,6 +73,7 @@ exports[`LogoutDialog Prompts user to connect backup if there is a backup on the
</details>
</div>
<div
aria-describedby=":rm:"
aria-label="Close dialog"
class="mx_AccessibleButton mx_Dialog_cancelButton"
role="button"
@@ -160,6 +161,7 @@ exports[`LogoutDialog Prompts user to set up backup if there is no backup on the
</details>
</div>
<div
aria-describedby=":rs:"
aria-label="Close dialog"
class="mx_AccessibleButton mx_Dialog_cancelButton"
role="button"

View File

@@ -23,7 +23,9 @@ import SyntaxHighlight from "../../../../src/components/views/elements/SyntaxHig
describe("<SyntaxHighlight />", () => {
it("renders", async () => {
const { container } = render(<SyntaxHighlight>console.log("Hello, World!");</SyntaxHighlight>);
const { container } = render(<SyntaxHighlight>console.log("Hello, World!");</SyntaxHighlight>, {
legacyRoot: true,
});
await waitFor(() => expect(container.querySelector(".language-arcade")).toBeTruthy());
expect(container).toMatchSnapshot();
});
@@ -31,7 +33,9 @@ describe("<SyntaxHighlight />", () => {
it.each(["json", "javascript", "css"])("uses the provided language", async (lang) => {
const mock = jest.spyOn(hljs, "highlight");
const { container } = render(<SyntaxHighlight language={lang}>// Hello, World</SyntaxHighlight>);
const { container } = render(<SyntaxHighlight language={lang}>// Hello, World</SyntaxHighlight>, {
legacyRoot: true,
});
await waitFor(() => expect(container.querySelector(`.language-${lang}`)).toBeTruthy());
const [_lang, opts] = mock.mock.lastCall!;

View File

@@ -70,6 +70,7 @@ describe("<PollHistory />", () => {
wrapper: ({ children }) => (
<MatrixClientContext.Provider value={mockClient}>{children}</MatrixClientContext.Provider>
),
legacyRoot: true,
});
beforeAll(() => {

View File

@@ -206,6 +206,7 @@ describe("<UserInfo />", () => {
return render(<UserInfo {...defaultProps} {...props} />, {
wrapper: Wrapper,
legacyRoot: true,
});
};
@@ -324,6 +325,9 @@ describe("<UserInfo />", () => {
<MatrixClientContext.Provider value={mockClient}>
<UserInfo {...defaultProps} />
</MatrixClientContext.Provider>,
{
legacyRoot: true,
},
);
screen.getByRole("button", { name: "Send message" });
@@ -339,6 +343,9 @@ describe("<UserInfo />", () => {
<MatrixClientContext.Provider value={mockClient}>
<UserInfo {...defaultProps} />
</MatrixClientContext.Provider>,
{
legacyRoot: true,
},
);
expect(screen.queryByRole("button", { name: "Message" })).toBeNull();
@@ -689,6 +696,7 @@ describe("<UserInfoHeader />", () => {
return render(<UserInfoHeader {...defaultProps} {...props} />, {
wrapper: Wrapper,
legacyRoot: true,
});
};
@@ -728,6 +736,7 @@ describe("<DeviceItem />", () => {
return render(<DeviceItem {...defaultProps} {...props} />, {
wrapper: Wrapper,
legacyRoot: true,
});
};
@@ -871,6 +880,7 @@ describe("<UserOptionsSection />", () => {
return render(<UserOptionsSection {...defaultProps} {...props} />, {
wrapper: Wrapper,
legacyRoot: true,
});
};
@@ -1097,6 +1107,7 @@ describe("<PowerLevelEditor />", () => {
return render(<PowerLevelEditor {...defaultProps} {...props} />, {
wrapper: Wrapper,
legacyRoot: true,
});
};
@@ -1156,6 +1167,7 @@ describe("<RoomKickButton />", () => {
return render(<RoomKickButton {...defaultProps} {...props} />, {
wrapper: Wrapper,
legacyRoot: true,
});
};
@@ -1263,6 +1275,7 @@ describe("<BanToggleButton />", () => {
return render(<BanToggleButton {...defaultProps} {...props} />, {
wrapper: Wrapper,
legacyRoot: true,
});
};
@@ -1395,6 +1408,7 @@ describe("<RoomAdminToolsContainer />", () => {
return render(<RoomAdminToolsContainer {...defaultProps} {...props} />, {
wrapper: Wrapper,
legacyRoot: true,
});
};

View File

@@ -16,7 +16,15 @@ limitations under the License.
*/
import React from "react";
import { act, fireEvent, render, RenderResult, screen } from "@testing-library/react";
import {
act,
fireEvent,
render,
RenderResult,
screen,
waitFor,
waitForElementToBeRemoved,
} from "@testing-library/react";
import { Room, MatrixClient, RoomState, RoomMember, User, MatrixEvent } from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types";
import { mocked, MockedObject } from "jest-mock";
@@ -374,7 +382,7 @@ describe("MemberList", () => {
const renderComponent = () => {
const context = new TestSdkContext();
context.client = client;
render(
return render(
<SDKContext.Provider value={context}>
<MemberList
searchQuery=""
@@ -383,6 +391,9 @@ describe("MemberList", () => {
roomId={room.roomId}
/>
</SDKContext.Provider>,
{
// legacyRoot: true,
},
);
};
@@ -409,7 +420,10 @@ describe("MemberList", () => {
await flushPromises();
// button rendered but disabled
expect(screen.getByText("Invite to this room")).toHaveAttribute("aria-disabled", "true");
expect(screen.getByRole("button", { name: "Invite to this room" })).toHaveAttribute(
"aria-disabled",
"true",
);
});
it("renders enabled invite button when current user is a member and has rights to invite", async () => {
@@ -427,10 +441,17 @@ describe("MemberList", () => {
jest.spyOn(room, "getMyMembership").mockReturnValue(KnownMembership.Join);
jest.spyOn(room, "canInvite").mockReturnValue(true);
renderComponent();
await flushPromises();
const { getByRole, getAllByRole } = renderComponent();
await waitForElementToBeRemoved(() => screen.queryAllByRole("progressbar"));
fireEvent.click(screen.getByText("Invite to this room"));
await waitFor(() =>
expect(getAllByRole("button", { name: "Invite to this room" })).not.toHaveAttribute(
"aria-disabled",
"true",
),
);
fireEvent.click(getByRole("button", { name: "Invite to this room" }));
expect(defaultDispatcher.dispatch).toHaveBeenCalledWith({
action: "view_invite",

View File

@@ -85,6 +85,9 @@ describe("SendWysiwygComposer", () => {
/>
</RoomContext.Provider>
</MatrixClientContext.Provider>,
{
legacyRoot: true,
},
);
};

View File

@@ -118,7 +118,9 @@ describe("<LoginWithQR />", () => {
test("no homeserver support", async () => {
// simulate no support
jest.spyOn(MSC3906Rendezvous.prototype, "generateCode").mockRejectedValue("");
render(getComponent({ client }));
render(getComponent({ client }), {
legacyRoot: true,
});
await waitFor(() =>
expect(mockedFlow).toHaveBeenLastCalledWith({
phase: Phase.Error,
@@ -132,7 +134,9 @@ describe("<LoginWithQR />", () => {
test("failed to connect", async () => {
jest.spyOn(MSC3906Rendezvous.prototype, "startAfterShowingCode").mockRejectedValue("");
render(getComponent({ client }));
render(getComponent({ client }), {
legacyRoot: true,
});
await waitFor(() =>
expect(mockedFlow).toHaveBeenLastCalledWith({
phase: Phase.Error,
@@ -148,7 +152,9 @@ describe("<LoginWithQR />", () => {
test("render QR then back", async () => {
const onFinished = jest.fn();
jest.spyOn(MSC3906Rendezvous.prototype, "startAfterShowingCode").mockReturnValue(unresolvedPromise());
render(getComponent({ client, onFinished }));
render(getComponent({ client, onFinished }), {
legacyRoot: true,
});
const rendezvous = mocked(MSC3906Rendezvous).mock.instances[0];
await waitFor(() =>
@@ -176,7 +182,9 @@ describe("<LoginWithQR />", () => {
test("render QR then decline", async () => {
const onFinished = jest.fn();
render(getComponent({ client, onFinished }));
render(getComponent({ client, onFinished }), {
legacyRoot: true,
});
const rendezvous = mocked(MSC3906Rendezvous).mock.instances[0];
await waitFor(() =>
@@ -206,7 +214,9 @@ describe("<LoginWithQR />", () => {
(client as any).crypto = undefined;
(client as any).getCrypto = () => undefined;
const onFinished = jest.fn();
render(getComponent({ client, onFinished }));
render(getComponent({ client, onFinished }), {
legacyRoot: true,
});
const rendezvous = mocked(MSC3906Rendezvous).mock.instances[0];
await waitFor(() =>
@@ -246,7 +256,9 @@ describe("<LoginWithQR />", () => {
jest.spyOn(MSC3906Rendezvous.prototype, "verifyNewDeviceOnExistingDevice").mockImplementation(() =>
unresolvedPromise(),
);
render(getComponent({ client, onFinished }));
render(getComponent({ client, onFinished }), {
legacyRoot: true,
});
const rendezvous = mocked(MSC3906Rendezvous).mock.instances[0];
await waitFor(() =>
@@ -283,7 +295,9 @@ describe("<LoginWithQR />", () => {
test("approve + verify", async () => {
const onFinished = jest.fn();
render(getComponent({ client, onFinished }));
render(getComponent({ client, onFinished }), {
legacyRoot: true,
});
const rendezvous = mocked(MSC3906Rendezvous).mock.instances[0];
await waitFor(() =>
@@ -313,7 +327,9 @@ describe("<LoginWithQR />", () => {
test("approve - rate limited", async () => {
mocked(client.requestLoginToken).mockRejectedValue(new HTTPError("rate limit reached", 429));
const onFinished = jest.fn();
render(getComponent({ client, onFinished }));
render(getComponent({ client, onFinished }), {
legacyRoot: true,
});
const rendezvous = mocked(MSC3906Rendezvous).mock.instances[0];
await waitFor(() =>
@@ -357,7 +373,9 @@ describe("<LoginWithQR />", () => {
test("render QR then back", async () => {
const onFinished = jest.fn();
jest.spyOn(MSC4108SignInWithQR.prototype, "negotiateProtocols").mockReturnValue(unresolvedPromise());
render(getComponent({ client, onFinished }));
render(getComponent({ client, onFinished }), {
legacyRoot: true,
});
await waitFor(() =>
expect(mockedFlow).toHaveBeenLastCalledWith({
@@ -378,7 +396,9 @@ describe("<LoginWithQR />", () => {
});
test("failed to connect", async () => {
render(getComponent({ client }));
render(getComponent({ client }), {
legacyRoot: true,
});
jest.spyOn(MSC4108SignInWithQR.prototype, "negotiateProtocols").mockResolvedValue({});
jest.spyOn(MSC4108SignInWithQR.prototype, "deviceAuthorizationGrant").mockRejectedValue(
new HTTPError("Internal Server Error", 500),
@@ -390,7 +410,9 @@ describe("<LoginWithQR />", () => {
test("reciprocates login", async () => {
jest.spyOn(global.window, "open");
render(getComponent({ client }));
render(getComponent({ client }), {
legacyRoot: true,
});
jest.spyOn(MSC4108SignInWithQR.prototype, "negotiateProtocols").mockResolvedValue({});
jest.spyOn(MSC4108SignInWithQR.prototype, "deviceAuthorizationGrant").mockResolvedValue({
verificationUri: "mock-verification-uri",
@@ -416,7 +438,9 @@ describe("<LoginWithQR />", () => {
});
test("handles errors during reciprocation", async () => {
render(getComponent({ client }));
render(getComponent({ client }), {
legacyRoot: true,
});
jest.spyOn(MSC4108SignInWithQR.prototype, "negotiateProtocols").mockResolvedValue({});
jest.spyOn(MSC4108SignInWithQR.prototype, "deviceAuthorizationGrant").mockResolvedValue({});
await waitFor(() =>
@@ -443,7 +467,9 @@ describe("<LoginWithQR />", () => {
});
test("handles user cancelling during reciprocation", async () => {
render(getComponent({ client }));
render(getComponent({ client }), {
legacyRoot: true,
});
jest.spyOn(MSC4108SignInWithQR.prototype, "negotiateProtocols").mockResolvedValue({});
jest.spyOn(MSC4108SignInWithQR.prototype, "deviceAuthorizationGrant").mockResolvedValue({});
jest.spyOn(MSC4108SignInWithQR.prototype, "deviceAuthorizationGrant").mockResolvedValue({});