From 5d36df6e8a58a62ddf4e0b53df6bc092c9ba413c Mon Sep 17 00:00:00 2001 From: Marco Bartelt Date: Wed, 21 Dec 2022 12:19:59 +0100 Subject: [PATCH] adds missing unit test for UserOnboardingPage component --- .../user-onboarding/UserOnboardingList.tsx | 2 +- .../UserOnboardingPage-test.tsx | 101 ++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 test/components/views/user-onboarding/UserOnboardingPage-test.tsx diff --git a/src/components/views/user-onboarding/UserOnboardingList.tsx b/src/components/views/user-onboarding/UserOnboardingList.tsx index f16751406336..0214e6ac291e 100644 --- a/src/components/views/user-onboarding/UserOnboardingList.tsx +++ b/src/components/views/user-onboarding/UserOnboardingList.tsx @@ -43,7 +43,7 @@ export function UserOnboardingList({ tasks }: Props) { const { completed, waiting, total } = getUserOnboardingCounters(tasks); return ( -
+
{waiting > 0 diff --git a/test/components/views/user-onboarding/UserOnboardingPage-test.tsx b/test/components/views/user-onboarding/UserOnboardingPage-test.tsx new file mode 100644 index 000000000000..bad03d04de79 --- /dev/null +++ b/test/components/views/user-onboarding/UserOnboardingPage-test.tsx @@ -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 }) =>
{url}
), +})); + +jest.mock("../../../../src/components/structures/HomePage", () => ({ + __esModule: true, + default: jest.fn().mockImplementation(() =>
home page
), +})); + +describe("UserOnboardingPage", () => { + let restoreConsole: () => void; + + const renderComponent = async (): Promise => { + const renderResult = render(); + 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(); + }); + }); + }); +});