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

Remove kludge in previous commit by explicitly permitting specific side effects where old unit tests require it

Signed-off-by: Iku-turso <mikko.aspiala@gmail.com>
This commit is contained in:
Iku-turso 2022-03-22 15:33:11 +02:00 committed by Janne Savolainen
parent 333ef65441
commit 03cd6aac87
No known key found for this signature in database
GPG Key ID: 8C6CFB2FFFE8F68A
14 changed files with 125 additions and 21 deletions

View File

@ -11,6 +11,10 @@ import { readFileSync } from "fs";
import directoryForUserDataInjectable
from "../app-paths/directory-for-user-data/directory-for-user-data.injectable";
import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
import getConfigurationFileModelInjectable
from "../get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable
from "../get-configuration-file-model/app-version/app-version.injectable";
jest.mock("electron", () => ({
ipcMain: {
@ -82,6 +86,12 @@ describe("BaseStore", () => {
mainDi.override(directoryForUserDataInjectable, () => "some-user-data-directory");
// @ts-ignore
mainDi.permitSideEffects(getConfigurationFileModelInjectable);
// @ts-ignore
mainDi.permitSideEffects(appVersionInjectable);
await mainDi.runSetups();
store = undefined;

View File

@ -18,7 +18,6 @@ import type {
DiContainer,
} from "@ogre-tools/injectable";
import { createClusterInjectionToken } from "../cluster/create-cluster-injection-token";
import directoryForUserDataInjectable
@ -26,6 +25,10 @@ import directoryForUserDataInjectable
import kubeAuthProxyCaInjectable from "../../main/kube-auth-proxy/kube-auth-proxy-ca.injectable";
import createKubeAuthProxyCertFilesInjectable from "../../main/kube-auth-proxy/create-kube-auth-proxy-cert-files.injectable";
import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
import getConfigurationFileModelInjectable
from "../get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable
from "../get-configuration-file-model/app-version/app-version.injectable";
console = new Console(stdout, stderr);
@ -89,6 +92,12 @@ describe("cluster-store", () => {
mainDi.override(clusterStoreInjectable, (di) => ClusterStore.createInstance({ createCluster: di.inject(createClusterInjectionToken) }));
mainDi.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
// @ts-ignore
mainDi.permitSideEffects(getConfigurationFileModelInjectable);
// @ts-ignore
mainDi.permitSideEffects(appVersionInjectable);
await mainDi.runSetups();
createCluster = mainDi.inject(createClusterInjectionToken);

View File

@ -33,6 +33,10 @@ import type { ClusterStoreModel } from "../cluster-store/cluster-store";
import { defaultTheme } from "../vars";
import writeFileInjectable from "../fs/write-file.injectable";
import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
import getConfigurationFileModelInjectable
from "../get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable
from "../get-configuration-file-model/app-version/app-version.injectable";
console = new Console(stdout, stderr);
@ -49,6 +53,12 @@ describe("user store tests", () => {
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
di.override(userStoreInjectable, () => UserStore.createInstance());
// @ts-ignore
di.permitSideEffects(getConfigurationFileModelInjectable);
// @ts-ignore
di.permitSideEffects(appVersionInjectable);
await di.runSetups();
});

View File

@ -8,10 +8,7 @@ import packageInfo from "../../../../package.json";
const appVersionInjectable = getInjectable({
id: "app-version",
instantiate: () => packageInfo.version,
// Todo: actually this does cause side-effects, but many legacy unit tests use fsMock and
// non-overriden Conf to unit test migration of configuration.
// causesSideEffects: true,
causesSideEffects: true,
});
export default appVersionInjectable;

View File

@ -20,8 +20,7 @@ const getConfigurationFileModelInjectable = getInjectable({
cwd: di.inject(directoryForUserDataInjectable),
}),
// Todo: actually this does cause side-effects, but many legacy unit tests use fsMock to unit test this.
// causesSideEffects: true,
causesSideEffects: true,
});
export default getConfigurationFileModelInjectable;

View File

@ -52,6 +52,8 @@ import createKubeAuthProxyInjectable from "../kube-auth-proxy/create-kube-auth-p
import { createClusterInjectionToken } from "../../common/cluster/create-cluster-injection-token";
import path from "path";
import spawnInjectable from "../child-process/spawn.injectable";
import getConfigurationFileModelInjectable from "../../common/get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable from "../../common/get-configuration-file-model/app-version/app-version.injectable";
console = new Console(stdout, stderr);
@ -96,6 +98,12 @@ describe("kube auth proxy tests", () => {
di.override(spawnInjectable, () => mockSpawn);
// @ts-ignore
di.permitSideEffects(getConfigurationFileModelInjectable);
// @ts-ignore
di.permitSideEffects(appVersionInjectable);
mockFs(mockMinikubeConfig);
await di.runSetups();
@ -134,7 +142,7 @@ describe("kube auth proxy tests", () => {
beforeEach(async () => {
mockedCP = mock<ChildProcess>();
listeners = new EventEmitter();
jest.spyOn(Kubectl.prototype, "checkBinary").mockReturnValueOnce(Promise.resolve(true));
jest.spyOn(Kubectl.prototype, "ensureKubectl").mockReturnValueOnce(Promise.resolve(false));
mockedCP.on.mockImplementation((event: string, listener: (message: any, sendHandle: any) => void): ChildProcess => {

View File

@ -16,6 +16,10 @@ import { getDiForUnitTesting } from "../../getDiForUnitTesting";
import { createClusterInjectionToken } from "../../../common/cluster/create-cluster-injection-token";
import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
import { ClusterStore } from "../../../common/cluster-store/cluster-store";
import getConfigurationFileModelInjectable
from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable
from "../../../common/get-configuration-file-model/app-version/app-version.injectable";
jest.mock("electron", () => ({
app: {
@ -52,6 +56,12 @@ describe("kubeconfig-sync.source tests", () => {
ClusterStore.createInstance({ createCluster: () => null }),
);
// @ts-ignore
di.permitSideEffects(getConfigurationFileModelInjectable);
// @ts-ignore
di.permitSideEffects(appVersionInjectable);
di.inject(clusterStoreInjectable);
ClusterManager.createInstance();

View File

@ -19,6 +19,10 @@ import lensProtocolRouterMainInjectable
from "../lens-protocol-router-main/lens-protocol-router-main.injectable";
import extensionsStoreInjectable
from "../../../extensions/extensions-store/extensions-store.injectable";
import getConfigurationFileModelInjectable
from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable
from "../../../common/get-configuration-file-model/app-version/app-version.injectable";
jest.mock("../../../common/ipc");
@ -44,6 +48,12 @@ describe("protocol router tests", () => {
di.override(extensionsStoreInjectable, () => ExtensionsStore.createInstance());
// @ts-ignore
di.permitSideEffects(getConfigurationFileModelInjectable);
// @ts-ignore
di.permitSideEffects(appVersionInjectable);
await di.runSetups();
extensionLoader = di.inject(extensionLoaderInjectable);

View File

@ -24,6 +24,10 @@ import { UserStore } from "../../../common/user-store";
import mockFs from "mock-fs";
import directoryForUserDataInjectable
from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
import getConfigurationFileModelInjectable
from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable
from "../../../common/get-configuration-file-model/app-version/app-version.injectable";
import type { AppEvent } from "../../../common/app-event-bus/event-bus";
import appEventBusInjectable from "../../../common/app-event-bus/app-event-bus.injectable";
@ -95,6 +99,12 @@ describe("<Catalog />", () => {
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
// @ts-ignore
di.permitSideEffects(getConfigurationFileModelInjectable);
// @ts-ignore
di.permitSideEffects(appVersionInjectable);
await di.runSetups();
mockFs();
@ -281,11 +291,7 @@ describe("<Catalog />", () => {
it("emits catalog open AppEvent", () => {
render(
<Catalog
history={history}
location={mockLocation}
match={mockMatch}
/>,
<Catalog />,
);
expect(emitEvent).toHaveBeenCalledWith( {
@ -296,11 +302,7 @@ describe("<Catalog />", () => {
it("emits catalog change AppEvent when changing the category", () => {
render(
<Catalog
history={history}
location={mockLocation}
match={mockMatch}
/>,
<Catalog />,
);
userEvent.click(screen.getByText("Web Links"));

View File

@ -20,6 +20,10 @@ import { DiRender, renderFor } from "../../test-utils/renderFor";
import extensionDiscoveryInjectable from "../../../../extensions/extension-discovery/extension-discovery.injectable";
import directoryForUserDataInjectable from "../../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
import directoryForDownloadsInjectable from "../../../../common/app-paths/directory-for-downloads/directory-for-downloads.injectable";
import getConfigurationFileModelInjectable
from "../../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable
from "../../../../common/get-configuration-file-model/app-version/app-version.injectable";
mockWindow();
@ -53,6 +57,12 @@ describe("Extensions", () => {
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
di.override(directoryForDownloadsInjectable, () => "some-directory-for-downloads");
// @ts-ignore
di.permitSideEffects(getConfigurationFileModelInjectable);
// @ts-ignore
di.permitSideEffects(appVersionInjectable);
mockFs({
"some-directory-for-user-data": {},
});

View File

@ -18,6 +18,10 @@ import type { DiRender } from "../../test-utils/renderFor";
import { renderFor } from "../../test-utils/renderFor";
import directoryForUserDataInjectable
from "../../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
import getConfigurationFileModelInjectable
from "../../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable
from "../../../../common/get-configuration-file-model/app-version/app-version.injectable";
jest.mock("electron", () => ({
app: {
@ -73,7 +77,6 @@ describe("<DockTabs />", () => {
beforeEach(async () => {
const di = getDiForUnitTesting({ doGeneralOverrides: true });
render = renderFor(di);
di.override(
@ -81,6 +84,12 @@ describe("<DockTabs />", () => {
() => "some-test-suite-specific-directory-for-user-data",
);
// @ts-ignore
di.permitSideEffects(getConfigurationFileModelInjectable);
// @ts-ignore
di.permitSideEffects(appVersionInjectable);
await di.runSetups();
dockStore = di.inject(dockStoreInjectable);

View File

@ -21,6 +21,10 @@ import { LogTabViewModel, LogTabViewModelDependencies } from "../logs-view-model
import type { TabId } from "../../dock/store";
import userEvent from "@testing-library/user-event";
import { SearchStore } from "../../../../search-store/search-store";
import getConfigurationFileModelInjectable
from "../../../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable
from "../../../../../common/get-configuration-file-model/app-version/app-version.injectable";
jest.mock("electron", () => ({
app: {
@ -131,6 +135,12 @@ describe("<LogResourceSelector />", () => {
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
di.override(callForLogsInjectable, () => () => Promise.resolve("some-logs"));
// @ts-ignore
di.permitSideEffects(getConfigurationFileModelInjectable);
// @ts-ignore
di.permitSideEffects(appVersionInjectable);
render = renderFor(di);
await di.runSetups();

View File

@ -10,13 +10,14 @@ import React from "react";
import type { DiContainer } from "@ogre-tools/injectable";
import { getDiForUnitTesting } from "../../../getDiForUnitTesting";
import { DiRender, renderFor } from "../../test-utils/renderFor";
import hotbarStoreInjectable from "../../../../common/hotbar-store.injectable";
import hotbarStoreInjectable, { HotbarStore } from "../../../../common/hotbar-store.injectable";
import { ThemeStore } from "../../../theme.store";
import { ConfirmDialog } from "../../confirm-dialog";
import type { HotbarStore } from "../../../../common/hotbar-store";
import { UserStore } from "../../../../common/user-store";
import mockFs from "mock-fs";
import directoryForUserDataInjectable from "../../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
import getConfigurationFileModelInjectable from "../../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable from "../../../../common/get-configuration-file-model/app-version/app-version.injectable";
const mockHotbars: { [id: string]: any } = {
"1": {
@ -44,6 +45,15 @@ describe("<HotbarRemoveCommand />", () => {
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
// @ts-ignore
di.permitSideEffects(hotbarStoreInjectable);
// @ts-ignore
di.permitSideEffects(getConfigurationFileModelInjectable);
// @ts-ignore
di.permitSideEffects(appVersionInjectable);
render = renderFor(di);
UserStore.createInstance();

View File

@ -16,6 +16,10 @@ import directoryForUserDataInjectable
import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable";
import { computed } from "mobx";
import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension";
import getConfigurationFileModelInjectable
from "../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
import appVersionInjectable
from "../../../common/get-configuration-file-model/app-version/app-version.injectable";
jest.mock("electron", () => ({
ipcRenderer: {
@ -38,6 +42,12 @@ describe("<Select />", () => {
di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data");
di.override(rendererExtensionsInjectable, () => computed(() => [] as LensRendererExtension[]));
// @ts-ignore
di.permitSideEffects(getConfigurationFileModelInjectable);
// @ts-ignore
di.permitSideEffects(appVersionInjectable);
UserStore.createInstance();
ThemeStore.createInstance();
});