1
0
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:
Sebastian Malton 2022-10-03 14:08:40 -04:00
parent dbcef82ad2
commit 7b7d9d286d
27 changed files with 91 additions and 138 deletions

View File

@ -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);
}); });

View File

@ -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>;

View File

@ -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>;

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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,
}); });

View File

@ -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);
}; };

View File

@ -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");

View File

@ -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");

View File

@ -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", }));
);
}); });
}); });

View File

@ -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", }));
);
}); });
}); });

View File

@ -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", () => {

View File

@ -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);

View File

@ -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);

View File

@ -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]);

View File

@ -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 {

View File

@ -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";

View File

@ -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",
})); }));

View File

@ -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,

View File

@ -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;

View File

@ -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);
}); });

View File

@ -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));

View File

@ -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,

View File

@ -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;

View File

@ -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;