From c0344a35bc13a5a8b0660a374900a91a308a7ef9 Mon Sep 17 00:00:00 2001 From: Alex Culliere Date: Thu, 4 Feb 2021 16:15:13 +0200 Subject: [PATCH] Provide additional unit tests Signed-off-by: Alex Culliere --- .../cluster-manager/cluster-actions.tsx | 2 +- .../__test__/main-layout-header.test.tsx | 78 +++++++++++++++---- 2 files changed, 64 insertions(+), 16 deletions(-) diff --git a/src/renderer/components/cluster-manager/cluster-actions.tsx b/src/renderer/components/cluster-manager/cluster-actions.tsx index 534af2f1c2..da1b72c74f 100644 --- a/src/renderer/components/cluster-manager/cluster-actions.tsx +++ b/src/renderer/components/cluster-manager/cluster-actions.tsx @@ -21,7 +21,7 @@ const deactivateCluster = (clusterId: string) => { /** * Creates handlers for high-level actions * that could be performed on an individual cluster - * @param cluster Cluster> + * @param cluster Cluster */ export const ClusterActions = (cluster: Cluster) => ({ "SHOW_SETTINGS": () => navigate(clusterSettingsURL({ diff --git a/src/renderer/components/layout/__test__/main-layout-header.test.tsx b/src/renderer/components/layout/__test__/main-layout-header.test.tsx index b3db79f2e1..6f20f07ad0 100644 --- a/src/renderer/components/layout/__test__/main-layout-header.test.tsx +++ b/src/renderer/components/layout/__test__/main-layout-header.test.tsx @@ -7,15 +7,18 @@ import "@testing-library/jest-dom/extend-expect"; import { MainLayoutHeader } from "../main-layout-header"; import { Cluster } from "../../../../main/cluster"; import { workspaceStore } from "../../../../common/workspace-store"; -import { broadcastMessage } from "../../../../common/ipc"; +import { broadcastMessage, requestMain } from "../../../../common/ipc"; +import { clusterDisconnectHandler } from "../../../../common/cluster-ipc"; +import { ConfirmDialog } from "../../confirm-dialog"; const mockBroadcastIpc = broadcastMessage as jest.MockedFunction; +const mockRequestMain = requestMain as jest.MockedFunction; const cluster: Cluster = new Cluster({ id: "foo", contextName: "minikube", kubeConfigPath: "minikube-config.yml", - workspace: workspaceStore.currentWorkspaceId + workspace: workspaceStore.currentWorkspaceId, }); describe("", () => { @@ -33,22 +36,67 @@ describe("", () => { expect(icon).toHaveTextContent("more_vert"); }); - it("navigates to cluster settings", () => { - const { container } = render(); - const icon = container.querySelector(".Icon"); - - fireEvent.click(icon); - - const settingsBtn = document.querySelectorAll("ul.ClusterActionsMenu > li > span")[0]; - - expect(settingsBtn.textContent).toBe("Settings"); - fireEvent.click(settingsBtn); - expect(mockBroadcastIpc).toBeCalledWith("renderer:navigate", "/cluster/foo/settings"); - }); - it("renders cluster name", () => { const { getByText } = render(); expect(getByText("minikube")).toBeInTheDocument(); }); + + describe("Cluster Actions Menu", () => { + let settingsBtn: Element; + let disconnectBtn: Element; + let removeBtn: Element; + + beforeEach(() => { + const { container } = render(
+ + +
); + const icon = container.querySelector(".Icon"); + + cluster.online = true; + fireEvent.click(icon); + + [settingsBtn, disconnectBtn, removeBtn] = Array.from(document.querySelectorAll("ul.ClusterActionsMenu > li")) + .map(el => el.querySelector("span")); + }); + + afterEach(() => { + cluster.online = false; + }); + + it("renders cluster menu items", () => { + expect(settingsBtn).toBeDefined(); + expect(settingsBtn.textContent).toBe("Settings"); + expect(disconnectBtn).toBeDefined(); + expect(disconnectBtn.textContent).toBe("Disconnect"); + expect(removeBtn).toBeDefined(); + expect(removeBtn.textContent).toBe("Remove"); + }); + + it("navigates to cluster settings", () => { + fireEvent.click(settingsBtn); + expect(mockBroadcastIpc).toBeCalledWith("renderer:navigate", "/cluster/foo/settings"); + }); + + it("disconnects from cluster", () => { + fireEvent.click(disconnectBtn); + expect(mockRequestMain).toBeCalledWith(clusterDisconnectHandler, cluster.id); + }); + + it("opens 'Remove cluster' dialog", async () => { + fireEvent.click(removeBtn); + + const dialog = document.querySelector(".ConfirmDialog"); + + expect(dialog).toBeDefined(); + expect(dialog).not.toBe(null); + + const okBtn = dialog.querySelector("button.ok"); + + expect(okBtn.textContent).toBe("Remove"); + // console.log(dialog); + + }); + }); });