diff --git a/src/extensions/extension-discovery/extension-discovery.injectable.ts b/src/extensions/extension-discovery/extension-discovery.injectable.ts index a2bb9d3944..09d0f3b0ae 100644 --- a/src/extensions/extension-discovery/extension-discovery.injectable.ts +++ b/src/extensions/extension-discovery/extension-discovery.injectable.ts @@ -28,6 +28,7 @@ import getDirnameOfPathInjectable from "../../common/path/get-dirname.injectable import getRelativePathInjectable from "../../common/path/get-relative-path.injectable"; import joinPathsInjectable from "../../common/path/join-paths.injectable"; import removePathInjectable from "../../common/fs/remove-path.injectable"; +import homeDirectoryPathInjectable from "../../common/os/home-directory-path.injectable"; const extensionDiscoveryInjectable = getInjectable({ id: "extension-discovery", @@ -57,6 +58,7 @@ const extensionDiscoveryInjectable = getInjectable({ getDirnameOfPath: di.inject(getDirnameOfPathInjectable), getRelativePath: di.inject(getRelativePathInjectable), joinPaths: di.inject(joinPathsInjectable), + homeDirectoryPath: di.inject(homeDirectoryPathInjectable), }), }); diff --git a/src/extensions/extension-discovery/extension-discovery.test.ts b/src/extensions/extension-discovery/extension-discovery.test.ts index 51d7b0940f..9a549e4e71 100644 --- a/src/extensions/extension-discovery/extension-discovery.test.ts +++ b/src/extensions/extension-discovery/extension-discovery.test.ts @@ -4,8 +4,6 @@ */ import type { FSWatcher } from "chokidar"; -import path from "path"; -import os from "os"; import { getDiForUnitTesting } from "../../main/getDiForUnitTesting"; import extensionDiscoveryInjectable from "../extension-discovery/extension-discovery.injectable"; import type { ExtensionDiscovery } from "../extension-discovery/extension-discovery"; @@ -18,20 +16,28 @@ import pathExistsInjectable from "../../common/fs/path-exists.injectable"; import watchInjectable from "../../common/fs/watch/watch.injectable"; import extensionApiVersionInjectable from "../../common/vars/extension-api-version.injectable"; import removePathInjectable from "../../common/fs/remove-path.injectable"; +import type { JoinPaths } from "../../common/path/join-paths.injectable"; +import joinPathsInjectable from "../../common/path/join-paths.injectable"; +import homeDirectoryPathInjectable from "../../common/os/home-directory-path.injectable"; describe("ExtensionDiscovery", () => { let extensionDiscovery: ExtensionDiscovery; let readJsonFileMock: jest.Mock; let pathExistsMock: jest.Mock; let watchMock: jest.Mock; + let joinPaths: JoinPaths; + let homeDirectoryPath: string; beforeEach(() => { const di = getDiForUnitTesting({ doGeneralOverrides: true }); - di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data"); + di.override(directoryForUserDataInjectable, () => "/some-directory-for-user-data"); di.override(installExtensionInjectable, () => () => Promise.resolve()); di.override(extensionApiVersionInjectable, () => "5.0.0"); + joinPaths = di.inject(joinPathsInjectable); + homeDirectoryPath = di.inject(homeDirectoryPathInjectable); + readJsonFileMock = jest.fn(); di.override(readJsonFileInjectable, () => readJsonFileMock); @@ -51,7 +57,7 @@ describe("ExtensionDiscovery", () => { let addHandler!: (filePath: string) => void; readJsonFileMock.mockImplementation((p) => { - expect(p).toBe(path.join(os.homedir(), ".k8slens/extensions/my-extension/package.json")); + expect(p).toBe(joinPaths(homeDirectoryPath, ".k8slens/extensions/my-extension/package.json")); return { name: "my-extension", @@ -82,7 +88,7 @@ describe("ExtensionDiscovery", () => { extensionDiscovery.events.on("add", extension => { expect(extension).toEqual({ absolutePath: expect.any(String), - id: path.normalize("some-directory-for-user-data/node_modules/my-extension/package.json"), + id: "/some-directory-for-user-data/node_modules/my-extension/package.json", isBundled: false, isEnabled: false, isCompatible: true, @@ -93,12 +99,12 @@ describe("ExtensionDiscovery", () => { lens: "5.0.0", }, }, - manifestPath: path.normalize("some-directory-for-user-data/node_modules/my-extension/package.json"), + manifestPath: "/some-directory-for-user-data/node_modules/my-extension/package.json", }); letTestFinish.set(true); }); - addHandler(path.join(extensionDiscovery.localFolderPath, "/my-extension/package.json")); + addHandler(joinPaths(extensionDiscovery.localFolderPath, "/my-extension/package.json")); await when(() => letTestFinish.get()); }); @@ -126,7 +132,7 @@ describe("ExtensionDiscovery", () => { extensionDiscovery.events.on("add", onAdd); - addHandler(path.join(extensionDiscovery.localFolderPath, "/my-extension/node_modules/dep/package.json")); + addHandler(joinPaths(extensionDiscovery.localFolderPath, "/my-extension/node_modules/dep/package.json")); await delay(10); diff --git a/src/extensions/extension-discovery/extension-discovery.ts b/src/extensions/extension-discovery/extension-discovery.ts index ab54ba842a..63a4f78f09 100644 --- a/src/extensions/extension-discovery/extension-discovery.ts +++ b/src/extensions/extension-discovery/extension-discovery.ts @@ -6,7 +6,6 @@ import { ipcRenderer } from "electron"; import { EventEmitter } from "events"; import { makeObservable, observable, reaction, when } from "mobx"; -import os from "os"; import { broadcastMessage, ipcMainHandle, ipcRendererOn } from "../../common/ipc"; import { isErrnoException, toJS } from "../../common/utils"; import type { ExtensionsStore } from "../extensions-store/extensions-store"; @@ -42,6 +41,7 @@ interface Dependencies { readonly logger: Logger; readonly isProduction: boolean; readonly fileSystemSeparator: string; + readonly homeDirectoryPath: string; isCompatibleExtension: (manifest: LensExtensionManifest) => boolean; installExtension: (name: string) => Promise; installExtensions: (packageJsonPath: string, packagesJson: PackageJson) => Promise; @@ -124,7 +124,7 @@ export class ExtensionDiscovery { } get localFolderPath(): string { - return this.dependencies.joinPaths(os.homedir(), ".k8slens", "extensions"); + return this.dependencies.joinPaths(this.dependencies.homeDirectoryPath, ".k8slens", "extensions"); } get packageJsonPath(): string { 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 1742dadb6f..a65d19b052 100644 --- a/src/features/cluster/delete-dialog/delete-cluster-dialog.test.tsx +++ b/src/features/cluster/delete-dialog/delete-cluster-dialog.test.tsx @@ -18,8 +18,8 @@ import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-c import type { Cluster } from "../../../common/cluster/cluster"; import navigateToCatalogInjectable from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable"; import appEventBusInjectable from "../../../common/app-event-bus/app-event-bus.injectable"; -import path from "path"; import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable"; +import joinPathsInjectable from "../../../common/path/join-paths.injectable"; const currentClusterServerUrl = "https://localhost"; const nonCurrentClusterServerUrl = "http://localhost"; @@ -208,6 +208,7 @@ describe("Deleting a cluster", () => { config.loadFromString(singleClusterConfig); const directoryForKubeConfigs = builder.applicationWindow.only.di.inject(directoryForKubeConfigsInjectable); + const joinPaths = builder.applicationWindow.only.di.inject(joinPathsInjectable); currentCluster = createCluster({ id: "some-cluster", @@ -215,7 +216,7 @@ describe("Deleting a cluster", () => { preferences: { clusterName: "some-cluster", }, - kubeConfigPath: path.join(directoryForKubeConfigs, "some-cluster.json"), + kubeConfigPath: joinPaths(directoryForKubeConfigs, "some-cluster.json"), }, { clusterServerUrl: singleClusterServerUrl, });