mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix usages of LazyInitializableState
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
dbcef82ad2
commit
7b7d9d286d
@ -34,7 +34,6 @@ import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
|
|||||||
import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable";
|
import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable";
|
||||||
import storeMigrationVersionInjectable from "../vars/store-migration-version.injectable";
|
import storeMigrationVersionInjectable from "../vars/store-migration-version.injectable";
|
||||||
import releaseChannelInjectable from "../vars/release-channel.injectable";
|
import releaseChannelInjectable from "../vars/release-channel.injectable";
|
||||||
import defaultUpdateChannelInjectable from "../../features/application-update/common/selected-update-channel/default-update-channel.injectable";
|
|
||||||
|
|
||||||
console = new Console(stdout, stderr);
|
console = new Console(stdout, stderr);
|
||||||
|
|
||||||
@ -58,7 +57,6 @@ describe("user store tests", () => {
|
|||||||
get: () => "latest" as const,
|
get: () => "latest" as const,
|
||||||
init: async () => {},
|
init: async () => {},
|
||||||
}));
|
}));
|
||||||
await di.inject(defaultUpdateChannelInjectable).init();
|
|
||||||
|
|
||||||
di.unoverride(userStoreInjectable);
|
di.unoverride(userStoreInjectable);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import type { AppPaths } from "./app-path-injection-token";
|
import type { AppPaths } from "./token";
|
||||||
import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token";
|
import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token";
|
||||||
|
|
||||||
export type AppPathsChannel = RequestChannel<void, AppPaths>;
|
export type AppPathsChannel = RequestChannel<void, AppPaths>;
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import type { AppPaths } from "./token";
|
import type { AppPaths } from "./token";
|
||||||
import type { RequestChannel } from "../utils/channel/request-channel-injection-token";
|
import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token";
|
||||||
|
|
||||||
export type AppPathsChannel = RequestChannel<void, AppPaths>;
|
export type AppPathsChannel = RequestChannel<void, AppPaths>;
|
||||||
|
|
||||||
|
|||||||
@ -6,11 +6,11 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import type { JsonValue } from "type-fest";
|
import type { JsonValue } from "type-fest";
|
||||||
import fsInjectable from "./fs.injectable";
|
import fsInjectable from "./fs.injectable";
|
||||||
|
|
||||||
export type ReadJson = (filePath: string) => Promise<JsonValue>;
|
export type ReadJsonFile = (filePath: string) => Promise<JsonValue>;
|
||||||
|
|
||||||
const readJsonFileInjectable = getInjectable({
|
const readJsonFileInjectable = getInjectable({
|
||||||
id: "read-json-file",
|
id: "read-json-file",
|
||||||
instantiate: (di): ReadJson => di.inject(fsInjectable).readJson,
|
instantiate: (di): ReadJsonFile => di.inject(fsInjectable).readJson,
|
||||||
});
|
});
|
||||||
|
|
||||||
export default readJsonFileInjectable;
|
export default readJsonFileInjectable;
|
||||||
|
|||||||
@ -2,11 +2,11 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
import { createInitializableState } from "../initializable-state/create";
|
import { createLazyInitializableState } from "../initializable-state/create-lazy";
|
||||||
import buildSemanticVersionInjectable from "./build-semantic-version.injectable";
|
import buildSemanticVersionInjectable from "./build-semantic-version.injectable";
|
||||||
import type { ReleaseChannel } from "../../features/application-update/common/update-channels";
|
import type { ReleaseChannel } from "../../features/application-update/common/update-channels";
|
||||||
|
|
||||||
const releaseChannelInjectable = createInitializableState({
|
const releaseChannelInjectable = createLazyInitializableState({
|
||||||
id: "release-channel",
|
id: "release-channel",
|
||||||
init: (di): ReleaseChannel => {
|
init: (di): ReleaseChannel => {
|
||||||
const buildSemanticVersion = di.inject(buildSemanticVersionInjectable);
|
const buildSemanticVersion = di.inject(buildSemanticVersionInjectable);
|
||||||
|
|||||||
@ -15,7 +15,7 @@ import type { ExtensionInstallationStateStore } from "../extension-installation-
|
|||||||
import type { PackageJson } from "type-fest";
|
import type { PackageJson } from "type-fest";
|
||||||
import { extensionDiscoveryStateChannel } from "../../common/ipc/extension-handling";
|
import { extensionDiscoveryStateChannel } from "../../common/ipc/extension-handling";
|
||||||
import { requestInitialExtensionDiscovery } from "../../renderer/ipc";
|
import { requestInitialExtensionDiscovery } from "../../renderer/ipc";
|
||||||
import type { ReadJson } from "../../common/fs/read-json-file.injectable";
|
import type { ReadJsonFile } from "../../common/fs/read-json-file.injectable";
|
||||||
import type { Logger } from "../../common/logger";
|
import type { Logger } from "../../common/logger";
|
||||||
import type { PathExists } from "../../common/fs/path-exists.injectable";
|
import type { PathExists } from "../../common/fs/path-exists.injectable";
|
||||||
import type { Watch } from "../../common/fs/watch/watch.injectable";
|
import type { Watch } from "../../common/fs/watch/watch.injectable";
|
||||||
@ -47,7 +47,7 @@ interface Dependencies {
|
|||||||
isCompatibleExtension: (manifest: LensExtensionManifest) => boolean;
|
isCompatibleExtension: (manifest: LensExtensionManifest) => boolean;
|
||||||
installExtension: (name: string) => Promise<void>;
|
installExtension: (name: string) => Promise<void>;
|
||||||
installExtensions: (packageJsonPath: string, packagesJson: PackageJson) => Promise<void>;
|
installExtensions: (packageJsonPath: string, packagesJson: PackageJson) => Promise<void>;
|
||||||
readJsonFile: ReadJson;
|
readJsonFile: ReadJsonFile;
|
||||||
pathExists: PathExists;
|
pathExists: PathExists;
|
||||||
removePath: RemovePath;
|
removePath: RemovePath;
|
||||||
lstat: LStat;
|
lstat: LStat;
|
||||||
|
|||||||
@ -11,13 +11,14 @@ import path from "path";
|
|||||||
import { BaseStore } from "../../../common/base-store";
|
import { BaseStore } from "../../../common/base-store";
|
||||||
import type { LensExtensionId } from "../../lens-extension";
|
import type { LensExtensionId } from "../../lens-extension";
|
||||||
import { getOrInsertWith, toJS } from "../../../common/utils";
|
import { getOrInsertWith, toJS } from "../../../common/utils";
|
||||||
|
import type { LazyInitializableState } from "../../../common/initializable-state/create-lazy";
|
||||||
|
|
||||||
interface FSProvisionModel {
|
interface FSProvisionModel {
|
||||||
extensions: Record<string, string>; // extension names to paths
|
extensions: Record<string, string>; // extension names to paths
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
directoryForExtensionData: string;
|
readonly directoryForExtensionData: LazyInitializableState<string>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class FileSystemProvisionerStore extends BaseStore<FSProvisionModel> {
|
export class FileSystemProvisionerStore extends BaseStore<FSProvisionModel> {
|
||||||
@ -45,7 +46,7 @@ export class FileSystemProvisionerStore extends BaseStore<FSProvisionModel> {
|
|||||||
const salt = randomBytes(32).toString("hex");
|
const salt = randomBytes(32).toString("hex");
|
||||||
const hashedName = SHA256(`${extensionName}/${salt}`).toString();
|
const hashedName = SHA256(`${extensionName}/${salt}`).toString();
|
||||||
|
|
||||||
return path.resolve(this.dependencies.directoryForExtensionData, hashedName);
|
return path.resolve(this.dependencies.directoryForExtensionData.get(), hashedName);
|
||||||
});
|
});
|
||||||
|
|
||||||
await fse.ensureDir(dirPath);
|
await fse.ensureDir(dirPath);
|
||||||
|
|||||||
@ -17,7 +17,7 @@ import { type ApplicationBuilder, getApplicationBuilder } from "../../../rendere
|
|||||||
import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable";
|
import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable";
|
||||||
import type { Cluster } from "../../../common/cluster/cluster";
|
import type { Cluster } from "../../../common/cluster/cluster";
|
||||||
import navigateToCatalogInjectable from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable";
|
import navigateToCatalogInjectable from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable";
|
||||||
import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
|
import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs.injectable";
|
||||||
import joinPathsInjectable from "../../../common/path/join-paths.injectable";
|
import joinPathsInjectable from "../../../common/path/join-paths.injectable";
|
||||||
|
|
||||||
const currentClusterServerUrl = "https://localhost";
|
const currentClusterServerUrl = "https://localhost";
|
||||||
@ -212,7 +212,7 @@ describe("Deleting a cluster", () => {
|
|||||||
preferences: {
|
preferences: {
|
||||||
clusterName: "some-cluster",
|
clusterName: "some-cluster",
|
||||||
},
|
},
|
||||||
kubeConfigPath: joinPaths(directoryForKubeConfigs, "some-cluster.json"),
|
kubeConfigPath: joinPaths(directoryForKubeConfigs.get(), "some-cluster.json"),
|
||||||
}, {
|
}, {
|
||||||
clusterServerUrl: singleClusterServerUrl,
|
clusterServerUrl: singleClusterServerUrl,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -38,7 +38,7 @@ const deleteClusterChannelListenerInjectable = getRequestChannelListenerInjectab
|
|||||||
clusterStore.clusters.delete(cluster.id);
|
clusterStore.clusters.delete(cluster.id);
|
||||||
|
|
||||||
// remove the local storage file
|
// remove the local storage file
|
||||||
const localStorageFilePath = joinPaths(directoryForLensLocalStorage, `${cluster.id}.json`);
|
const localStorageFilePath = joinPaths(directoryForLensLocalStorage.get(), `${cluster.id}.json`);
|
||||||
|
|
||||||
await deleteFile(localStorageFilePath).catch(noop);
|
await deleteFile(localStorageFilePath).catch(noop);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -45,10 +45,9 @@ describe("cluster/namespaces - edit namespace from new tab", () => {
|
|||||||
showErrorNotificationMock = jest.fn();
|
showErrorNotificationMock = jest.fn();
|
||||||
|
|
||||||
builder.beforeWindowStart((windowDi) => {
|
builder.beforeWindowStart((windowDi) => {
|
||||||
windowDi.override(
|
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
|
||||||
directoryForLensLocalStorageInjectable,
|
get: () => "/some-directory-for-lens-local-storage",
|
||||||
() => "/some-directory-for-lens-local-storage",
|
}));
|
||||||
);
|
|
||||||
|
|
||||||
windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
|
windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
|
||||||
|
|
||||||
|
|||||||
@ -30,10 +30,9 @@ describe("cluster/namespaces - edit namespaces from previously opened tab", () =
|
|||||||
callForNamespaceMock = asyncFn();
|
callForNamespaceMock = asyncFn();
|
||||||
|
|
||||||
builder.beforeWindowStart((windowDi) => {
|
builder.beforeWindowStart((windowDi) => {
|
||||||
windowDi.override(
|
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
|
||||||
directoryForLensLocalStorageInjectable,
|
get: () => "/some-directory-for-lens-local-storage",
|
||||||
() => "/some-directory-for-lens-local-storage",
|
}));
|
||||||
);
|
|
||||||
|
|
||||||
windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
|
windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
|
||||||
|
|
||||||
|
|||||||
@ -39,10 +39,9 @@ describe("cluster - sidebar and tab navigation for core", () => {
|
|||||||
builder.beforeWindowStart((windowDi) => {
|
builder.beforeWindowStart((windowDi) => {
|
||||||
windowDi.override(storageSaveDelayInjectable, () => 250);
|
windowDi.override(storageSaveDelayInjectable, () => 250);
|
||||||
|
|
||||||
windowDi.override(
|
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
|
||||||
directoryForLensLocalStorageInjectable,
|
get: () => "/some-directory-for-lens-local-storage",
|
||||||
() => "/some-directory-for-lens-local-storage",
|
}));
|
||||||
);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -35,10 +35,9 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
|
|||||||
applicationBuilder.beforeWindowStart((windowDi) => {
|
applicationBuilder.beforeWindowStart((windowDi) => {
|
||||||
windowDi.override(storageSaveDelayInjectable, () => 250);
|
windowDi.override(storageSaveDelayInjectable, () => 250);
|
||||||
|
|
||||||
windowDi.override(
|
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
|
||||||
directoryForLensLocalStorageInjectable,
|
get: () => "/some-directory-for-lens-local-storage",
|
||||||
() => "/some-directory-for-lens-local-storage",
|
}));
|
||||||
);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -16,6 +16,7 @@ import currentPathInjectable from "../../../renderer/routes/current-path.injecta
|
|||||||
import writeJsonFileInjectable from "../../../common/fs/write-json-file.injectable";
|
import writeJsonFileInjectable from "../../../common/fs/write-json-file.injectable";
|
||||||
import directoryForLensLocalStorageInjectable from "../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable";
|
import directoryForLensLocalStorageInjectable from "../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable";
|
||||||
import dockStoreInjectable from "../../../renderer/components/dock/dock/store.injectable";
|
import dockStoreInjectable from "../../../renderer/components/dock/dock/store.injectable";
|
||||||
|
import type { ReadJsonFile } from "../../../common/fs/read-json-file.injectable";
|
||||||
import readJsonFileInjectable from "../../../common/fs/read-json-file.injectable";
|
import readJsonFileInjectable from "../../../common/fs/read-json-file.injectable";
|
||||||
import type { DiContainer } from "@ogre-tools/injectable";
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
import type { RequestHelmCharts } from "../../../common/k8s-api/endpoints/helm-charts.api/request-charts.injectable";
|
import type { RequestHelmCharts } from "../../../common/k8s-api/endpoints/helm-charts.api/request-charts.injectable";
|
||||||
@ -51,7 +52,9 @@ describe("installing helm chart from new tab", () => {
|
|||||||
requestCreateHelmReleaseMock = asyncFn();
|
requestCreateHelmReleaseMock = asyncFn();
|
||||||
|
|
||||||
builder.beforeWindowStart((windowDi) => {
|
builder.beforeWindowStart((windowDi) => {
|
||||||
windowDi.override(directoryForLensLocalStorageInjectable, () => "/some-directory-for-lens-local-storage");
|
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
|
||||||
|
get: () => "/some-directory-for-lens-local-storage",
|
||||||
|
}));
|
||||||
windowDi.override(requestDetailedHelmReleaseInjectable, () => requestDetailedHelmReleaseMock);
|
windowDi.override(requestDetailedHelmReleaseInjectable, () => requestDetailedHelmReleaseMock);
|
||||||
windowDi.override(requestHelmChartsInjectable, () => requestHelmChartsMock);
|
windowDi.override(requestHelmChartsInjectable, () => requestHelmChartsMock);
|
||||||
windowDi.override(requestHelmChartVersionsInjectable, () => requestHelmChartVersionsMock);
|
windowDi.override(requestHelmChartVersionsInjectable, () => requestHelmChartVersionsMock);
|
||||||
@ -74,11 +77,13 @@ describe("installing helm chart from new tab", () => {
|
|||||||
describe("given tab for installing chart was not previously opened and application is started", () => {
|
describe("given tab for installing chart was not previously opened and application is started", () => {
|
||||||
let rendered: RenderResult;
|
let rendered: RenderResult;
|
||||||
let windowDi: DiContainer;
|
let windowDi: DiContainer;
|
||||||
|
let readJsonFile: ReadJsonFile;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
rendered = await builder.render();
|
rendered = await builder.render();
|
||||||
|
|
||||||
windowDi = builder.applicationWindow.only.di;
|
windowDi = builder.applicationWindow.only.di;
|
||||||
|
readJsonFile = windowDi.inject(readJsonFileInjectable);
|
||||||
|
|
||||||
const writeJsonFile = windowDi.inject(writeJsonFileInjectable);
|
const writeJsonFile = windowDi.inject(writeJsonFileInjectable);
|
||||||
|
|
||||||
@ -683,15 +688,15 @@ describe("installing helm chart from new tab", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("stores the selected version", async () => {
|
it("stores the selected version", async () => {
|
||||||
const readJsonFile = windowDi.inject(readJsonFileInjectable);
|
const actual = await readJsonFile("/some-directory-for-lens-local-storage/some-cluster-id.json");
|
||||||
|
|
||||||
const actual = await readJsonFile(
|
expect(actual).toMatchObject({
|
||||||
"/some-directory-for-lens-local-storage/some-cluster-id.json",
|
install_charts: {
|
||||||
) as any;
|
"some-first-tab-id": {
|
||||||
|
version: "some-other-version",
|
||||||
const version = actual.install_charts["some-first-tab-id"].version;
|
},
|
||||||
|
},
|
||||||
expect(version).toBe("some-other-version");
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when default configuration resolves", () => {
|
describe("when default configuration resolves", () => {
|
||||||
@ -760,15 +765,15 @@ describe("installing helm chart from new tab", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("stores the selected namespace", async () => {
|
it("stores the selected namespace", async () => {
|
||||||
const readJsonFile = windowDi.inject(readJsonFileInjectable);
|
const actual = await readJsonFile("/some-directory-for-lens-local-storage/some-cluster-id.json");
|
||||||
|
|
||||||
const actual = await readJsonFile(
|
expect(actual).toMatchObject({
|
||||||
"/some-directory-for-lens-local-storage/some-cluster-id.json",
|
install_charts: {
|
||||||
) as any;
|
"some-first-tab-id": {
|
||||||
|
namespace: "some-other-namespace",
|
||||||
const namespace = actual.install_charts["some-first-tab-id"].namespace;
|
},
|
||||||
|
},
|
||||||
expect(namespace).toBe("some-other-namespace");
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("when installing the chart, calls for installation with changed namespace", () => {
|
it("when installing the chart, calls for installation with changed namespace", () => {
|
||||||
@ -873,15 +878,15 @@ describe("installing helm chart from new tab", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("stores the changed configuration", async () => {
|
it("stores the changed configuration", async () => {
|
||||||
const readJsonFile = windowDi.inject(readJsonFileInjectable);
|
const actual = await readJsonFile("/some-directory-for-lens-local-storage/some-cluster-id.json");
|
||||||
|
|
||||||
const actual = await readJsonFile(
|
expect(actual).toMatchObject({
|
||||||
"/some-directory-for-lens-local-storage/some-cluster-id.json",
|
install_charts: {
|
||||||
) as any;
|
"some-first-tab-id": {
|
||||||
|
values: "some-valid-configuration",
|
||||||
const configuration = actual.install_charts["some-first-tab-id"].values;
|
},
|
||||||
|
},
|
||||||
expect(configuration).toBe("some-valid-configuration");
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("does not show spinner", () => {
|
it("does not show spinner", () => {
|
||||||
@ -941,15 +946,15 @@ describe("installing helm chart from new tab", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("stores the changed custom name", async () => {
|
it("stores the changed custom name", async () => {
|
||||||
const readJsonFile = windowDi.inject(readJsonFileInjectable);
|
const actual = await readJsonFile("/some-directory-for-lens-local-storage/some-cluster-id.json");
|
||||||
|
|
||||||
const actual = await readJsonFile(
|
expect(actual).toMatchObject({
|
||||||
"/some-directory-for-lens-local-storage/some-cluster-id.json",
|
install_charts: {
|
||||||
) as any;
|
"some-first-tab-id": {
|
||||||
|
releaseName: "some-custom-name",
|
||||||
const customName = actual.install_charts["some-first-tab-id"].releaseName;
|
},
|
||||||
|
},
|
||||||
expect(customName).toBe("some-custom-name");
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
it("renders", () => {
|
||||||
|
|||||||
@ -39,7 +39,9 @@ describe("installing helm chart from previously opened tab", () => {
|
|||||||
builder.beforeWindowStart((windowDi) => {
|
builder.beforeWindowStart((windowDi) => {
|
||||||
storagesAreReady = controlWhenStoragesAreReady(windowDi);
|
storagesAreReady = controlWhenStoragesAreReady(windowDi);
|
||||||
|
|
||||||
windowDi.override(directoryForLensLocalStorageInjectable, () => "/some-directory-for-lens-local-storage");
|
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
|
||||||
|
get: () => "/some-directory-for-lens-local-storage",
|
||||||
|
}));
|
||||||
windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
|
windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
|
||||||
windowDi.override(requestHelmChartVersionsInjectable, () => requestHelmChartVersionsMock);
|
windowDi.override(requestHelmChartVersionsInjectable, () => requestHelmChartVersionsMock);
|
||||||
windowDi.override(requestHelmChartValuesInjectable, () => requestHelmChartValuesMock);
|
windowDi.override(requestHelmChartValuesInjectable, () => requestHelmChartValuesMock);
|
||||||
|
|||||||
@ -39,7 +39,9 @@ describe("opening dock tab for installing helm chart", () => {
|
|||||||
requestHelmChartValuesMock = jest.fn();
|
requestHelmChartValuesMock = jest.fn();
|
||||||
|
|
||||||
builder.beforeWindowStart((windowDi) => {
|
builder.beforeWindowStart((windowDi) => {
|
||||||
windowDi.override(directoryForLensLocalStorageInjectable, () => "/some-directory-for-lens-local-storage");
|
windowDi.override(directoryForLensLocalStorageInjectable, () => ({
|
||||||
|
get: () => "/some-directory-for-lens-local-storage",
|
||||||
|
}));
|
||||||
windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
|
windowDi.override(hostedClusterIdInjectable, () => "some-cluster-id");
|
||||||
windowDi.override(requestHelmChartsInjectable, () => requestHelmChartsMock);
|
windowDi.override(requestHelmChartsInjectable, () => requestHelmChartsMock);
|
||||||
windowDi.override(requestHelmChartVersionsInjectable, () => requestHelmChartVersionsMock);
|
windowDi.override(requestHelmChartVersionsInjectable, () => requestHelmChartVersionsMock);
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import { createHash } from "crypto";
|
|||||||
import type { ObservableMap } from "mobx";
|
import type { ObservableMap } from "mobx";
|
||||||
import { action } from "mobx";
|
import { action } from "mobx";
|
||||||
import { homedir } from "os";
|
import { homedir } from "os";
|
||||||
import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
|
import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs.injectable";
|
||||||
import type { CatalogEntity } from "../../../common/catalog";
|
import type { CatalogEntity } from "../../../common/catalog";
|
||||||
import getClusterByIdInjectable from "../../../common/cluster-store/get-by-id.injectable";
|
import getClusterByIdInjectable from "../../../common/cluster-store/get-by-id.injectable";
|
||||||
import type { Cluster } from "../../../common/cluster/cluster";
|
import type { Cluster } from "../../../common/cluster/cluster";
|
||||||
@ -79,7 +79,7 @@ const computeKubeconfigDiffInjectable = getInjectable({
|
|||||||
|
|
||||||
const entity = catalogEntityFromCluster(cluster);
|
const entity = catalogEntityFromCluster(cluster);
|
||||||
|
|
||||||
if (!filePath.startsWith(directoryForKubeConfigs)) {
|
if (!filePath.startsWith(directoryForKubeConfigs.get())) {
|
||||||
entity.metadata.labels.file = filePath.replace(homedir(), "~");
|
entity.metadata.labels.file = filePath.replace(homedir(), "~");
|
||||||
}
|
}
|
||||||
source.set(contextName, [cluster, entity]);
|
source.set(contextName, [cluster, entity]);
|
||||||
|
|||||||
@ -10,9 +10,10 @@ import type { ModifyTerminalShellEnv } from "../shell-env-modifier/modify-termin
|
|||||||
import type { JoinPaths } from "../../../common/path/join-paths.injectable";
|
import type { JoinPaths } from "../../../common/path/join-paths.injectable";
|
||||||
import type { GetDirnameOfPath } from "../../../common/path/get-dirname.injectable";
|
import type { GetDirnameOfPath } from "../../../common/path/get-dirname.injectable";
|
||||||
import type { GetBasenameOfPath } from "../../../common/path/get-basename.injectable";
|
import type { GetBasenameOfPath } from "../../../common/path/get-basename.injectable";
|
||||||
|
import type { LazyInitializableState } from "../../../common/initializable-state/create-lazy";
|
||||||
|
|
||||||
export interface LocalShellSessionDependencies extends ShellSessionDependencies {
|
export interface LocalShellSessionDependencies extends ShellSessionDependencies {
|
||||||
readonly directoryForBinaries: string;
|
readonly directoryForBinaries: LazyInitializableState<string>;
|
||||||
readonly userStore: UserStore;
|
readonly userStore: UserStore;
|
||||||
modifyTerminalShellEnv: ModifyTerminalShellEnv;
|
modifyTerminalShellEnv: ModifyTerminalShellEnv;
|
||||||
joinPaths: JoinPaths;
|
joinPaths: JoinPaths;
|
||||||
@ -28,7 +29,7 @@ export class LocalShellSession extends ShellSession {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected getPathEntries(): string[] {
|
protected getPathEntries(): string[] {
|
||||||
return [this.dependencies.directoryForBinaries];
|
return [this.dependencies.directoryForBinaries.get()];
|
||||||
}
|
}
|
||||||
|
|
||||||
protected get cwd(): string | undefined {
|
protected get cwd(): string | undefined {
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import type { LocalShellSessionDependencies } from "./local-shell-session";
|
|||||||
import { LocalShellSession } from "./local-shell-session";
|
import { LocalShellSession } from "./local-shell-session";
|
||||||
import createKubectlInjectable from "../../kubectl/create-kubectl.injectable";
|
import createKubectlInjectable from "../../kubectl/create-kubectl.injectable";
|
||||||
import modifyTerminalShellEnvInjectable from "../shell-env-modifier/modify-terminal-shell-env.injectable";
|
import modifyTerminalShellEnvInjectable from "../shell-env-modifier/modify-terminal-shell-env.injectable";
|
||||||
import directoryForBinariesInjectable from "../../../common/app-paths/directory-for-binaries/directory-for-binaries.injectable";
|
import directoryForBinariesInjectable from "../../../common/app-paths/directory-for-binaries.injectable";
|
||||||
import isMacInjectable from "../../../common/vars/is-mac.injectable";
|
import isMacInjectable from "../../../common/vars/is-mac.injectable";
|
||||||
import type { Cluster } from "../../../common/cluster/cluster";
|
import type { Cluster } from "../../../common/cluster/cluster";
|
||||||
import isWindowsInjectable from "../../../common/vars/is-windows.injectable";
|
import isWindowsInjectable from "../../../common/vars/is-windows.injectable";
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import type { DiContainer } from "@ogre-tools/injectable";
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
import { WebSocket } from "ws";
|
import { WebSocket } from "ws";
|
||||||
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
|
import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data.injectable";
|
||||||
import type { Cluster } from "../../../common/cluster/cluster";
|
import type { Cluster } from "../../../common/cluster/cluster";
|
||||||
import platformInjectable from "../../../common/vars/platform.injectable";
|
import platformInjectable from "../../../common/vars/platform.injectable";
|
||||||
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
import { getDiForUnitTesting } from "../../getDiForUnitTesting";
|
||||||
@ -25,7 +25,9 @@ describe("technical unit tests for local shell sessions", () => {
|
|||||||
doGeneralOverrides: true,
|
doGeneralOverrides: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
di.override(directoryForUserDataInjectable, () => "/some-directory-for-user-data");
|
di.override(directoryForUserDataInjectable, () => ({
|
||||||
|
get: () => "/some-directory-for-user-data",
|
||||||
|
}));
|
||||||
di.override(buildVersionInjectable, () => ({
|
di.override(buildVersionInjectable, () => ({
|
||||||
get: () => "1.1.1",
|
get: () => "1.1.1",
|
||||||
}));
|
}));
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import userStoreFileNameMigrationInjectable from "../../common/user-store/file-name-migration.injectable";
|
import userStoreFileNameMigrationInjectable from "../../common/user-store/file-name-migration.injectable";
|
||||||
import userStoreInjectable from "../../common/user-store/user-store.injectable";
|
import userStoreInjectable from "../../common/user-store/user-store.injectable";
|
||||||
import { beforeApplicationIsLoadingInjectionToken } from "../start-main-application/runnable-tokens/before-application-is-loading-injection-token";
|
import { beforeApplicationIsLoadingInjectionToken } from "../start-main-application/runnable-tokens/before-application-is-loading-injection-token";
|
||||||
import initDefaultUpdateChannelInjectable from "../vars/default-update-channel/init.injectable";
|
import initializeBuildVersionInjectable from "../vars/build-version/init.injectable";
|
||||||
|
|
||||||
const initUserStoreInjectable = getInjectable({
|
const initUserStoreInjectable = getInjectable({
|
||||||
id: "init-user-store",
|
id: "init-user-store",
|
||||||
@ -20,7 +20,7 @@ const initUserStoreInjectable = getInjectable({
|
|||||||
await userStoreFileNameMigration();
|
await userStoreFileNameMigration();
|
||||||
userStore.load();
|
userStore.load();
|
||||||
},
|
},
|
||||||
runAfter: di.inject(initDefaultUpdateChannelInjectable),
|
runAfter: di.inject(initializeBuildVersionInjectable),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
injectionToken: beforeApplicationIsLoadingInjectionToken,
|
injectionToken: beforeApplicationIsLoadingInjectionToken,
|
||||||
|
|||||||
@ -1,24 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
|
||||||
import releaseChannelInjectable from "../../../common/vars/release-channel.injectable";
|
|
||||||
import { beforeApplicationIsLoadingInjectionToken } from "../../start-main-application/runnable-tokens/before-application-is-loading-injection-token";
|
|
||||||
import initSemanticBuildVersionInjectable from "../semantic-build-version/init.injectable";
|
|
||||||
|
|
||||||
const initReleaseChannelInjectable = getInjectable({
|
|
||||||
id: "init-release-channel",
|
|
||||||
instantiate: (di) => {
|
|
||||||
const releaseChannel = di.inject(releaseChannelInjectable);
|
|
||||||
|
|
||||||
return {
|
|
||||||
id: "init-release-channel",
|
|
||||||
run: () => releaseChannel.init(),
|
|
||||||
runAfter: di.inject(initSemanticBuildVersionInjectable),
|
|
||||||
};
|
|
||||||
},
|
|
||||||
injectionToken: beforeApplicationIsLoadingInjectionToken,
|
|
||||||
});
|
|
||||||
|
|
||||||
export default initReleaseChannelInjectable;
|
|
||||||
@ -40,7 +40,9 @@ describe("<PodTolerations />", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
const di = getDiForUnitTesting({ doGeneralOverrides: true });
|
const di = getDiForUnitTesting({ doGeneralOverrides: true });
|
||||||
|
|
||||||
di.override(directoryForLensLocalStorageInjectable, () => "some-directory-for-lens-local-storage" );
|
di.override(directoryForLensLocalStorageInjectable, () => ({
|
||||||
|
get: () => "some-directory-for-lens-local-storage",
|
||||||
|
}));
|
||||||
|
|
||||||
render = renderFor(di);
|
render = renderFor(di);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { fireEvent } from "@testing-library/react";
|
import { fireEvent } from "@testing-library/react";
|
||||||
import "@testing-library/jest-dom/extend-expect";
|
import "@testing-library/jest-dom/extend-expect";
|
||||||
import fse from "fs-extra";
|
|
||||||
import { DockTabs } from "../dock-tabs";
|
import { DockTabs } from "../dock-tabs";
|
||||||
import type { DockStore, DockTab } from "../dock/store";
|
import type { DockStore, DockTab } from "../dock/store";
|
||||||
import { TabKind } from "../dock/store";
|
import { TabKind } from "../dock/store";
|
||||||
@ -16,7 +15,6 @@ import dockStoreInjectable from "../dock/store.injectable";
|
|||||||
import type { DiRender } from "../../test-utils/renderFor";
|
import type { DiRender } from "../../test-utils/renderFor";
|
||||||
import { renderFor } from "../../test-utils/renderFor";
|
import { renderFor } from "../../test-utils/renderFor";
|
||||||
import directoryForUserDataInjectable from "../../../../common/app-paths/directory-for-user-data.injectable";
|
import directoryForUserDataInjectable from "../../../../common/app-paths/directory-for-user-data.injectable";
|
||||||
import getConfigurationFileModelInjectable from "../../../../common/get-configuration-file-model/get-configuration-file-model.injectable";
|
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import hostedClusterIdInjectable from "../../../cluster-frame-context/hosted-cluster-id.injectable";
|
import hostedClusterIdInjectable from "../../../cluster-frame-context/hosted-cluster-id.injectable";
|
||||||
|
|
||||||
@ -78,22 +76,15 @@ describe("<DockTabs />", () => {
|
|||||||
|
|
||||||
di.override(hostedClusterIdInjectable, () => "some-cluster-id");
|
di.override(hostedClusterIdInjectable, () => "some-cluster-id");
|
||||||
di.override(directoryForUserDataInjectable, () => ({
|
di.override(directoryForUserDataInjectable, () => ({
|
||||||
get: () => "some-test-suite-specific-directory-for-user-data",
|
get: () => "/some-test-suite-specific-directory-for-user-data",
|
||||||
}));
|
}));
|
||||||
|
|
||||||
di.permitSideEffects(getConfigurationFileModelInjectable);
|
|
||||||
|
|
||||||
dockStore = di.inject(dockStoreInjectable);
|
dockStore = di.inject(dockStoreInjectable);
|
||||||
|
|
||||||
await dockStore.whenReady;
|
await dockStore.whenReady;
|
||||||
dockStore.tabs = initialTabs;
|
dockStore.tabs = initialTabs;
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
// TODO: A unit test may not cause side effects. Here accessing file system is a side effect.
|
|
||||||
fse.remove("some-test-suite-specific-directory-for-user-data");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("renders w/o errors", () => {
|
it("renders w/o errors", () => {
|
||||||
const { container } = render(getComponent(dockStore));
|
const { container } = render(getComponent(dockStore));
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import userStoreInjectable from "../../common/user-store/user-store.injectable";
|
import userStoreInjectable from "../../common/user-store/user-store.injectable";
|
||||||
import { beforeFrameStartsInjectionToken } from "../before-frame-starts/before-frame-starts-injection-token";
|
import { beforeFrameStartsInjectionToken } from "../before-frame-starts/before-frame-starts-injection-token";
|
||||||
import initDefaultUpdateChannelInjectable from "../vars/default-update-channel/init.injectable";
|
import initializeBuildVersionInjectable from "../vars/build-version/init.injectable";
|
||||||
|
|
||||||
const initUserStoreInjectable = getInjectable({
|
const initUserStoreInjectable = getInjectable({
|
||||||
id: "init-user-store",
|
id: "init-user-store",
|
||||||
@ -15,7 +15,7 @@ const initUserStoreInjectable = getInjectable({
|
|||||||
return {
|
return {
|
||||||
id: "init-user-store",
|
id: "init-user-store",
|
||||||
run: () => userStore.load(),
|
run: () => userStore.load(),
|
||||||
runAfter: di.inject(initDefaultUpdateChannelInjectable),
|
runAfter: di.inject(initializeBuildVersionInjectable),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
injectionToken: beforeFrameStartsInjectionToken,
|
injectionToken: beforeFrameStartsInjectionToken,
|
||||||
|
|||||||
@ -11,11 +11,12 @@ import { StorageHelper } from "../storageHelper";
|
|||||||
import type { JsonObject, JsonValue } from "type-fest";
|
import type { JsonObject, JsonValue } from "type-fest";
|
||||||
import type { Logger } from "../../../common/logger";
|
import type { Logger } from "../../../common/logger";
|
||||||
import type { JoinPaths } from "../../../common/path/join-paths.injectable";
|
import type { JoinPaths } from "../../../common/path/join-paths.injectable";
|
||||||
|
import type { LazyInitializableState } from "../../../common/initializable-state/create-lazy";
|
||||||
|
|
||||||
interface Dependencies {
|
interface Dependencies {
|
||||||
storage: { initialized: boolean; loaded: boolean; data: Record<string, any> };
|
storage: { initialized: boolean; loaded: boolean; data: Record<string, any> };
|
||||||
logger: Logger;
|
logger: Logger;
|
||||||
directoryForLensLocalStorage: string;
|
directoryForLensLocalStorage: LazyInitializableState<string>;
|
||||||
readJsonFile: (filePath: string) => Promise<JsonValue>;
|
readJsonFile: (filePath: string) => Promise<JsonValue>;
|
||||||
writeJsonFile: (filePath: string, contentObject: JsonObject) => Promise<void>;
|
writeJsonFile: (filePath: string, contentObject: JsonObject) => Promise<void>;
|
||||||
joinPaths: JoinPaths;
|
joinPaths: JoinPaths;
|
||||||
@ -44,7 +45,7 @@ export const createStorage = ({
|
|||||||
storage.initialized = true;
|
storage.initialized = true;
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
const filePath = joinPaths(directoryForLensLocalStorage, `${hostedClusterId || "app"}.json`);
|
const filePath = joinPaths(directoryForLensLocalStorage.get(), `${hostedClusterId || "app"}.json`);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
storage.data = (await readJsonFile(filePath)) as JsonObject;
|
storage.data = (await readJsonFile(filePath)) as JsonObject;
|
||||||
|
|||||||
@ -1,24 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
|
||||||
import releaseChannelInjectable from "../../../common/vars/release-channel.injectable";
|
|
||||||
import { beforeFrameStartsInjectionToken } from "../../before-frame-starts/before-frame-starts-injection-token";
|
|
||||||
import initSemanticBuildVersionInjectable from "../semantic-build-version/init.injectable";
|
|
||||||
|
|
||||||
const initReleaseChannelInjectable = getInjectable({
|
|
||||||
id: "init-release-channel",
|
|
||||||
instantiate: (di) => {
|
|
||||||
const releaseChannel = di.inject(releaseChannelInjectable);
|
|
||||||
|
|
||||||
return {
|
|
||||||
id: "init-release-channel",
|
|
||||||
run: () => releaseChannel.init(),
|
|
||||||
runAfter: di.inject(initSemanticBuildVersionInjectable),
|
|
||||||
};
|
|
||||||
},
|
|
||||||
injectionToken: beforeFrameStartsInjectionToken,
|
|
||||||
});
|
|
||||||
|
|
||||||
export default initReleaseChannelInjectable;
|
|
||||||
Loading…
Reference in New Issue
Block a user