diff --git a/packages/core/src/renderer/components/test-utils/get-application-builder.tsx b/packages/core/src/renderer/components/test-utils/get-application-builder.tsx index 4ae3441e76..731c5ba8c7 100644 --- a/packages/core/src/renderer/components/test-utils/get-application-builder.tsx +++ b/packages/core/src/renderer/components/test-utils/get-application-builder.tsx @@ -53,7 +53,7 @@ import { applicationWindowInjectionToken } from "../../../main/start-main-applic import closeAllWindowsInjectable from "../../../main/start-main-application/lens-window/hide-all-windows/close-all-windows.injectable"; import type { LensWindow } from "../../../main/start-main-application/lens-window/application-window/create-lens-window.injectable"; import type { FakeExtensionOptions } from "./get-extension-fake"; -import { getExtensionFakeForMain, getExtensionFakeForRenderer } from "./get-extension-fake"; +import { getMainExtensionFakeWith, getRendererExtensionFakeWith } from "./get-extension-fake"; import namespaceApiInjectable from "../../../common/k8s-api/endpoints/namespace.api.injectable"; import { Namespace } from "../../../common/k8s-api/endpoints"; import { getOverrideFsWithFakes } from "../../../test-utils/override-fs-with-fakes"; @@ -594,49 +594,28 @@ export const getApplicationBuilder = () => { }, enable: (...extensions) => { - builder.afterWindowStart(({ windowDi }) => { - const rendererExtensionInstances = extensions.map((options) => - getExtensionFakeForRenderer( - windowDi, - options.id, - options.name, - options.rendererOptions || {}, - ), - ); + builder.afterWindowStart(action(({ windowDi }) => { + extensions + .map(getRendererExtensionFakeWith(windowDi)) + .forEach(enableExtensionFor(windowDi, rendererExtensionsStateInjectable)); + })); - rendererExtensionInstances.forEach( - enableExtensionFor(windowDi, rendererExtensionsStateInjectable), - ); - }); - - builder.afterApplicationStart(({ mainDi }) => { - const mainExtensionInstances = extensions.map((extension) => - getExtensionFakeForMain(mainDi, extension.id, extension.name, extension.mainOptions || {}), - ); - - runInAction(() => { - mainExtensionInstances.forEach( - enableExtensionFor(mainDi, mainExtensionsStateInjectable), - ); - }); - }); + builder.afterApplicationStart(action(({ mainDi }) => { + extensions + .map(getMainExtensionFakeWith(mainDi)) + .forEach(enableExtensionFor(mainDi, mainExtensionsStateInjectable)); + })); }, disable: (...extensions) => { builder.afterWindowStart(({ windowDi }) => { extensions - .map((ext) => ext.id) - .forEach( - disableExtensionFor(windowDi, rendererExtensionsStateInjectable), - ); + .forEach(disableExtensionFor(windowDi, rendererExtensionsStateInjectable)); }); builder.afterApplicationStart(({ mainDi }) => { extensions - .map((ext) => ext.id) - .forEach( - disableExtensionFor(mainDi, mainExtensionsStateInjectable), - ); + .forEach(disableExtensionFor(mainDi, mainExtensionsStateInjectable)); }); }, }, @@ -835,49 +814,29 @@ const selectOptionFor = (builder: ApplicationBuilder, menuId: string) => (labelT userEvent.click(option); }; -const enableExtensionFor = ( - di: DiContainer, - stateInjectable: Injectable, any, any>, -) => { +function enableExtensionFor(di: DiContainer, stateInjectable: Injectable, any, any>) { const extensionState = di.inject(stateInjectable); - const getExtension = (extension: LensExtension) => - di.inject(extensionInjectable, extension); + return (instance: LensExtension) => { + const extension = di.inject(extensionInjectable, instance); - return (extensionInstance: LensExtension) => { - const extension = getExtension(extensionInstance); - - runInAction(() => { - extension.register(); - extensionState.set(extensionInstance.id, extensionInstance); - }); + extension.register(); + extensionState.set(instance.id, instance); }; -}; +} -const disableExtensionFor = - ( - di: DiContainer, - stateInjectable: Injectable, unknown, void>, - ) => - (id: string) => { - const getExtension = (extension: LensExtension) => - di.inject(extensionInjectable, extension); +function disableExtensionFor(di: DiContainer, stateInjectable: Injectable, unknown, void>) { + return (extension: FakeExtensionOptions) => { + const extensionsState = di.inject(stateInjectable); + const instance = extensionsState.get(extension.id); - const extensionsState = di.inject(stateInjectable); + if (!instance) { + throw new Error(`Tried to disable extension with ID "${extension.id}", but it wasn't enabled`); + } - const instance = extensionsState.get(id); + const injectable = di.inject(extensionInjectable, instance); - if (!instance) { - throw new Error( - `Tried to disable extension with ID "${id}", but it wasn't enabled`, - ); - } - - const injectable = getExtension(instance); - - runInAction(() => { - injectable.deregister(); - - extensionsState.delete(id); - }); - }; + injectable.deregister(); + extensionsState.delete(extension.id); + }; +} diff --git a/packages/core/src/renderer/components/test-utils/get-extension-fake.ts b/packages/core/src/renderer/components/test-utils/get-extension-fake.ts index 8079207daa..675b7e93e2 100644 --- a/packages/core/src/renderer/components/test-utils/get-extension-fake.ts +++ b/packages/core/src/renderer/components/test-utils/get-extension-fake.ts @@ -27,7 +27,7 @@ export interface FakeExtensionOptions { mainOptions?: Partial; } -export const getExtensionFakeForMain = (di: DiContainer, id: string, name: string, options: Partial) => { +export const getMainExtensionFakeWith = (di: DiContainer) => ({ id, name, mainOptions = {}}: FakeExtensionOptions) => { const instance = new TestExtensionMain({ id, absolutePath: "irrelevant", @@ -44,7 +44,7 @@ export const getExtensionFakeForMain = (di: DiContainer, id: string, name: strin manifestPath: "irrelevant", }); - Object.assign(instance, options); + Object.assign(instance, mainOptions); (instance as Writable)[lensExtensionDependencies] = { fileSystemProvisionerStore: di.inject(fileSystemProvisionerStoreInjectable), @@ -56,7 +56,7 @@ export const getExtensionFakeForMain = (di: DiContainer, id: string, name: strin return instance; }; -export const getExtensionFakeForRenderer = (di: DiContainer, id: string, name: string, options: Partial) => { +export const getRendererExtensionFakeWith = (di: DiContainer) => ({ id, name, rendererOptions = {}}: FakeExtensionOptions) => { const instance = new TestExtensionRenderer({ id, absolutePath: "irrelevant", @@ -73,7 +73,7 @@ export const getExtensionFakeForRenderer = (di: DiContainer, id: string, name: s manifestPath: "irrelevant", }); - Object.assign(instance, options); + Object.assign(instance, rendererOptions); (instance as Writable)[lensExtensionDependencies] = { categoryRegistry: di.inject(catalogCategoryRegistryInjectable),