1
0
mirror of https://github.com/matrix-org/matrix-react-sdk.git synced 2025-08-07 21:23:00 +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: {}, realQueryParams: {},
}; };
const getComponent = (props: Partial<ComponentProps<typeof MatrixChat>> = {}) => const getComponent = (props: Partial<ComponentProps<typeof MatrixChat>> = {}) =>
render(<MatrixChat {...defaultProps} {...props} />); render(<MatrixChat {...defaultProps} {...props} />, { legacyRoot: true });
// make test results readable // make test results readable
filterConsole( filterConsole(
@@ -1380,7 +1380,6 @@ describe("<MatrixChat />", () => {
it("while we are checking the sync store", async () => { it("while we are checking the sync store", async () => {
const rendered = getComponent({}); const rendered = getComponent({});
await flushPromises();
expect(rendered.getByTestId("spinner")).toBeInTheDocument(); expect(rendered.getByTestId("spinner")).toBeInTheDocument();
// now a third session starts // now a third session starts

View File

@@ -102,6 +102,7 @@ describe("<ForgotPassword>", () => {
beforeEach(() => { beforeEach(() => {
renderResult = render( renderResult = render(
<ForgotPassword serverConfig={serverConfig} onComplete={onComplete} onLoginClick={onLoginClick} />, <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> </details>
</div> </div>
<div <div
aria-describedby=":rm:"
aria-label="Close dialog" aria-label="Close dialog"
class="mx_AccessibleButton mx_Dialog_cancelButton" class="mx_AccessibleButton mx_Dialog_cancelButton"
role="button" role="button"
@@ -160,6 +161,7 @@ exports[`LogoutDialog Prompts user to set up backup if there is no backup on the
</details> </details>
</div> </div>
<div <div
aria-describedby=":rs:"
aria-label="Close dialog" aria-label="Close dialog"
class="mx_AccessibleButton mx_Dialog_cancelButton" class="mx_AccessibleButton mx_Dialog_cancelButton"
role="button" role="button"

View File

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

View File

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

View File

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

View File

@@ -16,7 +16,15 @@ limitations under the License.
*/ */
import React from "react"; 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 { Room, MatrixClient, RoomState, RoomMember, User, MatrixEvent } from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types"; import { KnownMembership } from "matrix-js-sdk/src/types";
import { mocked, MockedObject } from "jest-mock"; import { mocked, MockedObject } from "jest-mock";
@@ -374,7 +382,7 @@ describe("MemberList", () => {
const renderComponent = () => { const renderComponent = () => {
const context = new TestSdkContext(); const context = new TestSdkContext();
context.client = client; context.client = client;
render( return render(
<SDKContext.Provider value={context}> <SDKContext.Provider value={context}>
<MemberList <MemberList
searchQuery="" searchQuery=""
@@ -383,6 +391,9 @@ describe("MemberList", () => {
roomId={room.roomId} roomId={room.roomId}
/> />
</SDKContext.Provider>, </SDKContext.Provider>,
{
// legacyRoot: true,
},
); );
}; };
@@ -409,7 +420,10 @@ describe("MemberList", () => {
await flushPromises(); await flushPromises();
// button rendered but disabled // 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 () => { 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, "getMyMembership").mockReturnValue(KnownMembership.Join);
jest.spyOn(room, "canInvite").mockReturnValue(true); jest.spyOn(room, "canInvite").mockReturnValue(true);
renderComponent(); const { getByRole, getAllByRole } = renderComponent();
await flushPromises(); 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({ expect(defaultDispatcher.dispatch).toHaveBeenCalledWith({
action: "view_invite", action: "view_invite",

View File

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

View File

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

View File

@@ -65,7 +65,7 @@ describe("UnverifiedSessionToast", () => {
}); });
beforeEach(() => { beforeEach(() => {
renderResult = render(<ToastContainer />); renderResult = render(<ToastContainer />, { legacyRoot: true });
}); });
describe("when rendering the toast", () => { describe("when rendering the toast", () => {