diff --git a/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx b/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx index 273a19840c..b957bf3998 100644 --- a/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx +++ b/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx @@ -7,7 +7,6 @@ import type { RenderResult } from "@testing-library/react"; import { fireEvent } from "@testing-library/react"; import { getRendererExtensionFake } from "../../renderer/components/test-utils/get-renderer-extension-fake"; import type { LensRendererExtension } from "../../extensions/lens-renderer-extension"; -import directoryForLensLocalStorageInjectable from "../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable"; import routesInjectable from "../../renderer/routes/routes.injectable"; import { matches } from "lodash/fp"; import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; @@ -30,13 +29,6 @@ describe("cluster - sidebar and tab navigation for extensions", () => { rendererDi = applicationBuilder.dis.rendererDi; applicationBuilder.setEnvironmentToClusterFrame(); - - applicationBuilder.beforeSetups(({ rendererDi }) => { - rendererDi.override( - directoryForLensLocalStorageInjectable, - () => "/some-directory-for-lens-local-storage", - ); - }); }); describe("given extension with cluster pages and cluster page menus", () => { diff --git a/src/main/getDiForUnitTesting.ts b/src/main/getDiForUnitTesting.ts index 58d73878aa..10900e8e80 100644 --- a/src/main/getDiForUnitTesting.ts +++ b/src/main/getDiForUnitTesting.ts @@ -12,9 +12,6 @@ import getElectronAppPathInjectable from "./app-paths/get-electron-app-path/get- import setElectronAppPathInjectable from "./app-paths/set-electron-app-path/set-electron-app-path.injectable"; import appNameInjectable from "./app-paths/app-name/app-name.injectable"; import registerChannelInjectable from "./app-paths/register-channel/register-channel.injectable"; -import writeJsonFileInjectable from "../common/fs/write-json-file.injectable"; -import readJsonFileInjectable from "../common/fs/read-json-file.injectable"; -import readFileInjectable from "../common/fs/read-file.injectable"; import directoryForBundledBinariesInjectable from "../common/app-paths/directory-for-bundled-binaries/directory-for-bundled-binaries.injectable"; import spawnInjectable from "./child-process/spawn.injectable"; import extensionsStoreInjectable from "../extensions/extensions-store/extensions-store.injectable"; @@ -35,10 +32,19 @@ import joinPathsInjectable from "../common/path/join-paths.injectable"; import { joinPathsFake } from "../common/test-utils/join-paths-fake"; import hotbarStoreInjectable from "../common/hotbar-store.injectable"; import loggerInjectable from "./logger/logger.injectable"; +import type { Volume } from "memfs/lib/volume"; +import { overrideFsWithFakes } from "../test-utils/override-fs-with-fakes"; -export const getDiForUnitTesting = ( - { doGeneralOverrides } = { doGeneralOverrides: false }, -) => { +export interface GetDiForUnitTestingOptions { + doGeneralOverrides?: boolean; + memFsVolume?: Volume; +} + +export function getDiForUnitTesting(opts?: GetDiForUnitTestingOptions) { + const { + doGeneralOverrides = false, + memFsVolume, + } = opts ?? {}; const di = createContainer(); setLegacyGlobalDiForExtensionApi(di, Environments.main); @@ -92,17 +98,7 @@ export const getDiForUnitTesting = ( } as any; }); - di.override(writeJsonFileInjectable, () => () => { - throw new Error("Tried to write JSON file to file system without specifying explicit override."); - }); - - di.override(readJsonFileInjectable, () => () => { - throw new Error("Tried to read JSON file from file system without specifying explicit override."); - }); - - di.override(readFileInjectable, () => () => { - throw new Error("Tried to read file from file system without specifying explicit override."); - }); + overrideFsWithFakes(di, memFsVolume); di.override(loggerInjectable, () => ({ warn: noop, @@ -113,7 +109,7 @@ export const getDiForUnitTesting = ( } return di; -}; +} const getInjectableFilePaths = memoize(() => [ ...glob.sync("./**/*.injectable.{ts,tsx}", { cwd: __dirname }), diff --git a/src/renderer/components/test-utils/get-application-builder.tsx b/src/renderer/components/test-utils/get-application-builder.tsx index 042dfc6835..2ac9a5de3e 100644 --- a/src/renderer/components/test-utils/get-application-builder.tsx +++ b/src/renderer/components/test-utils/get-application-builder.tsx @@ -118,8 +118,9 @@ export const getApplicationBuilder = () => { let environment = environments.application; - rendererDi.override( currentlyInClusterFrameInjectable, () => environment === environments.clusterFrame); + rendererDi.override(currentlyInClusterFrameInjectable, () => environment === environments.clusterFrame); rendererDi.override(rendererExtensionsInjectable, () => computed(() => extensionsState)); + rendererDi.override(directoryForLensLocalStorageInjectable, () => "/some-directory-for-lens-local-storage"); mainDi.override(mainExtensionsInjectable, () => computed((): LensMainExtension[] => [])); mainDi.override(exitAppInjectable, () => exit); @@ -204,11 +205,6 @@ export const getApplicationBuilder = () => { computed(() => new Set([...allowedResourcesState])), ); - rendererDi.override( - directoryForLensLocalStorageInjectable, - () => "/irrelevant", - ); - return builder; }, diff --git a/src/renderer/getDiForUnitTesting.tsx b/src/renderer/getDiForUnitTesting.tsx index 9cf8526f61..e257b6f607 100644 --- a/src/renderer/getDiForUnitTesting.tsx +++ b/src/renderer/getDiForUnitTesting.tsx @@ -33,10 +33,18 @@ import joinPathsInjectable from "../common/path/join-paths.injectable"; import { joinPathsFake } from "../common/test-utils/join-paths-fake"; import hotbarStoreInjectable from "../common/hotbar-store.injectable"; import loggerInjectable from "./logger/logger.injectable"; +import type { Volume } from "memfs/lib/volume"; -export const getDiForUnitTesting = ( - { doGeneralOverrides } = { doGeneralOverrides: false }, -) => { +export interface GetDiForUnitTestingOptions { + doGeneralOverrides?: boolean; + memFsVolume?: Volume; +} + +export function getDiForUnitTesting(opts?: GetDiForUnitTestingOptions) { + const { + doGeneralOverrides = false, + memFsVolume, + } = opts ?? {}; const di = createContainer(); setLegacyGlobalDiForExtensionApi(di, Environments.renderer); @@ -74,7 +82,7 @@ export const getDiForUnitTesting = ( di.override(getValueFromRegisteredChannelInjectable, () => () => undefined); di.override(registerIpcChannelListenerInjectable, () => () => undefined); - overrideFsWithFakes(di); + overrideFsWithFakes(di, memFsVolume); di.override(observableHistoryInjectable, () => { const historyFake = createMemoryHistory(); @@ -84,7 +92,7 @@ export const getDiForUnitTesting = ( }); }); - di.override(focusWindowInjectable, () => () => {}); + di.override(focusWindowInjectable, () => () => { }); di.override(loggerInjectable, () => ({ warn: noop, @@ -95,7 +103,7 @@ export const getDiForUnitTesting = ( } return di; -}; +} const getInjectableFilePaths = memoize(() => [ ...glob.sync("./**/*.injectable.{ts,tsx}", { cwd: __dirname }), diff --git a/src/test-utils/get-dis-for-unit-testing.ts b/src/test-utils/get-dis-for-unit-testing.ts index 976117bdf9..a0ea6d0724 100644 --- a/src/test-utils/get-dis-for-unit-testing.ts +++ b/src/test-utils/get-dis-for-unit-testing.ts @@ -5,10 +5,35 @@ import { getDiForUnitTesting as getRendererDi } from "../renderer/getDiForUnitTesting"; import { getDiForUnitTesting as getMainDi } from "../main/getDiForUnitTesting"; import { overrideIpcBridge } from "./override-ipc-bridge"; +import { Volume } from "memfs"; -export const getDisForUnitTesting = ({ doGeneralOverrides } = { doGeneralOverrides: false }) => { - const rendererDi = getRendererDi({ doGeneralOverrides }); - const mainDi = getMainDi({ doGeneralOverrides }); +export interface GetDisForUnitTestingOptions { + doGeneralOverrides?: boolean; +} + +export const getDisForUnitTesting = (opts: GetDisForUnitTestingOptions = {}) => { + const memFsVolume = Volume.fromNestedJSON({ + "some-bin-directory": {}, + "some-directory-for-lens-local-storage": {}, + "some-electron-app-path-for-home": {}, + "some-electron-app-path-for-app-data": {}, + "some-electron-app-path-for-cache": {}, + "some-electron-app-path-for-temp": {}, + "some-electron-app-path-for-exe": {}, + "some-electron-app-path-for-module": {}, + "some-electron-app-path-for-desktop": {}, + "some-electron-app-path-for-documents": {}, + "some-electron-app-path-for-downloads": {}, + "some-electron-app-path-for-music": {}, + "some-electron-app-path-for-pictures": {}, + "some-electron-app-path-for-videos": {}, + "some-electron-app-path-for-logs": {}, + "some-electron-app-path-for-crash-dumps": {}, + "some-electron-app-path-for-crash-recent": {}, + }, "/"); + + const rendererDi = getRendererDi({ ...opts, memFsVolume }); + const mainDi = getMainDi({ ...opts, memFsVolume }); overrideIpcBridge({ rendererDi, mainDi }); diff --git a/src/test-utils/override-fs-with-fakes.ts b/src/test-utils/override-fs-with-fakes.ts index d16ce42dc3..833b40faf5 100644 --- a/src/test-utils/override-fs-with-fakes.ts +++ b/src/test-utils/override-fs-with-fakes.ts @@ -10,8 +10,8 @@ import pathExistsInjectable from "../common/fs/path-exists.injectable"; import { createFsFromVolume, Volume } from "memfs"; import statInjectable from "../common/fs/stat.injectable"; -export const overrideFsWithFakes = (di: DiContainer) => { - const inMemoryFs = createFsFromVolume(Volume.fromJSON({})); +export function overrideFsWithFakes(di: DiContainer, memFsVolume = Volume.fromJSON({})) { + const inMemoryFs = createFsFromVolume(memFsVolume); di.override(readFileInjectable, () => ( (filePath) => Promise.resolve(inMemoryFs.readFileSync(filePath, { encoding: "utf-8" })) @@ -28,4 +28,4 @@ export const overrideFsWithFakes = (di: DiContainer) => { di.override(statInjectable, () => ( (filePath) => Promise.resolve(inMemoryFs.statSync(filePath)) )); -}; +}