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

Add missing global overrides

Co-authored-by: Mikko Aspiala <mikko.aspiala@gmail.com>

Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
Janne Savolainen 2022-06-07 14:38:15 +03:00
parent 3468fc33b5
commit 506b61234f
No known key found for this signature in database
GPG Key ID: 8C6CFB2FFFE8F68A
5 changed files with 187 additions and 123 deletions

View File

@ -833,6 +833,9 @@ exports[`preferences - navigation to kubernetes preferences given in preferences
Helm Charts Helm Charts
</h2> </h2>
<div> <div>
<div
data-testid="helm-controls"
>
<div <div
class="flex gaps" class="flex gaps"
> >
@ -841,7 +844,7 @@ exports[`preferences - navigation to kubernetes preferences given in preferences
> >
<span <span
class="css-1f43avz-a11yText-A11yText" class="css-1f43avz-a11yText-A11yText"
id="react-select-HelmRepoSelect-live-region" id="react-select-selection-of-active-public-helm-repository-live-region"
/> />
<span <span
aria-atomic="false" aria-atomic="false"
@ -857,7 +860,7 @@ exports[`preferences - navigation to kubernetes preferences given in preferences
> >
<div <div
class="Select__placeholder css-14el2xx-placeholder" class="Select__placeholder css-14el2xx-placeholder"
id="react-select-HelmRepoSelect-placeholder" id="react-select-selection-of-active-public-helm-repository-placeholder"
> >
Repositories Repositories
</div> </div>
@ -867,7 +870,7 @@ exports[`preferences - navigation to kubernetes preferences given in preferences
> >
<input <input
aria-autocomplete="list" aria-autocomplete="list"
aria-describedby="react-select-HelmRepoSelect-placeholder" aria-describedby="react-select-selection-of-active-public-helm-repository-placeholder"
aria-expanded="false" aria-expanded="false"
aria-haspopup="true" aria-haspopup="true"
autocapitalize="none" autocapitalize="none"
@ -875,7 +878,7 @@ exports[`preferences - navigation to kubernetes preferences given in preferences
autocorrect="off" autocorrect="off"
class="Select__input" class="Select__input"
disabled="" disabled=""
id="HelmRepoSelect" id="selection-of-active-public-helm-repository"
role="combobox" role="combobox"
spellcheck="false" spellcheck="false"
style="opacity: 1; width: 100%; grid-area: 1 / 2; min-width: 2px; border: 0px; margin: 0px; outline: 0; padding: 0px;" style="opacity: 1; width: 100%; grid-area: 1 / 2; min-width: 2px; border: 0px; margin: 0px; outline: 0; padding: 0px;"
@ -927,6 +930,7 @@ exports[`preferences - navigation to kubernetes preferences given in preferences
</div> </div>
<button <button
class="Button primary" class="Button primary"
data-testid="add-custom-helm-repo-button"
type="button" type="button"
> >
Add Custom Helm Repo Add Custom Helm Repo
@ -940,9 +944,12 @@ exports[`preferences - navigation to kubernetes preferences given in preferences
> >
<div <div
class="Spinner singleColor center" class="Spinner singleColor center"
data-testid="helm-repositories-are-loading"
/> />
</div> </div>
</div> </div>
<div />
</div>
</div> </div>
</section> </section>
</section> </section>

View File

@ -5,6 +5,10 @@
import type { RenderResult } from "@testing-library/react"; import type { RenderResult } from "@testing-library/react";
import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
import callForPublicHelmRepositoriesInjectable
from "../../renderer/components/+preferences/kubernetes/helm-charts/activation-of-public-helm-repository/public-helm-repositories/call-for-public-helm-repositories.injectable";
import getActiveHelmRepositoriesInjectable
from "../../main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable";
describe("preferences - navigation to kubernetes preferences", () => { describe("preferences - navigation to kubernetes preferences", () => {
let applicationBuilder: ApplicationBuilder; let applicationBuilder: ApplicationBuilder;
@ -17,6 +21,15 @@ describe("preferences - navigation to kubernetes preferences", () => {
let rendered: RenderResult; let rendered: RenderResult;
beforeEach(async () => { beforeEach(async () => {
applicationBuilder.beforeApplicationStart(({ rendererDi, mainDi }) => {
rendererDi.override(callForPublicHelmRepositoriesInjectable, () => async () => []);
mainDi.override(
getActiveHelmRepositoriesInjectable,
() => async () => ({ callWasSuccessful: true, response: [] }),
);
});
applicationBuilder.beforeRender(() => { applicationBuilder.beforeRender(() => {
applicationBuilder.preferences.navigate(); applicationBuilder.preferences.navigate();
}); });

View File

@ -5,7 +5,7 @@
import glob from "glob"; import glob from "glob";
import { kebabCase, memoize, noop } from "lodash/fp"; import { kebabCase, memoize, noop } from "lodash/fp";
import type { DiContainer } from "@ogre-tools/injectable"; import type { DiContainer, Injectable } from "@ogre-tools/injectable";
import { createContainer } from "@ogre-tools/injectable"; import { createContainer } from "@ogre-tools/injectable";
import { Environments, setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import { Environments, setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
import appNameInjectable from "./app-paths/app-name/app-name.injectable"; import appNameInjectable from "./app-paths/app-name/app-name.injectable";
@ -86,6 +86,17 @@ import getRandomIdInjectable from "../common/utils/get-random-id.injectable";
import periodicalCheckForUpdatesInjectable from "./application-update/periodical-check-for-updates/periodical-check-for-updates.injectable"; import periodicalCheckForUpdatesInjectable from "./application-update/periodical-check-for-updates/periodical-check-for-updates.injectable";
import execFileInjectable from "../common/fs/exec-file.injectable"; import execFileInjectable from "../common/fs/exec-file.injectable";
import normalizedPlatformArchitectureInjectable from "../common/vars/normalized-platform-architecture.injectable"; import normalizedPlatformArchitectureInjectable from "../common/vars/normalized-platform-architecture.injectable";
import getHelmChartInjectable from "./helm/helm-service/get-helm-chart.injectable";
import getHelmChartValuesInjectable from "./helm/helm-service/get-helm-chart-values.injectable";
import listHelmChartsInjectable from "./helm/helm-service/list-helm-charts.injectable";
import deleteHelmReleaseInjectable from "./helm/helm-service/delete-helm-release.injectable";
import getHelmReleaseHistoryInjectable from "./helm/helm-service/get-helm-release-history.injectable";
import getHelmReleaseInjectable from "./helm/helm-service/get-helm-release.injectable";
import getHelmReleaseValuesInjectable from "./helm/helm-service/get-helm-release-values.injectable";
import installHelmChartInjectable from "./helm/helm-service/install-helm-chart.injectable";
import listHelmReleasesInjectable from "./helm/helm-service/list-helm-releases.injectable";
import rollbackHelmReleaseInjectable from "./helm/helm-service/rollback-helm-release.injectable";
import updateHelmReleaseInjectable from "./helm/helm-service/update-helm-release.injectable";
export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) { export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) {
const { const {
@ -136,6 +147,24 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {})
di.override(periodicalCheckForUpdatesInjectable, () => ({ start: () => {}, stop: () => {}, started: false })); di.override(periodicalCheckForUpdatesInjectable, () => ({ start: () => {}, stop: () => {}, started: false }));
overrideFunctionalInjectables(di, [
getHelmChartInjectable,
getHelmChartValuesInjectable,
listHelmChartsInjectable,
deleteHelmReleaseInjectable,
getHelmReleaseHistoryInjectable,
getHelmReleaseInjectable,
getHelmReleaseValuesInjectable,
installHelmChartInjectable,
listHelmReleasesInjectable,
rollbackHelmReleaseInjectable,
updateHelmReleaseInjectable,
writeJsonFileInjectable,
readJsonFileInjectable,
readFileInjectable,
execFileInjectable,
]);
// TODO: Remove usages of globally exported appEventBus to get rid of this // TODO: Remove usages of globally exported appEventBus to get rid of this
di.override(appEventBusInjectable, () => new EventEmitter<[AppEvent]>()); di.override(appEventBusInjectable, () => new EventEmitter<[AppEvent]>());
@ -152,23 +181,6 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {})
} as never; } as never;
}); });
di.override(writeJsonFileInjectable, () => () => {
throw new Error("Tried to write JSON file to file system without specifying explicit override.");
});
di.override(readJsonFileInjectable, () => () => {
throw new Error("Tried to read JSON file from file system without specifying explicit override.");
});
di.override(readFileInjectable, () => () => {
throw new Error("Tried to read file from file system without specifying explicit override.");
});
di.override(execFileInjectable, () => () => {
throw new Error("Tried to exec file from file system without specifying explicit override.");
});
di.override(loggerInjectable, () => ({ di.override(loggerInjectable, () => ({
warn: noop, warn: noop,
debug: noop, debug: noop,
@ -265,3 +277,11 @@ const overrideElectronFeatures = (di: DiContainer) => {
di.override(publishIsConfiguredInjectable, () => false); di.override(publishIsConfiguredInjectable, () => false);
di.override(electronUpdaterIsActiveInjectable, () => false); di.override(electronUpdaterIsActiveInjectable, () => false);
}; };
const overrideFunctionalInjectables = (di: DiContainer, injectables: Injectable<any, any, any>[]) => {
injectables.forEach(injectable => {
di.override(injectable, () => () => {
throw new Error(`Tried to run "${injectable.id}" without explicit override.`);
});
});
};

View File

@ -6,12 +6,14 @@
import { getDiForUnitTesting } from "../../getDiForUnitTesting"; import { getDiForUnitTesting } from "../../getDiForUnitTesting";
import listHelmChartsInjectable from "../helm-service/list-helm-charts.injectable"; import listHelmChartsInjectable from "../helm-service/list-helm-charts.injectable";
import getActiveHelmRepositoriesInjectable from "../repositories/get-active-helm-repositories/get-active-helm-repositories.injectable"; import getActiveHelmRepositoriesInjectable from "../repositories/get-active-helm-repositories/get-active-helm-repositories.injectable";
import type { AsyncResult } from "../../../common/utils/async-result";
import type { HelmRepo } from "../../../common/helm-repo";
jest.mock("../helm-chart-manager"); jest.mock("../helm-chart-manager");
describe("Helm Service tests", () => { describe("Helm Service tests", () => {
let listHelmCharts: () => Promise<any>; let listHelmCharts: () => Promise<any>;
let getActiveHelmRepositoriesMock: jest.Mock; let getActiveHelmRepositoriesMock: jest.Mock<Promise<AsyncResult<HelmRepo[]>>>;
beforeEach(() => { beforeEach(() => {
const di = getDiForUnitTesting({ doGeneralOverrides: true }); const di = getDiForUnitTesting({ doGeneralOverrides: true });
@ -20,6 +22,7 @@ describe("Helm Service tests", () => {
di.override(getActiveHelmRepositoriesInjectable, () => getActiveHelmRepositoriesMock); di.override(getActiveHelmRepositoriesInjectable, () => getActiveHelmRepositoriesMock);
di.unoverride(listHelmChartsInjectable);
di.permitSideEffects(listHelmChartsInjectable); di.permitSideEffects(listHelmChartsInjectable);
listHelmCharts = di.inject(listHelmChartsInjectable); listHelmCharts = di.inject(listHelmChartsInjectable);
@ -30,10 +33,16 @@ describe("Helm Service tests", () => {
}); });
it("list charts with deprecated entries", async () => { it("list charts with deprecated entries", async () => {
getActiveHelmRepositoriesMock.mockReturnValue([ getActiveHelmRepositoriesMock.mockReturnValue(
Promise.resolve({
callWasSuccessful: true,
response: [
{ name: "stable", url: "stableurl" }, { name: "stable", url: "stableurl" },
{ name: "experiment", url: "experimenturl" }, { name: "experiment", url: "experimenturl" },
] as any); ],
}),
);
const charts = await listHelmCharts(); const charts = await listHelmCharts();
@ -135,9 +144,12 @@ describe("Helm Service tests", () => {
}); });
it("list charts sorted by version in descending order", async () => { it("list charts sorted by version in descending order", async () => {
getActiveHelmRepositoriesMock.mockReturnValue([ getActiveHelmRepositoriesMock.mockReturnValue(
{ name: "bitnami", url: "bitnamiurl" }, Promise.resolve({
] as any); callWasSuccessful: true,
response: [{ name: "bitnami", url: "bitnamiurl" }],
}),
);
const charts = await listHelmCharts(); const charts = await listHelmCharts();

View File

@ -5,7 +5,12 @@
import glob from "glob"; import glob from "glob";
import { memoize, noop } from "lodash/fp"; import { memoize, noop } from "lodash/fp";
import { createContainer } from "@ogre-tools/injectable"; import type {
DiContainer,
Injectable } from "@ogre-tools/injectable";
import {
createContainer,
} from "@ogre-tools/injectable";
import { Environments, setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import { Environments, setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
import requestFromChannelInjectable from "./utils/channel/request-from-channel.injectable"; import requestFromChannelInjectable from "./utils/channel/request-from-channel.injectable";
import loggerInjectable from "../common/logger.injectable"; import loggerInjectable from "../common/logger.injectable";
@ -46,6 +51,7 @@ import provideInitialValuesForSyncBoxesInjectable from "./utils/sync-box/provide
import requestAnimationFrameInjectable from "./components/animate/request-animation-frame.injectable"; import requestAnimationFrameInjectable from "./components/animate/request-animation-frame.injectable";
import getRandomIdInjectable from "../common/utils/get-random-id.injectable"; import getRandomIdInjectable from "../common/utils/get-random-id.injectable";
import getFilePathsInjectable from "./components/+preferences/kubernetes/helm-charts/activation-of-custom-helm-repository/helm-file-input/get-file-paths.injectable"; import getFilePathsInjectable from "./components/+preferences/kubernetes/helm-charts/activation-of-custom-helm-repository/helm-file-input/get-file-paths.injectable";
import callForPublicHelmRepositoriesInjectable from "./components/+preferences/kubernetes/helm-charts/activation-of-public-helm-repository/public-helm-repositories/call-for-public-helm-repositories.injectable";
export const getDiForUnitTesting = (opts: { doGeneralOverrides?: boolean } = {}) => { export const getDiForUnitTesting = (opts: { doGeneralOverrides?: boolean } = {}) => {
const { const {
@ -92,13 +98,11 @@ export const getDiForUnitTesting = (opts: { doGeneralOverrides?: boolean } = {})
on: () => {}, on: () => {},
}) as unknown as IpcRenderer); }) as unknown as IpcRenderer);
di.override(broadcastMessageInjectable, () => () => { overrideFunctionalInjectables(di, [
throw new Error("Tried to broadcast message over IPC without explicit override."); broadcastMessageInjectable,
}); getFilePathsInjectable,
callForPublicHelmRepositoriesInjectable,
di.override(getFilePathsInjectable, () => () => { ]);
throw new Error("Tried to get file paths without explicit override.");
});
// eslint-disable-next-line unused-imports/no-unused-vars-ts // eslint-disable-next-line unused-imports/no-unused-vars-ts
di.override(extensionsStoreInjectable, () => ({ isEnabled: ({ id, isBundled }) => false }) as ExtensionsStore); di.override(extensionsStoreInjectable, () => ({ isEnabled: ({ id, isBundled }) => false }) as ExtensionsStore);
@ -152,3 +156,11 @@ const getInjectableFilePaths = memoize(() => [
...glob.sync("../common/**/*.injectable.{ts,tsx}", { cwd: __dirname }), ...glob.sync("../common/**/*.injectable.{ts,tsx}", { cwd: __dirname }),
...glob.sync("../extensions/**/*.injectable.{ts,tsx}", { cwd: __dirname }), ...glob.sync("../extensions/**/*.injectable.{ts,tsx}", { cwd: __dirname }),
]); ]);
const overrideFunctionalInjectables = (di: DiContainer, injectables: Injectable<any, any, any>[]) => {
injectables.forEach(injectable => {
di.override(injectable, () => () => {
throw new Error(`Tried to run "${injectable.id}" without explicit override.`);
});
});
};