From dee2b5c66c11a1e7064d27d66d385179d97fe09b Mon Sep 17 00:00:00 2001 From: Juho Heikka Date: Tue, 5 Jul 2022 14:09:14 +0300 Subject: [PATCH] Fix unit tests Signed-off-by: Juho Heikka --- .../cluster/order-of-sidebar-items.test.tsx | 2 ++ ...debar-and-tab-navigation-for-core.test.tsx | 3 ++ ...and-tab-navigation-for-extensions.test.tsx | 2 ++ ...tom-helm-repository-in-preferences.test.ts | 3 ++ ...epository-from-list-in-preferences.test.ts | 3 ++ .../preferences/closing-preferences.test.tsx | 2 ++ .../__tests__/secret-details.test.tsx | 13 ++++++- .../+extensions/__tests__/extensions.test.tsx | 3 ++ .../__tests__/delete-cluster-dialog.test.tsx | 5 +++ .../__tests__/hotbar-remove-command.test.tsx | 2 ++ .../kube-object-menu.test.tsx | 3 ++ .../components/layout/tab-layout-2.tsx | 2 +- src/renderer/components/select/select.tsx | 3 +- .../switch/__tests__/switch.test.tsx | 15 +++++++- src/renderer/components/tabs/tabs.tsx | 2 +- .../telemetry/capture-with-id.injectable.ts | 2 +- .../telemetry/capture-with-id.test.ts | 36 +++++++++++++++++++ 17 files changed, 95 insertions(+), 6 deletions(-) create mode 100644 src/renderer/telemetry/capture-with-id.test.ts diff --git a/src/behaviours/cluster/order-of-sidebar-items.test.tsx b/src/behaviours/cluster/order-of-sidebar-items.test.tsx index 368b1b065d..9bd62afc22 100644 --- a/src/behaviours/cluster/order-of-sidebar-items.test.tsx +++ b/src/behaviours/cluster/order-of-sidebar-items.test.tsx @@ -11,6 +11,7 @@ import { computed } from "mobx"; import { noop } from "lodash/fp"; import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; +import appEventBusInjectable from "../../common/app-event-bus/app-event-bus.injectable"; describe("cluster - order of sidebar items", () => { let rendered: RenderResult; @@ -21,6 +22,7 @@ describe("cluster - order of sidebar items", () => { applicationBuilder.beforeApplicationStart(({ rendererDi }) => { rendererDi.register(testSidebarItemsInjectable); + rendererDi.permitSideEffects(appEventBusInjectable); }); }); diff --git a/src/behaviours/cluster/sidebar-and-tab-navigation-for-core.test.tsx b/src/behaviours/cluster/sidebar-and-tab-navigation-for-core.test.tsx index e6cf1f4a64..5861ba32e5 100644 --- a/src/behaviours/cluster/sidebar-and-tab-navigation-for-core.test.tsx +++ b/src/behaviours/cluster/sidebar-and-tab-navigation-for-core.test.tsx @@ -25,6 +25,7 @@ import sidebarStorageInjectable from "../../renderer/components/layout/sidebar-s import hostedClusterIdInjectable from "../../renderer/cluster-frame-context/hosted-cluster-id.injectable"; import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time"; import storageSaveDelayInjectable from "../../renderer/utils/create-storage/storage-save-delay.injectable"; +import appEventBusInjectable from "../../common/app-event-bus/app-event-bus.injectable"; describe("cluster - sidebar and tab navigation for core", () => { let applicationBuilder: ApplicationBuilder; @@ -48,6 +49,8 @@ describe("cluster - sidebar and tab navigation for core", () => { directoryForLensLocalStorageInjectable, () => "/some-directory-for-lens-local-storage", ); + + rendererDi.permitSideEffects(appEventBusInjectable); }); }); diff --git a/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx b/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx index 952669c03e..ef72ef1ab1 100644 --- a/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx +++ b/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx @@ -22,6 +22,7 @@ import { getExtensionFakeFor } from "../../renderer/components/test-utils/get-ex import type { IObservableValue } from "mobx"; import { runInAction, computed, observable } from "mobx"; import storageSaveDelayInjectable from "../../renderer/utils/create-storage/storage-save-delay.injectable"; +import appEventBusInjectable from "../../common/app-event-bus/app-event-bus.injectable"; // TODO: Make tooltips free of side effects by making it deterministic jest.mock("../../renderer/components/tooltip/withTooltip", () => ({ @@ -46,6 +47,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => { rendererDi.override(storageSaveDelayInjectable, () => 250); + rendererDi.permitSideEffects(appEventBusInjectable); rendererDi.override( directoryForLensLocalStorageInjectable, () => "/some-directory-for-lens-local-storage", diff --git a/src/behaviours/helm-charts/add-custom-helm-repository-in-preferences.test.ts b/src/behaviours/helm-charts/add-custom-helm-repository-in-preferences.test.ts index 943aca900f..5f8501c7bc 100644 --- a/src/behaviours/helm-charts/add-custom-helm-repository-in-preferences.test.ts +++ b/src/behaviours/helm-charts/add-custom-helm-repository-in-preferences.test.ts @@ -17,6 +17,7 @@ import isPathInjectable from "../../renderer/components/input/validators/is-path import showSuccessNotificationInjectable from "../../renderer/components/notifications/show-success-notification.injectable"; import showErrorNotificationInjectable from "../../renderer/components/notifications/show-error-notification.injectable"; import type { AsyncResult } from "../../common/utils/async-result"; +import appEventBusInjectable from "../../common/app-event-bus/app-event-bus.injectable"; // TODO: Make tooltips free of side effects by making it deterministic jest.mock("../../renderer/components/tooltip/withTooltip", () => ({ @@ -55,6 +56,8 @@ describe("add custom helm repository in preferences", () => { // TODO: Figure out how to make async validators unit testable rendererDi.override(isPathInjectable, () => ({ debounce: 0, validate: async () => {} })); + rendererDi.permitSideEffects(appEventBusInjectable); + mainDi.override( getActiveHelmRepositoriesInjectable, () => getActiveHelmRepositoriesMock, diff --git a/src/behaviours/helm-charts/add-helm-repository-from-list-in-preferences.test.ts b/src/behaviours/helm-charts/add-helm-repository-from-list-in-preferences.test.ts index 74e57cb693..0ab169d885 100644 --- a/src/behaviours/helm-charts/add-helm-repository-from-list-in-preferences.test.ts +++ b/src/behaviours/helm-charts/add-helm-repository-from-list-in-preferences.test.ts @@ -15,6 +15,7 @@ import callForPublicHelmRepositoriesInjectable from "../../renderer/components/+ import showSuccessNotificationInjectable from "../../renderer/components/notifications/show-success-notification.injectable"; import showErrorNotificationInjectable from "../../renderer/components/notifications/show-error-notification.injectable"; import type { AsyncResult } from "../../common/utils/async-result"; +import appEventBusInjectable from "../../common/app-event-bus/app-event-bus.injectable"; // TODO: Make tooltips free of side effects by making it deterministic jest.mock("../../renderer/components/tooltip/withTooltip", () => ({ @@ -53,6 +54,8 @@ describe("add helm repository from list in preferences", () => { () => callForPublicHelmRepositoriesMock, ); + rendererDi.permitSideEffects(appEventBusInjectable); + mainDi.override( getActiveHelmRepositoriesInjectable, () => getActiveHelmRepositoriesMock, diff --git a/src/behaviours/preferences/closing-preferences.test.tsx b/src/behaviours/preferences/closing-preferences.test.tsx index dddd7e18dc..05d87aaeb5 100644 --- a/src/behaviours/preferences/closing-preferences.test.tsx +++ b/src/behaviours/preferences/closing-preferences.test.tsx @@ -22,6 +22,7 @@ import { createObservableHistory } from "mobx-observable-history"; import navigateToPreferenceTabInjectable from "../../renderer/components/+preferences/preferences-navigation/navigate-to-preference-tab.injectable"; import navigateToFrontPageInjectable from "../../common/front-end-routing/navigate-to-front-page.injectable"; import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token"; +import appEventBusInjectable from "../../common/app-event-bus/app-event-bus.injectable"; describe("preferences - closing-preferences", () => { let applicationBuilder: ApplicationBuilder; @@ -35,6 +36,7 @@ describe("preferences - closing-preferences", () => { rendererDi.register(testFrontPageRouteInjectable); rendererDi.register(testFrontPageRouteComponentInjectable); rendererDi.register(testNavigationItemInjectable); + rendererDi.permitSideEffects(appEventBusInjectable); rendererDi.override(navigateToFrontPageInjectable, (di) => { const navigateToRoute = di.inject(navigateToRouteInjectionToken); diff --git a/src/renderer/components/+config-secrets/__tests__/secret-details.test.tsx b/src/renderer/components/+config-secrets/__tests__/secret-details.test.tsx index 6903e853bc..a9ff711120 100644 --- a/src/renderer/components/+config-secrets/__tests__/secret-details.test.tsx +++ b/src/renderer/components/+config-secrets/__tests__/secret-details.test.tsx @@ -4,9 +4,12 @@ */ import React from "react"; -import { render } from "@testing-library/react"; +import type { DiRender } from "../../test-utils/renderFor"; +import { renderFor } from "../../test-utils/renderFor"; import { SecretDetails } from "../secret-details"; import { Secret, SecretType } from "../../../../common/k8s-api/endpoints"; +import type { DiContainer } from "@ogre-tools/injectable"; +import { getDiForUnitTesting } from "../../../../renderer/getDiForUnitTesting"; jest.mock("../../kube-object-meta/kube-object-meta", () => ({ KubeObjectMeta: () => null, @@ -14,6 +17,14 @@ jest.mock("../../kube-object-meta/kube-object-meta", () => ({ describe("SecretDetails tests", () => { + let di: DiContainer; + let render: DiRender; + + beforeEach(() => { + di = getDiForUnitTesting({ doGeneralOverrides: true }); + render = renderFor(di); + }); + it("should show the visibility toggle when the secret value is ''", () => { const secret = new Secret({ apiVersion: "v1", diff --git a/src/renderer/components/+extensions/__tests__/extensions.test.tsx b/src/renderer/components/+extensions/__tests__/extensions.test.tsx index 5de9e15f1f..fd84cce03e 100644 --- a/src/renderer/components/+extensions/__tests__/extensions.test.tsx +++ b/src/renderer/components/+extensions/__tests__/extensions.test.tsx @@ -27,6 +27,7 @@ import installFromInputInjectable from "../install-from-input/install-from-input import type { ExtensionInstallationStateStore } from "../../../../extensions/extension-installation-state-store/extension-installation-state-store"; import extensionInstallationStateStoreInjectable from "../../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable"; import { observable, when } from "mobx"; +import appEventBusInjectable from "../../../../common/app-event-bus/app-event-bus.injectable"; mockWindow(); @@ -63,6 +64,8 @@ describe("Extensions", () => { di.override(directoryForDownloadsInjectable, () => "some-directory-for-downloads"); di.permitSideEffects(getConfigurationFileModelInjectable); + di.permitSideEffects(appVersionInjectable); + di.permitSideEffects(appEventBusInjectable); mockFs({ "some-directory-for-user-data": {}, diff --git a/src/renderer/components/delete-cluster-dialog/__tests__/delete-cluster-dialog.test.tsx b/src/renderer/components/delete-cluster-dialog/__tests__/delete-cluster-dialog.test.tsx index 8978e00b5b..c3178fce8b 100644 --- a/src/renderer/components/delete-cluster-dialog/__tests__/delete-cluster-dialog.test.tsx +++ b/src/renderer/components/delete-cluster-dialog/__tests__/delete-cluster-dialog.test.tsx @@ -20,6 +20,9 @@ import { getApplicationBuilder } from "../../test-utils/get-application-builder" import normalizedPlatformInjectable from "../../../../common/vars/normalized-platform.injectable"; import kubectlBinaryNameInjectable from "../../../../main/kubectl/binary-name.injectable"; import kubectlDownloadingNormalizedArchInjectable from "../../../../main/kubectl/normalized-arch.injectable"; +import appEventBusInjectable from "../../../../common/app-event-bus/app-event-bus.injectable"; +import { EventEmitter } from "../../../../common/event-emitter"; +import type { AppEvent } from "../../../../common/app-event-bus/event-bus"; jest.mock("electron", () => ({ app: { @@ -103,6 +106,8 @@ describe("", () => { mainDi.override(kubectlBinaryNameInjectable, () => "kubectl"); mainDi.override(kubectlDownloadingNormalizedArchInjectable, () => "amd64"); mainDi.override(normalizedPlatformInjectable, () => "darwin"); + + rendererDi.override(appEventBusInjectable, () => new EventEmitter<[AppEvent]>()); rendererDi.override(storesAndApisCanBeCreatedInjectable, () => true); }); diff --git a/src/renderer/components/hotbar/__tests__/hotbar-remove-command.test.tsx b/src/renderer/components/hotbar/__tests__/hotbar-remove-command.test.tsx index cc22112380..f175b5da78 100644 --- a/src/renderer/components/hotbar/__tests__/hotbar-remove-command.test.tsx +++ b/src/renderer/components/hotbar/__tests__/hotbar-remove-command.test.tsx @@ -18,6 +18,7 @@ import directoryForUserDataInjectable from "../../../../common/app-paths/directo import getConfigurationFileModelInjectable from "../../../../common/get-configuration-file-model/get-configuration-file-model.injectable"; import type { HotbarStore } from "../../../../common/hotbars/store"; import storesAndApisCanBeCreatedInjectable from "../../../stores-apis-can-be-created.injectable"; +import appEventBusInjectable from "../../../../common/app-event-bus/app-event-bus.injectable"; const mockHotbars: Partial> = { "1": { @@ -48,6 +49,7 @@ describe("", () => { di.permitSideEffects(hotbarStoreInjectable); di.permitSideEffects(getConfigurationFileModelInjectable); + di.permitSideEffects(appEventBusInjectable); render = renderFor(di); }); diff --git a/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx b/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx index 0f0b338d8f..909ec8a795 100644 --- a/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx +++ b/src/renderer/components/kube-object-menu/kube-object-menu.test.tsx @@ -25,6 +25,7 @@ import { KubeObjectMenu } from "./index"; import createEditResourceTabInjectable from "../dock/edit-resource/edit-resource-tab.injectable"; import hideDetailsInjectable from "../kube-detail-params/hide-details.injectable"; import { kubeObjectMenuItemInjectionToken } from "./kube-object-menu-item-injection-token"; +import appEventBusInjectable from "../../../common/app-event-bus/app-event-bus.injectable"; // TODO: Make tooltips free of side effects by making it deterministic jest.mock("../tooltip/tooltip"); @@ -67,6 +68,8 @@ describe("kube-object-menu", () => { di.override(hideDetailsInjectable, () => () => {}); di.override(createEditResourceTabInjectable, () => () => "irrelevant"); + + di.permitSideEffects(appEventBusInjectable); }); it("given no cluster, does not crash", () => { diff --git a/src/renderer/components/layout/tab-layout-2.tsx b/src/renderer/components/layout/tab-layout-2.tsx index c37fd9f272..772713f4c3 100644 --- a/src/renderer/components/layout/tab-layout-2.tsx +++ b/src/renderer/components/layout/tab-layout-2.tsx @@ -44,7 +44,7 @@ const NonInjectedTabLayout = observer( return ( { - if (registration.title) { + if (registration.title) { captureClick(registration.title.toString(), "Tab Click"); } registration.onClick(); diff --git a/src/renderer/components/select/select.tsx b/src/renderer/components/select/select.tsx index eb654f784e..aed7e5d040 100644 --- a/src/renderer/components/select/select.tsx +++ b/src/renderer/components/select/select.tsx @@ -195,6 +195,7 @@ class NonInjectedSelect< isMulti, id: inputId, onChange, + capture, ...props } = this.props; @@ -232,7 +233,7 @@ class NonInjectedSelect< classNamePrefix="Select" onChange={action((newValue: OnChangeValue, actionMeta: ActionMeta