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:
parent
c3c0b71ba3
commit
7d062efd90
@ -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;
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
17
src/common/test-utils/override-app-event-bus.ts
Normal file
17
src/common/test-utils/override-app-event-bus.ts
Normal 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;
|
||||
}
|
||||
@ -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, {
|
||||
|
||||
@ -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": {},
|
||||
|
||||
@ -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([
|
||||
|
||||
@ -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);
|
||||
});
|
||||
|
||||
@ -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", () => {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user