diff --git a/test/components/views/dialogs/security/InitialCryptoSetupDialog-test.tsx b/test/components/views/dialogs/security/InitialCryptoSetupDialog-test.tsx
index 4d3d495a38..a589b55289 100644
--- a/test/components/views/dialogs/security/InitialCryptoSetupDialog-test.tsx
+++ b/test/components/views/dialogs/security/InitialCryptoSetupDialog-test.tsx
@@ -7,31 +7,22 @@ Please see LICENSE files in the repository root for full details.
*/
import React from "react";
-import { render, screen, waitFor } from "jest-matrix-react";
-import { mocked } from "jest-mock";
-import { MatrixClient } from "matrix-js-sdk/src/matrix";
+import { render, screen } from "jest-matrix-react";
+import userEvent from "@testing-library/user-event";
-import { createCrossSigning } from "../../../../../src/CreateCrossSigning";
import { InitialCryptoSetupDialog } from "../../../../../src/components/views/dialogs/security/InitialCryptoSetupDialog";
-import { createTestClient } from "../../../../test-utils";
-
-jest.mock("../../../../../src/CreateCrossSigning", () => ({
- createCrossSigning: jest.fn(),
-}));
+import { InitialCryptoSetupStore } from "../../../../../src/stores/InitialCryptoSetupStore";
describe("InitialCryptoSetupDialog", () => {
- let client: MatrixClient;
- let createCrossSigningResolve: () => void;
- let createCrossSigningReject: (e: Error) => void;
+ const storeMock = {
+ getStatus: jest.fn(),
+ retry: jest.fn(),
+ on: jest.fn(),
+ off: jest.fn(),
+ };
beforeEach(() => {
- client = createTestClient();
- mocked(createCrossSigning).mockImplementation(() => {
- return new Promise((resolve, reject) => {
- createCrossSigningResolve = resolve;
- createCrossSigningReject = reject;
- });
- });
+ jest.spyOn(InitialCryptoSetupStore, "sharedInstance").mockReturnValue(storeMock as any);
});
afterEach(() => {
@@ -39,93 +30,32 @@ describe("InitialCryptoSetupDialog", () => {
jest.restoreAllMocks();
});
- it("should call createCrossSigning and show a spinner while it runs", async () => {
+ it("should show a spinner while the setup is in progress", async () => {
const onFinished = jest.fn();
- render(
- ,
- );
+ storeMock.getStatus.mockReturnValue("in_progress");
+
+ render();
- expect(createCrossSigning).toHaveBeenCalledWith(client, false, "hunter2");
expect(screen.getByTestId("spinner")).toBeInTheDocument();
-
- createCrossSigningResolve!();
-
- await waitFor(() => expect(onFinished).toHaveBeenCalledWith(true));
});
- it("should display an error if createCrossSigning fails", async () => {
- render(
- ,
- );
+ it("should display an error if setup has failed", async () => {
+ storeMock.getStatus.mockReturnValue("error");
- createCrossSigningReject!(new Error("generic error message"));
+ render();
await expect(await screen.findByRole("button", { name: "Retry" })).toBeInTheDocument();
});
- it("ignores failures when tokenLogin is true", async () => {
+ it("calls retry when retry button pressed", async () => {
const onFinished = jest.fn();
+ storeMock.getStatus.mockReturnValue("error");
- render(
- ,
- );
+ render();
- createCrossSigningReject!(new Error("generic error message"));
+ await userEvent.click(await screen.findByRole("button", { name: "Retry" }));
- await waitFor(() => expect(onFinished).toHaveBeenCalledWith(false));
- });
-
- it("cancels the dialog when the cancel button is clicked", async () => {
- const onFinished = jest.fn();
-
- render(
- ,
- );
-
- createCrossSigningReject!(new Error("generic error message"));
-
- const cancelButton = await screen.findByRole("button", { name: "Cancel" });
- cancelButton.click();
-
- expect(onFinished).toHaveBeenCalledWith(false);
- });
-
- it("should retry when the retry button is clicked", async () => {
- render(
- ,
- );
-
- createCrossSigningReject!(new Error("generic error message"));
-
- const retryButton = await screen.findByRole("button", { name: "Retry" });
- retryButton.click();
-
- expect(createCrossSigning).toHaveBeenCalledTimes(2);
+ expect(storeMock.retry).toHaveBeenCalled();
});
});