mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix unit tests
Signed-off-by: Juho Heikka <juho.heikka@gmail.com>
This commit is contained in:
parent
6fd5c727e8
commit
dee2b5c66c
@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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": {},
|
||||
|
||||
@ -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("<DeleteClusterDialog />", () => {
|
||||
mainDi.override(kubectlBinaryNameInjectable, () => "kubectl");
|
||||
mainDi.override(kubectlDownloadingNormalizedArchInjectable, () => "amd64");
|
||||
mainDi.override(normalizedPlatformInjectable, () => "darwin");
|
||||
|
||||
rendererDi.override(appEventBusInjectable, () => new EventEmitter<[AppEvent]>());
|
||||
rendererDi.override(storesAndApisCanBeCreatedInjectable, () => true);
|
||||
});
|
||||
|
||||
|
||||
@ -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<Record<string, any>> = {
|
||||
"1": {
|
||||
@ -48,6 +49,7 @@ describe("<HotbarRemoveCommand />", () => {
|
||||
|
||||
di.permitSideEffects(hotbarStoreInjectable);
|
||||
di.permitSideEffects(getConfigurationFileModelInjectable);
|
||||
di.permitSideEffects(appEventBusInjectable);
|
||||
|
||||
render = renderFor(di);
|
||||
});
|
||||
|
||||
@ -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", () => {
|
||||
|
||||
@ -44,7 +44,7 @@ const NonInjectedTabLayout = observer(
|
||||
return (
|
||||
<Tab
|
||||
onClick={() => {
|
||||
if (registration.title) {
|
||||
if (registration.title) {
|
||||
captureClick(registration.title.toString(), "Tab Click");
|
||||
}
|
||||
registration.onClick();
|
||||
|
||||
@ -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<Option, IsMulti>, actionMeta: ActionMeta<Option>) => {
|
||||
if (inputId) {
|
||||
props.capture(inputId, "Select Change");
|
||||
capture(inputId, "Select Change");
|
||||
}
|
||||
|
||||
return onChange?.(newValue, actionMeta);
|
||||
|
||||
@ -4,11 +4,24 @@
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
import { fireEvent, render } from "@testing-library/react";
|
||||
import { fireEvent } from "@testing-library/react";
|
||||
import "@testing-library/jest-dom/extend-expect";
|
||||
import { Switch } from "../switch";
|
||||
import type { DiRender } from "../../test-utils/renderFor";
|
||||
import { renderFor } from "../../test-utils/renderFor";
|
||||
import { getDiForUnitTesting } from "../../../getDiForUnitTesting";
|
||||
import type { DiContainer } from "@ogre-tools/injectable";
|
||||
|
||||
describe("<Switch/>", () => {
|
||||
let di: DiContainer;
|
||||
let render: DiRender;
|
||||
|
||||
beforeEach(() => {
|
||||
di = getDiForUnitTesting({ doGeneralOverrides: true });
|
||||
render = renderFor(di);
|
||||
});
|
||||
|
||||
|
||||
it("renders w/o errors", () => {
|
||||
const { container } = render(<Switch />);
|
||||
|
||||
|
||||
@ -120,7 +120,7 @@ class NonInjectedTab extends React.PureComponent<TabProps & Dependencies> {
|
||||
}
|
||||
|
||||
render() {
|
||||
const { active, disabled, icon, label, value, ...elemProps } = this.props;
|
||||
const { active, disabled, icon, label, value, capture, ...elemProps } = this.props;
|
||||
let { className } = this.props;
|
||||
|
||||
className = cssNames("Tab flex gaps align-center", className, {
|
||||
|
||||
@ -9,7 +9,7 @@ import type { EventEmitter } from "../../common/event-emitter";
|
||||
|
||||
// foo_bar-baz => Foo Bar Baz
|
||||
function getNameFromId(id: string) {
|
||||
return id.split(/[/,-,--]/).filter(Boolean).map((part) => `${part[0].toUpperCase()+part.substring(1)}`).join("");
|
||||
return id.split(/[/,-,_,--]/).filter(Boolean).map((part) => `${part[0].toUpperCase()+part.substring(1)}`).join(" ");
|
||||
}
|
||||
|
||||
function captureWithId(eventBus: EventEmitter<[AppEvent]>, id: string, action: string) {
|
||||
|
||||
36
src/renderer/telemetry/capture-with-id.test.ts
Normal file
36
src/renderer/telemetry/capture-with-id.test.ts
Normal file
@ -0,0 +1,36 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
|
||||
import captureWithIdInjectable from "./capture-with-id.injectable";
|
||||
import appEventBusInjectable from "../../common/app-event-bus/app-event-bus.injectable";
|
||||
import { getDiForUnitTesting } from "../getDiForUnitTesting";
|
||||
import type { AppEvent } from "../../common/app-event-bus/event-bus";
|
||||
|
||||
describe("auto capture with id", () => {
|
||||
let emitEvent: (event: AppEvent) => void;
|
||||
let capture: (id: string, action: string) => void;
|
||||
|
||||
beforeEach(() => {
|
||||
const di = getDiForUnitTesting();
|
||||
|
||||
emitEvent = jest.fn();
|
||||
|
||||
di.override(appEventBusInjectable, () => ({
|
||||
emit: emitEvent,
|
||||
}));
|
||||
capture = di.inject(captureWithIdInjectable);
|
||||
|
||||
});
|
||||
|
||||
it("calls event bus", () => {
|
||||
console.log(capture);
|
||||
capture("foo_bar-baz", "click");
|
||||
expect(emitEvent).toHaveBeenCalledWith({
|
||||
name: "Foo Bar Baz",
|
||||
action: "click",
|
||||
destination: "AutoCapture",
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in New Issue
Block a user