diff --git a/src/common/__tests__/user-store.test.ts b/src/common/__tests__/user-store.test.ts index f27bddbbd2..c60f454bcd 100644 --- a/src/common/__tests__/user-store.test.ts +++ b/src/common/__tests__/user-store.test.ts @@ -34,7 +34,6 @@ import { getDiForUnitTesting } from "../../main/getDiForUnitTesting"; import getConfigurationFileModelInjectable from "../get-configuration-file-model/get-configuration-file-model.injectable"; import storeMigrationVersionInjectable from "../vars/store-migration-version.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); @@ -58,7 +57,6 @@ describe("user store tests", () => { get: () => "latest" as const, init: async () => {}, })); - await di.inject(defaultUpdateChannelInjectable).init(); di.unoverride(userStoreInjectable); }); diff --git a/src/common/app-paths/app-paths-channel.ts b/src/common/app-paths/app-paths-channel.ts index 4502569d3b..d266a0cb60 100644 --- a/src/common/app-paths/app-paths-channel.ts +++ b/src/common/app-paths/app-paths-channel.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * 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"; export type AppPathsChannel = RequestChannel; diff --git a/src/common/app-paths/channel.ts b/src/common/app-paths/channel.ts index fd11ad0dfb..622b56b3ef 100644 --- a/src/common/app-paths/channel.ts +++ b/src/common/app-paths/channel.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ 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; diff --git a/src/common/fs/read-json-file.injectable.ts b/src/common/fs/read-json-file.injectable.ts index d270368cf9..6f37d927a3 100644 --- a/src/common/fs/read-json-file.injectable.ts +++ b/src/common/fs/read-json-file.injectable.ts @@ -6,11 +6,11 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { JsonValue } from "type-fest"; import fsInjectable from "./fs.injectable"; -export type ReadJson = (filePath: string) => Promise; +export type ReadJsonFile = (filePath: string) => Promise; const readJsonFileInjectable = getInjectable({ id: "read-json-file", - instantiate: (di): ReadJson => di.inject(fsInjectable).readJson, + instantiate: (di): ReadJsonFile => di.inject(fsInjectable).readJson, }); export default readJsonFileInjectable; diff --git a/src/common/vars/release-channel.injectable.ts b/src/common/vars/release-channel.injectable.ts index 6554fbc0ac..a486585a06 100644 --- a/src/common/vars/release-channel.injectable.ts +++ b/src/common/vars/release-channel.injectable.ts @@ -2,11 +2,11 @@ * Copyright (c) OpenLens Authors. All rights reserved. * 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 type { ReleaseChannel } from "../../features/application-update/common/update-channels"; -const releaseChannelInjectable = createInitializableState({ +const releaseChannelInjectable = createLazyInitializableState({ id: "release-channel", init: (di): ReleaseChannel => { const buildSemanticVersion = di.inject(buildSemanticVersionInjectable); diff --git a/src/extensions/extension-discovery/extension-discovery.ts b/src/extensions/extension-discovery/extension-discovery.ts index 9c6842e67b..4460956729 100644 --- a/src/extensions/extension-discovery/extension-discovery.ts +++ b/src/extensions/extension-discovery/extension-discovery.ts @@ -15,7 +15,7 @@ import type { ExtensionInstallationStateStore } from "../extension-installation- import type { PackageJson } from "type-fest"; import { extensionDiscoveryStateChannel } from "../../common/ipc/extension-handling"; 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 { PathExists } from "../../common/fs/path-exists.injectable"; import type { Watch } from "../../common/fs/watch/watch.injectable"; @@ -47,7 +47,7 @@ interface Dependencies { isCompatibleExtension: (manifest: LensExtensionManifest) => boolean; installExtension: (name: string) => Promise; installExtensions: (packageJsonPath: string, packagesJson: PackageJson) => Promise; - readJsonFile: ReadJson; + readJsonFile: ReadJsonFile; pathExists: PathExists; removePath: RemovePath; lstat: LStat; diff --git a/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts b/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts index fab21df3cc..16ac84854e 100644 --- a/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts +++ b/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts @@ -11,13 +11,14 @@ import path from "path"; import { BaseStore } from "../../../common/base-store"; import type { LensExtensionId } from "../../lens-extension"; import { getOrInsertWith, toJS } from "../../../common/utils"; +import type { LazyInitializableState } from "../../../common/initializable-state/create-lazy"; interface FSProvisionModel { extensions: Record; // extension names to paths } interface Dependencies { - directoryForExtensionData: string; + readonly directoryForExtensionData: LazyInitializableState; } export class FileSystemProvisionerStore extends BaseStore { @@ -45,7 +46,7 @@ export class FileSystemProvisionerStore extends BaseStore { const salt = randomBytes(32).toString("hex"); 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); diff --git a/src/features/cluster/delete-dialog/delete-cluster-dialog.test.tsx b/src/features/cluster/delete-dialog/delete-cluster-dialog.test.tsx index c96f2714e1..fb1ff00755 100644 --- a/src/features/cluster/delete-dialog/delete-cluster-dialog.test.tsx +++ b/src/features/cluster/delete-dialog/delete-cluster-dialog.test.tsx @@ -17,7 +17,7 @@ import { type ApplicationBuilder, getApplicationBuilder } from "../../../rendere import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable"; import type { Cluster } from "../../../common/cluster/cluster"; 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"; const currentClusterServerUrl = "https://localhost"; @@ -212,7 +212,7 @@ describe("Deleting a cluster", () => { preferences: { clusterName: "some-cluster", }, - kubeConfigPath: joinPaths(directoryForKubeConfigs, "some-cluster.json"), + kubeConfigPath: joinPaths(directoryForKubeConfigs.get(), "some-cluster.json"), }, { clusterServerUrl: singleClusterServerUrl, }); diff --git a/src/features/cluster/delete-dialog/main/delete-channel-listener.injectable.ts b/src/features/cluster/delete-dialog/main/delete-channel-listener.injectable.ts index a2ede65ec0..abb9102f40 100644 --- a/src/features/cluster/delete-dialog/main/delete-channel-listener.injectable.ts +++ b/src/features/cluster/delete-dialog/main/delete-channel-listener.injectable.ts @@ -38,7 +38,7 @@ const deleteClusterChannelListenerInjectable = getRequestChannelListenerInjectab clusterStore.clusters.delete(cluster.id); // 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); }; diff --git a/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx b/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx index efe0cdf554..02ed57f6bd 100644 --- a/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx +++ b/src/features/cluster/namespaces/edit-namespace-from-new-tab.test.tsx @@ -45,10 +45,9 @@ describe("cluster/namespaces - edit namespace from new tab", () => { showErrorNotificationMock = jest.fn(); 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"); diff --git a/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx b/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx index a5f834563b..05e4558979 100644 --- a/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx +++ b/src/features/cluster/namespaces/edit-namespace-from-previously-opened-tab.test.tsx @@ -30,10 +30,9 @@ describe("cluster/namespaces - edit namespaces from previously opened tab", () = callForNamespaceMock = asyncFn(); 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"); diff --git a/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx b/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx index 519e6bb3c8..026e76adc2 100644 --- a/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx +++ b/src/features/cluster/sidebar-and-tab-navigation-for-core.test.tsx @@ -39,10 +39,9 @@ describe("cluster - sidebar and tab navigation for core", () => { builder.beforeWindowStart((windowDi) => { windowDi.override(storageSaveDelayInjectable, () => 250); - windowDi.override( - directoryForLensLocalStorageInjectable, - () => "/some-directory-for-lens-local-storage", - ); + windowDi.override(directoryForLensLocalStorageInjectable, () => ({ + get: () => "/some-directory-for-lens-local-storage", + })); }); }); diff --git a/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx b/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx index a228cc880e..279de90ee0 100644 --- a/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx +++ b/src/features/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx @@ -35,10 +35,9 @@ describe("cluster - sidebar and tab navigation for extensions", () => { applicationBuilder.beforeWindowStart((windowDi) => { windowDi.override(storageSaveDelayInjectable, () => 250); - windowDi.override( - directoryForLensLocalStorageInjectable, - () => "/some-directory-for-lens-local-storage", - ); + windowDi.override(directoryForLensLocalStorageInjectable, () => ({ + get: () => "/some-directory-for-lens-local-storage", + })); }); }); diff --git a/src/features/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts b/src/features/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts index 9d6c43790d..3f139ca14d 100644 --- a/src/features/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts +++ b/src/features/helm-charts/installing-chart/installing-helm-chart-from-new-tab.test.ts @@ -16,6 +16,7 @@ import currentPathInjectable from "../../../renderer/routes/current-path.injecta 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 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 type { DiContainer } from "@ogre-tools/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(); 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(requestHelmChartsInjectable, () => requestHelmChartsMock); 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", () => { let rendered: RenderResult; let windowDi: DiContainer; + let readJsonFile: ReadJsonFile; beforeEach(async () => { rendered = await builder.render(); windowDi = builder.applicationWindow.only.di; + readJsonFile = windowDi.inject(readJsonFileInjectable); const writeJsonFile = windowDi.inject(writeJsonFileInjectable); @@ -683,15 +688,15 @@ describe("installing helm chart from new tab", () => { }); 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( - "/some-directory-for-lens-local-storage/some-cluster-id.json", - ) as any; - - const version = actual.install_charts["some-first-tab-id"].version; - - expect(version).toBe("some-other-version"); + expect(actual).toMatchObject({ + install_charts: { + "some-first-tab-id": { + version: "some-other-version", + }, + }, + }); }); describe("when default configuration resolves", () => { @@ -760,15 +765,15 @@ describe("installing helm chart from new tab", () => { }); 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( - "/some-directory-for-lens-local-storage/some-cluster-id.json", - ) as any; - - const namespace = actual.install_charts["some-first-tab-id"].namespace; - - expect(namespace).toBe("some-other-namespace"); + expect(actual).toMatchObject({ + install_charts: { + "some-first-tab-id": { + namespace: "some-other-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 () => { - const readJsonFile = windowDi.inject(readJsonFileInjectable); + const actual = await readJsonFile("/some-directory-for-lens-local-storage/some-cluster-id.json"); - const actual = await readJsonFile( - "/some-directory-for-lens-local-storage/some-cluster-id.json", - ) as any; - - const configuration = actual.install_charts["some-first-tab-id"].values; - - expect(configuration).toBe("some-valid-configuration"); + expect(actual).toMatchObject({ + install_charts: { + "some-first-tab-id": { + values: "some-valid-configuration", + }, + }, + }); }); it("does not show spinner", () => { @@ -941,15 +946,15 @@ describe("installing helm chart from new tab", () => { }); 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( - "/some-directory-for-lens-local-storage/some-cluster-id.json", - ) as any; - - const customName = actual.install_charts["some-first-tab-id"].releaseName; - - expect(customName).toBe("some-custom-name"); + expect(actual).toMatchObject({ + install_charts: { + "some-first-tab-id": { + releaseName: "some-custom-name", + }, + }, + }); }); it("renders", () => { diff --git a/src/features/helm-charts/installing-chart/installing-helm-chart-from-previously-opened-tab.test.ts b/src/features/helm-charts/installing-chart/installing-helm-chart-from-previously-opened-tab.test.ts index 978e1635a7..c5109375e2 100644 --- a/src/features/helm-charts/installing-chart/installing-helm-chart-from-previously-opened-tab.test.ts +++ b/src/features/helm-charts/installing-chart/installing-helm-chart-from-previously-opened-tab.test.ts @@ -39,7 +39,9 @@ describe("installing helm chart from previously opened tab", () => { builder.beforeWindowStart((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(requestHelmChartVersionsInjectable, () => requestHelmChartVersionsMock); windowDi.override(requestHelmChartValuesInjectable, () => requestHelmChartValuesMock); diff --git a/src/features/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts b/src/features/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts index fa37f5d97f..10ec2ccdb9 100644 --- a/src/features/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts +++ b/src/features/helm-charts/installing-chart/opening-dock-tab-for-installing-helm-chart.test.ts @@ -39,7 +39,9 @@ describe("opening dock tab for installing helm chart", () => { requestHelmChartValuesMock = jest.fn(); 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(requestHelmChartsInjectable, () => requestHelmChartsMock); windowDi.override(requestHelmChartVersionsInjectable, () => requestHelmChartVersionsMock); diff --git a/src/main/catalog-sources/kubeconfig-sync/compute-diff.injectable.ts b/src/main/catalog-sources/kubeconfig-sync/compute-diff.injectable.ts index cb1e62e6e8..69ad3aacce 100644 --- a/src/main/catalog-sources/kubeconfig-sync/compute-diff.injectable.ts +++ b/src/main/catalog-sources/kubeconfig-sync/compute-diff.injectable.ts @@ -7,7 +7,7 @@ import { createHash } from "crypto"; import type { ObservableMap } from "mobx"; import { action } from "mobx"; 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 getClusterByIdInjectable from "../../../common/cluster-store/get-by-id.injectable"; import type { Cluster } from "../../../common/cluster/cluster"; @@ -79,7 +79,7 @@ const computeKubeconfigDiffInjectable = getInjectable({ const entity = catalogEntityFromCluster(cluster); - if (!filePath.startsWith(directoryForKubeConfigs)) { + if (!filePath.startsWith(directoryForKubeConfigs.get())) { entity.metadata.labels.file = filePath.replace(homedir(), "~"); } source.set(contextName, [cluster, entity]); diff --git a/src/main/shell-session/local-shell-session/local-shell-session.ts b/src/main/shell-session/local-shell-session/local-shell-session.ts index 49e6dd059f..90b6bdd52d 100644 --- a/src/main/shell-session/local-shell-session/local-shell-session.ts +++ b/src/main/shell-session/local-shell-session/local-shell-session.ts @@ -10,9 +10,10 @@ import type { ModifyTerminalShellEnv } from "../shell-env-modifier/modify-termin import type { JoinPaths } from "../../../common/path/join-paths.injectable"; import type { GetDirnameOfPath } from "../../../common/path/get-dirname.injectable"; import type { GetBasenameOfPath } from "../../../common/path/get-basename.injectable"; +import type { LazyInitializableState } from "../../../common/initializable-state/create-lazy"; export interface LocalShellSessionDependencies extends ShellSessionDependencies { - readonly directoryForBinaries: string; + readonly directoryForBinaries: LazyInitializableState; readonly userStore: UserStore; modifyTerminalShellEnv: ModifyTerminalShellEnv; joinPaths: JoinPaths; @@ -28,7 +29,7 @@ export class LocalShellSession extends ShellSession { } protected getPathEntries(): string[] { - return [this.dependencies.directoryForBinaries]; + return [this.dependencies.directoryForBinaries.get()]; } protected get cwd(): string | undefined { diff --git a/src/main/shell-session/local-shell-session/open.injectable.ts b/src/main/shell-session/local-shell-session/open.injectable.ts index 3e9a09405d..fb92c759b8 100644 --- a/src/main/shell-session/local-shell-session/open.injectable.ts +++ b/src/main/shell-session/local-shell-session/open.injectable.ts @@ -7,7 +7,7 @@ import type { LocalShellSessionDependencies } from "./local-shell-session"; import { LocalShellSession } from "./local-shell-session"; import createKubectlInjectable from "../../kubectl/create-kubectl.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 type { Cluster } from "../../../common/cluster/cluster"; import isWindowsInjectable from "../../../common/vars/is-windows.injectable"; diff --git a/src/main/shell-session/local-shell-session/techincal.test.ts b/src/main/shell-session/local-shell-session/techincal.test.ts index fbe2ccaea3..a5b5823de2 100644 --- a/src/main/shell-session/local-shell-session/techincal.test.ts +++ b/src/main/shell-session/local-shell-session/techincal.test.ts @@ -5,7 +5,7 @@ import type { DiContainer } from "@ogre-tools/injectable"; 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 platformInjectable from "../../../common/vars/platform.injectable"; import { getDiForUnitTesting } from "../../getDiForUnitTesting"; @@ -25,7 +25,9 @@ describe("technical unit tests for local shell sessions", () => { doGeneralOverrides: true, }); - di.override(directoryForUserDataInjectable, () => "/some-directory-for-user-data"); + di.override(directoryForUserDataInjectable, () => ({ + get: () => "/some-directory-for-user-data", + })); di.override(buildVersionInjectable, () => ({ get: () => "1.1.1", })); diff --git a/src/main/stores/init-user-store.injectable.ts b/src/main/stores/init-user-store.injectable.ts index c8d7ec9fe0..0038d29ad8 100644 --- a/src/main/stores/init-user-store.injectable.ts +++ b/src/main/stores/init-user-store.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import userStoreFileNameMigrationInjectable from "../../common/user-store/file-name-migration.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 initDefaultUpdateChannelInjectable from "../vars/default-update-channel/init.injectable"; +import initializeBuildVersionInjectable from "../vars/build-version/init.injectable"; const initUserStoreInjectable = getInjectable({ id: "init-user-store", @@ -20,7 +20,7 @@ const initUserStoreInjectable = getInjectable({ await userStoreFileNameMigration(); userStore.load(); }, - runAfter: di.inject(initDefaultUpdateChannelInjectable), + runAfter: di.inject(initializeBuildVersionInjectable), }; }, injectionToken: beforeApplicationIsLoadingInjectionToken, diff --git a/src/main/vars/release-channel/init.injectable.ts b/src/main/vars/release-channel/init.injectable.ts deleted file mode 100644 index 59527d2194..0000000000 --- a/src/main/vars/release-channel/init.injectable.ts +++ /dev/null @@ -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; diff --git a/src/renderer/components/+workloads-pods/__tests__/pod-tolerations.test.tsx b/src/renderer/components/+workloads-pods/__tests__/pod-tolerations.test.tsx index b0cacb8b4a..9f9a81dc0d 100644 --- a/src/renderer/components/+workloads-pods/__tests__/pod-tolerations.test.tsx +++ b/src/renderer/components/+workloads-pods/__tests__/pod-tolerations.test.tsx @@ -40,7 +40,9 @@ describe("", () => { beforeEach(() => { 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); }); diff --git a/src/renderer/components/dock/__test__/dock-tabs.test.tsx b/src/renderer/components/dock/__test__/dock-tabs.test.tsx index 1811417c98..0aaa5a7c7b 100644 --- a/src/renderer/components/dock/__test__/dock-tabs.test.tsx +++ b/src/renderer/components/dock/__test__/dock-tabs.test.tsx @@ -6,7 +6,6 @@ import React from "react"; import { fireEvent } from "@testing-library/react"; import "@testing-library/jest-dom/extend-expect"; -import fse from "fs-extra"; import { DockTabs } from "../dock-tabs"; import type { DockStore, DockTab } 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 { renderFor } from "../../test-utils/renderFor"; 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 hostedClusterIdInjectable from "../../../cluster-frame-context/hosted-cluster-id.injectable"; @@ -78,22 +76,15 @@ describe("", () => { di.override(hostedClusterIdInjectable, () => "some-cluster-id"); 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); await dockStore.whenReady; 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", () => { const { container } = render(getComponent(dockStore)); diff --git a/src/renderer/stores/init-user-store.injectable.ts b/src/renderer/stores/init-user-store.injectable.ts index 2c5b15dd1b..5cd86009e3 100644 --- a/src/renderer/stores/init-user-store.injectable.ts +++ b/src/renderer/stores/init-user-store.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import userStoreInjectable from "../../common/user-store/user-store.injectable"; 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({ id: "init-user-store", @@ -15,7 +15,7 @@ const initUserStoreInjectable = getInjectable({ return { id: "init-user-store", run: () => userStore.load(), - runAfter: di.inject(initDefaultUpdateChannelInjectable), + runAfter: di.inject(initializeBuildVersionInjectable), }; }, injectionToken: beforeFrameStartsInjectionToken, diff --git a/src/renderer/utils/create-storage/create-storage.ts b/src/renderer/utils/create-storage/create-storage.ts index 1149d479cc..4b38ff009b 100755 --- a/src/renderer/utils/create-storage/create-storage.ts +++ b/src/renderer/utils/create-storage/create-storage.ts @@ -11,11 +11,12 @@ import { StorageHelper } from "../storageHelper"; import type { JsonObject, JsonValue } from "type-fest"; import type { Logger } from "../../../common/logger"; import type { JoinPaths } from "../../../common/path/join-paths.injectable"; +import type { LazyInitializableState } from "../../../common/initializable-state/create-lazy"; interface Dependencies { storage: { initialized: boolean; loaded: boolean; data: Record }; logger: Logger; - directoryForLensLocalStorage: string; + directoryForLensLocalStorage: LazyInitializableState; readJsonFile: (filePath: string) => Promise; writeJsonFile: (filePath: string, contentObject: JsonObject) => Promise; joinPaths: JoinPaths; @@ -44,7 +45,7 @@ export const createStorage = ({ storage.initialized = true; (async () => { - const filePath = joinPaths(directoryForLensLocalStorage, `${hostedClusterId || "app"}.json`); + const filePath = joinPaths(directoryForLensLocalStorage.get(), `${hostedClusterId || "app"}.json`); try { storage.data = (await readJsonFile(filePath)) as JsonObject; diff --git a/src/renderer/vars/release-channel/init.injectable.ts b/src/renderer/vars/release-channel/init.injectable.ts deleted file mode 100644 index 14e92fccda..0000000000 --- a/src/renderer/vars/release-channel/init.injectable.ts +++ /dev/null @@ -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;