From 2dff493341920257a36282a30cc0699ece6dbe12 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Mon, 13 Mar 2023 12:46:49 +0300 Subject: [PATCH] Adding tests Signed-off-by: Alex Andreev --- .../__snapshots__/icon-settings.test.tsx.snap | 53 +++++++++ .../__tests__/icon-settings.test.tsx | 106 ++++++++++++++++++ 2 files changed, 159 insertions(+) create mode 100644 packages/core/src/renderer/components/cluster-settings/__tests__/__snapshots__/icon-settings.test.tsx.snap create mode 100644 packages/core/src/renderer/components/cluster-settings/__tests__/icon-settings.test.tsx diff --git a/packages/core/src/renderer/components/cluster-settings/__tests__/__snapshots__/icon-settings.test.tsx.snap b/packages/core/src/renderer/components/cluster-settings/__tests__/__snapshots__/icon-settings.test.tsx.snap new file mode 100644 index 0000000000..97eac8fca2 --- /dev/null +++ b/packages/core/src/renderer/components/cluster-settings/__tests__/__snapshots__/icon-settings.test.tsx.snap @@ -0,0 +1,53 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Icon settings given no external registrations for cluster settings menu injection token renders 1`] = ` + +
+
+
+
+
+ + +
+
+ + + more_horiz + + +
+
+
+ +`; diff --git a/packages/core/src/renderer/components/cluster-settings/__tests__/icon-settings.test.tsx b/packages/core/src/renderer/components/cluster-settings/__tests__/icon-settings.test.tsx new file mode 100644 index 0000000000..df93daee64 --- /dev/null +++ b/packages/core/src/renderer/components/cluster-settings/__tests__/icon-settings.test.tsx @@ -0,0 +1,106 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import type { DiContainer } from "@ogre-tools/injectable"; +import { getInjectable } from "@ogre-tools/injectable"; +import type { RenderResult } from "@testing-library/react"; +import React from "react"; +import { KubernetesCluster } from "../../../../common/catalog-entities"; +import { Cluster } from "../../../../common/cluster/cluster"; +import { getDiForUnitTesting } from "../../../getDiForUnitTesting"; +import { renderFor } from "../../test-utils/renderFor"; +import { ClusterIconSetting } from "../icon-settings"; +import { screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import type { ChangedClusterPreference } from "../cluster-settings-menu-injection-token"; +import { clusterIconSettingsMenuInjectionToken } from "../cluster-settings-menu-injection-token"; +import { runInAction } from "mobx"; + +const cluster = new Cluster({ + contextName: "some-context", + id: "some-id", + kubeConfigPath: "/some/path/to/kubeconfig", +}, { + clusterServerUrl: "https://localhost:9999", +}); + +const clusterEntity = new KubernetesCluster({ + metadata: { + labels: {}, + name: "some-kubernetes-cluster", + uid: "some-entity-id", + }, + spec: { + kubeconfigContext: "some-context", + kubeconfigPath: "/some/path/to/kubeconfig", + }, + status: { + phase: "connecting", + }, +}); + +const newMenuItem = getInjectable({ + id: "cluster-icon-settings-menu-test-item", + + instantiate: () => ({ + id: "test-menu-item", + title: "Hello World", + onClick: () => { + const data: ChangedClusterPreference = ["clusterName", "New cluster name"]; + + return data; + }, + }), + + injectionToken: clusterIconSettingsMenuInjectionToken, +}); + +describe("Icon settings", () => { + let rendered: RenderResult; + let di: DiContainer; + + beforeEach(() => { + di = getDiForUnitTesting(); + + // registerMobX(di); + + const render = renderFor(di); + + rendered = render( + , + ); + }); + + describe("given no external registrations for cluster settings menu injection token", () => { + it("renders", () => { + expect(rendered.baseElement).toMatchSnapshot(); + }); + + it("has predefined menu item", async () => { + userEvent.click(await screen.findByTestId("icon-for-menu-actions-for-cluster-icon-settings-for-some-entity-id")); + + expect(rendered.getByText("Upload Icon")).toBeInTheDocument(); + }); + + it("has menu item from build-in registration", async () => { + userEvent.click(await screen.findByTestId("icon-for-menu-actions-for-cluster-icon-settings-for-some-entity-id")); + + expect(rendered.getByText("Clear")).toBeInTheDocument(); + }); + }); + + describe("given external registrations for cluster settings menu injection token", () => { + beforeEach(() => { + runInAction(() => { + di.register(newMenuItem); + }); + }); + + it("has menu item from external registration", async () => { + userEvent.click(await screen.findByTestId("icon-for-menu-actions-for-cluster-icon-settings-for-some-entity-id")); + + expect(rendered.getByText("Hello World")).toBeInTheDocument(); + }); + }); +});