1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Override app event bus in tests to prevent side effects.

Signed-off-by: Juho Heikka <juho.heikka@gmail.com>
This commit is contained in:
Juho Heikka 2022-08-02 14:00:12 +03:00
parent c3c0b71ba3
commit 7d062efd90
11 changed files with 50 additions and 8 deletions

View File

@ -19,6 +19,8 @@ import quitAndInstallUpdateInjectable from "../../main/application-update/quit-a
import timeAfterUpdateMustBeInstalledInjectable from "../../renderer/application-update/force-update-modal/time-after-update-must-be-installed.injectable";
import secondsAfterInstallStartsInjectable from "../../renderer/application-update/force-update-modal/seconds-after-install-starts.injectable";
import forceUpdateModalRootFrameComponentInjectable from "../../renderer/application-update/force-update-modal/force-update-modal-root-frame-component.injectable";
import { overrideAppEventBusInjectable } from "../../common/test-utils/override-app-event-bus";
import appEventBusInjectable from "../../common/app-event-bus/app-event-bus.injectable";
const TIME_AFTER_UPDATE_MUST_BE_INSTALLED = 1000;
const TIME_AFTER_INSTALL_STARTS = 5 * 1000;
@ -54,6 +56,8 @@ describe("force user to update when too long since update was downloaded", () =>
rendererDi.override(timeAfterUpdateMustBeInstalledInjectable, () => TIME_AFTER_UPDATE_MUST_BE_INSTALLED);
rendererDi.override(secondsAfterInstallStartsInjectable, () => TIME_AFTER_INSTALL_STARTS / 1000);
overrideAppEventBusInjectable(rendererDi, appEventBusInjectable);
});
mainDi = applicationBuilder.dis.mainDi;

View File

@ -25,6 +25,8 @@ import readJsonFileInjectable from "../../../common/fs/read-json-file.injectable
import directoryForLensLocalStorageInjectable from "../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable";
import hostedClusterIdInjectable from "../../../renderer/cluster-frame-context/hosted-cluster-id.injectable";
import { controlWhenStoragesAreReady } from "../../../renderer/utils/create-storage/storages-are-ready";
import { overrideAppEventBusInjectable } from "../../../common/test-utils/override-app-event-bus";
import appEventBusInjectable from "../../../common/app-event-bus/app-event-bus.injectable";
jest.mock("../../../renderer/components/tooltip/withTooltip", () => ({
withTooltip:
@ -77,6 +79,8 @@ describe("cluster/namespaces - edit namespace from new tab", () => {
rendererDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
overrideAppEventBusInjectable(rendererDi, appEventBusInjectable);
storagesAreReady = controlWhenStoragesAreReady(rendererDi);
rendererDi.override(

View File

@ -30,6 +30,8 @@ import hostedClusterIdInjectable from "../../../renderer/cluster-frame-context/h
import dockStoreInjectable from "../../../renderer/components/dock/dock/store.injectable";
import readJsonFileInjectable from "../../../common/fs/read-json-file.injectable";
import type { DiContainer } from "@ogre-tools/injectable";
import { overrideAppEventBusInjectable } from "../../../common/test-utils/override-app-event-bus";
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", () => ({
@ -111,6 +113,8 @@ describe("installing helm chart from new tab", () => {
.mockReturnValueOnce("some-first-tab-id")
.mockReturnValueOnce("some-second-tab-id"),
);
overrideAppEventBusInjectable(rendererDi, appEventBusInjectable);
});
builder.setEnvironmentToClusterFrame();

View File

@ -24,6 +24,8 @@ import directoryForLensLocalStorageInjectable from "../../../common/directory-fo
import hostedClusterIdInjectable from "../../../renderer/cluster-frame-context/hosted-cluster-id.injectable";
import dockStoreInjectable from "../../../renderer/components/dock/dock/store.injectable";
import type { DiContainer } from "@ogre-tools/injectable";
import { overrideAppEventBusInjectable } from "../../../common/test-utils/override-app-event-bus";
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", () => ({
@ -88,6 +90,8 @@ describe("opening dock tab for installing helm chart", () => {
.fn(() => "some-irrelevant-tab-id")
.mockReturnValueOnce("some-tab-id"),
);
overrideAppEventBusInjectable(rendererDi, appEventBusInjectable);
});
builder.setEnvironmentToClusterFrame();

View File

@ -23,6 +23,8 @@ import callForHelmReleaseInjectable from "../../renderer/components/+helm-releas
import showSuccessNotificationInjectable from "../../renderer/components/notifications/show-success-notification.injectable";
import showCheckedErrorInjectable from "../../renderer/components/notifications/show-checked-error.injectable";
import getRandomUpgradeChartTabIdInjectable from "../../renderer/components/dock/upgrade-chart/get-random-upgrade-chart-tab-id.injectable";
import { overrideAppEventBusInjectable } from "../../common/test-utils/override-app-event-bus";
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", () => ({
@ -98,6 +100,8 @@ describe("showing details for helm release", () => {
selectNamespaces: () => {},
} as unknown as NamespaceStore),
);
overrideAppEventBusInjectable(rendererDi, appEventBusInjectable);
});
});

View File

@ -0,0 +1,17 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import type { DiContainer, Injectable } from "@ogre-tools/injectable";
import type { AppEvent } from "../app-event-bus/event-bus";
import type { EventEmitter } from "../event-emitter";
export function overrideAppEventBusInjectable(di: DiContainer, appEventBusInjectable: Injectable<EventEmitter<[AppEvent]>, unknown, void>) {
const emitEvent: (event: AppEvent) => void = jest.fn();
di.override(appEventBusInjectable, () => ({
emit: emitEvent,
}));
return emitEvent;
}

View File

@ -26,6 +26,7 @@ import type { AppEvent } from "../../../common/app-event-bus/event-bus";
import appEventBusInjectable from "../../../common/app-event-bus/app-event-bus.injectable";
import { computed } from "mobx";
import broadcastMessageInjectable from "../../../common/ipc/broadcast-message.injectable";
import { overrideAppEventBusInjectable } from "../../../common/test-utils/override-app-event-bus";
mockWindow();
jest.mock("electron", () => ({
@ -105,11 +106,7 @@ describe("<Catalog />", () => {
di.override(catalogEntityRegistryInjectable, () => catalogEntityRegistry);
emitEvent = jest.fn();
di.override(appEventBusInjectable, () => ({
emit: emitEvent,
}));
emitEvent = overrideAppEventBusInjectable(di, appEventBusInjectable);
catalogEntityStore = di.inject(catalogEntityStoreInjectable);
Object.assign(catalogEntityStore, {

View File

@ -27,7 +27,9 @@ 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 appVersionInjectable from "../../../../common/vars/app-version.injectable";
import appEventBusInjectable from "../../../../common/app-event-bus/app-event-bus.injectable";
import { overrideAppEventBusInjectable } from "../../../../common/test-utils/override-app-event-bus";
mockWindow();
@ -62,10 +64,10 @@ describe("Extensions", () => {
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
di.override(directoryForDownloadsInjectable, () => "some-directory-for-downloads");
overrideAppEventBusInjectable(di, appEventBusInjectable);
di.permitSideEffects(getConfigurationFileModelInjectable);
di.permitSideEffects(appVersionInjectable);
di.permitSideEffects(appEventBusInjectable);
mockFs({
"some-directory-for-user-data": {},

View File

@ -7,6 +7,8 @@ import type { DiContainer } from "@ogre-tools/injectable";
import type { RenderResult } from "@testing-library/react";
import { fireEvent } from "@testing-library/react";
import React from "react";
import appEventBusInjectable from "../../../common/app-event-bus/app-event-bus.injectable";
import { overrideAppEventBusInjectable } from "../../../common/test-utils/override-app-event-bus";
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
import { Namespace } from "../../../common/k8s-api/endpoints";
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
@ -40,6 +42,8 @@ describe("<NamespaceSelectFilter />", () => {
di.override(storesAndApisCanBeCreatedInjectable, () => true);
namespaceStore = di.inject(namespaceStoreInjectable);
overrideAppEventBusInjectable(di, appEventBusInjectable);
const render = renderFor(di);
namespaceStore.items.replace([

View File

@ -19,6 +19,7 @@ import getConfigurationFileModelInjectable from "../../../../common/get-configur
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";
import { overrideAppEventBusInjectable } from "../../../../common/test-utils/override-app-event-bus";
const mockHotbars: Partial<Record<string, any>> = {
"1": {
@ -46,10 +47,10 @@ describe("<HotbarRemoveCommand />", () => {
di.override(storesAndApisCanBeCreatedInjectable, () => true);
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
overrideAppEventBusInjectable(di, appEventBusInjectable);
di.permitSideEffects(hotbarStoreInjectable);
di.permitSideEffects(getConfigurationFileModelInjectable);
di.permitSideEffects(appEventBusInjectable);
render = renderFor(di);
});

View File

@ -26,6 +26,7 @@ import createEditResourceTabInjectable from "../dock/edit-resource/edit-resource
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";
import { overrideAppEventBusInjectable } from "../../../common/test-utils/override-app-event-bus";
// TODO: Make tooltips free of side effects by making it deterministic
jest.mock("../tooltip/tooltip");
@ -69,7 +70,7 @@ describe("kube-object-menu", () => {
di.override(createEditResourceTabInjectable, () => () => "irrelevant");
di.permitSideEffects(appEventBusInjectable);
overrideAppEventBusInjectable(di, appEventBusInjectable);
});
it("given no cluster, does not crash", () => {