Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Commit

Permalink
adds missing unit test for UserOnboardingPage component
Browse files Browse the repository at this point in the history
  • Loading branch information
GoodGuyMarco committed Dec 21, 2022
1 parent 8ff1d11 commit c70f73f
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export function UserOnboardingList({ tasks }: Props) {
const { completed, waiting, total } = getUserOnboardingCounters(tasks);

return (
<div className="mx_UserOnboardingList">
<div className="mx_UserOnboardingList" data-testid="user-onboarding-list">
<div className="mx_UserOnboardingList_header">
<Heading size="h3" className="mx_UserOnboardingList_title">
{waiting > 0
Expand Down
101 changes: 101 additions & 0 deletions test/components/views/user-onboarding/UserOnboardingPage-test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/*
Copyright 2022 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

import React from "react";
import { act, render, RenderResult } from "@testing-library/react";

import { filterConsole, stubClient } from "../../../test-utils";
import { UserOnboardingPage } from "../../../../src/components/views/user-onboarding/UserOnboardingPage";
import { MatrixClientPeg } from "../../../../src/MatrixClientPeg";
import SdkConfig from "../../../../src/SdkConfig";

jest.mock("../../../../src/components/structures/EmbeddedPage", () => ({
__esModule: true,
default: jest.fn().mockImplementation(({ url }) => <div>{url}</div>),
}));

jest.mock("../../../../src/components/structures/HomePage", () => ({
__esModule: true,
default: jest.fn().mockImplementation(() => <div>home page</div>),
}));

describe("UserOnboardingPage", () => {
let restoreConsole: () => void;

const renderComponent = async (): Promise<RenderResult> => {
const renderResult = render(<UserOnboardingPage />);
await act(async () => {
jest.runAllTimers();
});
return renderResult;
};

beforeAll(() => {
restoreConsole = filterConsole(
// unrelated for this test
"could not update user onboarding context",
);
});

beforeEach(() => {
stubClient();
jest.useFakeTimers();
});

afterEach(() => {
jest.useRealTimers();
});

afterAll(() => {
restoreConsole();
});

describe("when the user registered before the cutoff date", () => {
beforeEach(() => {
jest.spyOn(MatrixClientPeg, "userRegisteredAfter").mockReturnValue(false);
});

it("should render the home page", async () => {
expect((await renderComponent()).queryByText("home page")).toBeInTheDocument();
});
});

describe("when the user registered after the cutoff date", () => {
beforeEach(() => {
jest.spyOn(MatrixClientPeg, "userRegisteredAfter").mockReturnValue(true);
});

describe("and there is an explicit home page configured", () => {
beforeEach(() => {
jest.spyOn(SdkConfig, "get").mockReturnValue({
embedded_pages: {
home_url: "https://example.com/home",
},
});
});

it("should render the configured page", async () => {
expect((await renderComponent()).queryByText("https://example.com/home")).toBeInTheDocument();
});
});

describe("and there is no home page configured", () => {
it("should render the onboarding", async () => {
expect((await renderComponent()).queryByTestId("user-onboarding-list")).toBeInTheDocument();
});
});
});
});

0 comments on commit c70f73f

Please sign in to comment.