From 97074c8a80595dbe494cb4877735f78578b2be8d Mon Sep 17 00:00:00 2001 From: Mikhail Aheichyk Date: Tue, 22 Aug 2023 10:12:55 +0300 Subject: [PATCH] Test is added for wrapper. Signed-off-by: Mikhail Aheichyk --- test/app-tests/wrapper-test.tsx | 90 +++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 test/app-tests/wrapper-test.tsx diff --git a/test/app-tests/wrapper-test.tsx b/test/app-tests/wrapper-test.tsx new file mode 100644 index 00000000000..c4747098431 --- /dev/null +++ b/test/app-tests/wrapper-test.tsx @@ -0,0 +1,90 @@ +/* +Copyright 2023 Mikhail Aheichyk +Copyright 2023 Nordeck IT + Consulting GmbH. + +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 SdkConfig from "matrix-react-sdk/src/SdkConfig"; +import PlatformPeg from "matrix-react-sdk/src/PlatformPeg"; +import fetchMock from "fetch-mock-jest"; +import { render, RenderResult, screen, waitFor } from "@testing-library/react"; +import { ModuleRunner } from "matrix-react-sdk/src/modules/ModuleRunner"; +import { WrapperLifecycle, WrapperOpts } from "@matrix-org/react-sdk-module-api/lib/lifecycles/WrapperLifecycle"; + +import WebPlatform from "../../src/vector/platform/WebPlatform"; +import { loadApp } from "../../src/vector/app"; + +fetchMock.config.overwriteRoutes = true; + +describe("Wrapper", () => { + beforeEach(async () => { + SdkConfig.reset(); + PlatformPeg.set(new WebPlatform()); + fetchMock.get("https://matrix-client.matrix.org/_matrix/client/versions", { + unstable_features: {}, + versions: ["v1.1"], + }); + fetchMock.get("https://matrix.org/.well-known/matrix/client", { + "m.homeserver": { + base_url: "https://matrix-client.matrix.org", + }, + }); + fetchMock.get("/version", "1.10.13"); + }); + + it("wrap a matrix client with header and footer", async () => { + SdkConfig.put({ + default_server_config: { + "m.homeserver": { + base_url: "https://matrix-client.matrix.org", + }, + }, + }); + + jest.spyOn(ModuleRunner.instance, "invoke").mockImplementation((lifecycleEvent, opts) => { + if (lifecycleEvent === WrapperLifecycle.Wrapper) { + (opts as WrapperOpts).Wrapper = ({ children }) => { + return ( + <> +
Header
+ {children} +
Footer
+ + ); + }; + } + }); + + const matrixChat: RenderResult = render(await loadApp({})); + + // at this point, we're trying to do a guest registration; + // we expect a spinner + await assertAtLoadingSpinner(); + + await awaitWelcomeComponent(matrixChat); + + // Are not semantic elements because Element has a footer already. + screen.getByText(/Header/i); + screen.getByText(/Footer/i); + }); +}); + +async function assertAtLoadingSpinner(): Promise { + await screen.findByRole("progressbar"); +} + +async function awaitWelcomeComponent(matrixChat?: RenderResult): Promise { + await waitFor(() => matrixChat?.container.querySelector(".mx_Welcome")); +}