diff --git a/src/renderer/components/layout/top-bar/top-bar-win-linux.test.tsx b/src/renderer/components/layout/top-bar/top-bar-win-linux.test.tsx deleted file mode 100644 index 7f606a31be..0000000000 --- a/src/renderer/components/layout/top-bar/top-bar-win-linux.test.tsx +++ /dev/null @@ -1,88 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import React from "react"; -import { fireEvent } from "@testing-library/react"; -import "@testing-library/jest-dom/extend-expect"; -import { TopBar } from "./top-bar"; -import { getDiForUnitTesting } from "../../../getDiForUnitTesting"; -import type { DiRender } from "../../test-utils/renderFor"; -import { renderFor } from "../../test-utils/renderFor"; -import directoryForUserDataInjectable from "../../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import mockFs from "mock-fs"; -import { emitOpenAppMenuAsContextMenu, requestWindowAction } from "../../../ipc"; -import isLinuxInjectable from "../../../../common/vars/is-linux.injectable"; -import isMacInjectable from "../../../../common/vars/is-mac.injectable"; -import isWindowsInjectable from "../../../../common/vars/is-windows.injectable"; -import type { DiContainer } from "@ogre-tools/injectable"; - -jest.mock("../../../../common/ipc"); -jest.mock("../../../ipc"); - -describe(" in Windows and Linux", () => { - let render: DiRender; - let di: DiContainer; - - beforeEach(() => { - di = getDiForUnitTesting({ doGeneralOverrides: true }); - - di.override(isMacInjectable, () => false); - - di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data"); - - mockFs(); - - render = renderFor(di); - }); - - afterEach(() => { - mockFs.restore(); - }); - - it("shows window controls on Windows", () => { - di.override(isWindowsInjectable, () => true); - - const { getByTestId } = render(); - - expect(getByTestId("window-menu")).toBeInTheDocument(); - expect(getByTestId("window-minimize")).toBeInTheDocument(); - expect(getByTestId("window-maximize")).toBeInTheDocument(); - expect(getByTestId("window-close")).toBeInTheDocument(); - }); - - it("shows window controls on Linux", () => { - di.override(isLinuxInjectable, () => true); - - const { getByTestId } = render(); - - expect(getByTestId("window-menu")).toBeInTheDocument(); - expect(getByTestId("window-minimize")).toBeInTheDocument(); - expect(getByTestId("window-maximize")).toBeInTheDocument(); - expect(getByTestId("window-close")).toBeInTheDocument(); - }); - - it("triggers ipc events on click", () => { - di.override(isWindowsInjectable, () => true); - - const { getByTestId } = render(); - - const menu = getByTestId("window-menu"); - const minimize = getByTestId("window-minimize"); - const maximize = getByTestId("window-maximize"); - const close = getByTestId("window-close"); - - fireEvent.click(menu); - expect(emitOpenAppMenuAsContextMenu).toHaveBeenCalledWith(); - - fireEvent.click(minimize); - expect(requestWindowAction).toHaveBeenCalledWith("minimize"); - - fireEvent.click(maximize); - expect(requestWindowAction).toHaveBeenCalledWith("toggle-maximize"); - - fireEvent.click(close); - expect(requestWindowAction).toHaveBeenCalledWith("close"); - }); -}); diff --git a/src/renderer/components/layout/top-bar/top-bar.test.tsx b/src/renderer/components/layout/top-bar/top-bar.test.tsx index 2a8ce964a1..a32529cb91 100644 --- a/src/renderer/components/layout/top-bar/top-bar.test.tsx +++ b/src/renderer/components/layout/top-bar/top-bar.test.tsx @@ -13,8 +13,6 @@ import type { DiRender } from "../../test-utils/renderFor"; import { renderFor } from "../../test-utils/renderFor"; import topBarItemsInjectable from "./top-bar-items/top-bar-items.injectable"; import { computed, observable } from "mobx"; -import isLinuxInjectable from "../../../../common/vars/is-linux.injectable"; -import isWindowsInjectable from "../../../../common/vars/is-windows.injectable"; import rendererExtensionsInjectable from "../../../../extensions/renderer-extensions.injectable"; import closeWindowInjectable from "./close-window.injectable"; import goBackInjectable from "./go-back.injectable"; @@ -23,23 +21,28 @@ import maximizeWindowInjectable from "./maximize-window.injectable"; import openAppContextMenuInjectable from "./open-app-context-menu.injectable"; import toggleMaximizeWindowInjectable from "./toggle-maximize-window.injectable"; import topBarStateInjectable from "./state.injectable"; +import platformInjectable from "../../../../common/vars/platform.injectable"; describe("", () => { let di: DiContainer; let render: DiRender; let goBack: jest.MockedFunction<() => void>; let goForward: jest.MockedFunction<() => void>; + let openAppContextMenu: jest.MockedFunction<() => void>; + let closeWindow: jest.MockedFunction<() => void>; + let maximizeWindow: jest.MockedFunction<() => void>; + let toggleMaximizeWindow: jest.MockedFunction<() => void>; beforeEach(() => { di = getDiForUnitTesting({ doGeneralOverrides: true }); di.override(rendererExtensionsInjectable, () => computed(() => [])); - di.override(openAppContextMenuInjectable, () => jest.fn()); + di.override(openAppContextMenuInjectable, () => openAppContextMenu = jest.fn()); di.override(goBackInjectable, () => goBack = jest.fn()); di.override(goForwardInjectable, () => goForward = jest.fn()); - di.override(closeWindowInjectable, () => jest.fn()); - di.override(maximizeWindowInjectable, () => jest.fn()); - di.override(toggleMaximizeWindowInjectable, () => jest.fn()); + di.override(closeWindowInjectable, () => closeWindow = jest.fn()); + di.override(maximizeWindowInjectable, () => maximizeWindow = jest.fn()); + di.override(toggleMaximizeWindowInjectable, () => toggleMaximizeWindow = jest.fn()); render = renderFor(di); }); @@ -109,28 +112,91 @@ describe("", () => { expect(await findByTestId(testId)).toHaveTextContent(text); }); - it("doesn't show windows title buttons on macos", () => { - di.override(isLinuxInjectable, () => false); - di.override(isWindowsInjectable, () => false); + describe("on macos", () => { + beforeEach(() => { + di.override(platformInjectable, () => "darwin"); + }); - const { queryByTestId } = render(); + it("doesn't show windows title", () => { + const { queryByTestId } = render(); - expect(queryByTestId("window-menu")).not.toBeInTheDocument(); - expect(queryByTestId("window-minimize")).not.toBeInTheDocument(); - expect(queryByTestId("window-maximize")).not.toBeInTheDocument(); - expect(queryByTestId("window-close")).not.toBeInTheDocument(); + expect(queryByTestId("window-menu")).not.toBeInTheDocument(); + expect(queryByTestId("window-minimize")).not.toBeInTheDocument(); + expect(queryByTestId("window-maximize")).not.toBeInTheDocument(); + expect(queryByTestId("window-close")).not.toBeInTheDocument(); + }); }); - it("does show windows title buttons on linux", () => { - di.override(isLinuxInjectable, () => true); - di.override(isWindowsInjectable, () => false); + describe("on linux", () => { + beforeEach(() => { + di.override(platformInjectable, () => "linux"); + }); - const { queryByTestId } = render(); + it("does show windows title buttons", () => { + const { queryByTestId } = render(); - expect(queryByTestId("window-menu")).toBeInTheDocument(); - expect(queryByTestId("window-minimize")).toBeInTheDocument(); - expect(queryByTestId("window-maximize")).toBeInTheDocument(); - expect(queryByTestId("window-close")).toBeInTheDocument(); + expect(queryByTestId("window-menu")).toBeInTheDocument(); + expect(queryByTestId("window-minimize")).toBeInTheDocument(); + expect(queryByTestId("window-maximize")).toBeInTheDocument(); + expect(queryByTestId("window-close")).toBeInTheDocument(); + }); + + it("triggers ipc events on click", () => { + const { getByTestId } = render(); + + const menu = getByTestId("window-menu"); + const minimize = getByTestId("window-minimize"); + const maximize = getByTestId("window-maximize"); + const close = getByTestId("window-close"); + + fireEvent.click(menu); + expect(openAppContextMenu).toBeCalled(); + + fireEvent.click(minimize); + expect(maximizeWindow).toBeCalled(); + + fireEvent.click(maximize); + expect(toggleMaximizeWindow).toBeCalled(); + + fireEvent.click(close); + expect(closeWindow).toBeCalled(); + }); + }); + + describe("on windows", () => { + beforeEach(() => { + di.override(platformInjectable, () => "win32"); + }); + + it("does show windows title buttons", () => { + const { queryByTestId } = render(); + + expect(queryByTestId("window-menu")).toBeInTheDocument(); + expect(queryByTestId("window-minimize")).toBeInTheDocument(); + expect(queryByTestId("window-maximize")).toBeInTheDocument(); + expect(queryByTestId("window-close")).toBeInTheDocument(); + }); + + it("triggers ipc events on click", () => { + const { getByTestId } = render(); + + const menu = getByTestId("window-menu"); + const minimize = getByTestId("window-minimize"); + const maximize = getByTestId("window-maximize"); + const close = getByTestId("window-close"); + + fireEvent.click(menu); + expect(openAppContextMenu).toBeCalled(); + + fireEvent.click(minimize); + expect(maximizeWindow).toBeCalled(); + + fireEvent.click(maximize); + expect(toggleMaximizeWindow).toBeCalled(); + + fireEvent.click(close); + expect(closeWindow).toBeCalled(); + }); }); }); }); diff --git a/src/renderer/getDiForUnitTesting.tsx b/src/renderer/getDiForUnitTesting.tsx index e42ccdaced..c58511d2bc 100644 --- a/src/renderer/getDiForUnitTesting.tsx +++ b/src/renderer/getDiForUnitTesting.tsx @@ -26,9 +26,6 @@ import type { ClusterStore } from "../common/cluster-store/cluster-store"; import type { Cluster } from "../common/cluster/cluster"; import userStoreInjectable from "../common/user-store/user-store.injectable"; import type { UserStore } from "../common/user-store"; -import isMacInjectable from "../common/vars/is-mac.injectable"; -import isWindowsInjectable from "../common/vars/is-windows.injectable"; -import isLinuxInjectable from "../common/vars/is-linux.injectable"; import getAbsolutePathInjectable from "../common/path/get-absolute-path.injectable"; import { getAbsolutePathFake } from "../common/test-utils/get-absolute-path-fake"; import joinPathsInjectable from "../common/path/join-paths.injectable"; @@ -52,6 +49,7 @@ import requestAnimationFrameInjectable from "./components/animate/request-animat import getRandomIdInjectable from "../common/utils/get-random-id.injectable"; import getFilePathsInjectable from "./components/+preferences/kubernetes/helm-charts/adding-of-custom-helm-repository/helm-file-input/get-file-paths.injectable"; import callForPublicHelmRepositoriesInjectable from "./components/+preferences/kubernetes/helm-charts/adding-of-public-helm-repository/public-helm-repositories/call-for-public-helm-repositories.injectable"; +import platformInjectable from "../common/vars/platform.injectable"; export const getDiForUnitTesting = (opts: { doGeneralOverrides?: boolean } = {}) => { const { @@ -75,9 +73,7 @@ export const getDiForUnitTesting = (opts: { doGeneralOverrides?: boolean } = {}) if (doGeneralOverrides) { di.override(getRandomIdInjectable, () => () => "some-irrelevant-random-id"); - di.override(isMacInjectable, () => true); - di.override(isWindowsInjectable, () => false); - di.override(isLinuxInjectable, () => false); + di.override(platformInjectable, () => "darwin"); di.override(terminalSpawningPoolInjectable, () => document.createElement("div")); di.override(hostedClusterIdInjectable, () => undefined);