diff --git a/packages/core/src/extensions/__tests__/extension-loader.test.ts b/packages/core/src/extensions/__tests__/extension-loader.test.ts index 31c019e733..c0e679ca3c 100644 --- a/packages/core/src/extensions/__tests__/extension-loader.test.ts +++ b/packages/core/src/extensions/__tests__/extension-loader.test.ts @@ -5,6 +5,7 @@ import type { ExtensionLoader } from "../extension-loader"; import extensionLoaderInjectable from "../extension-loader/extension-loader.injectable"; +import type { ObservableMap } from "mobx"; import { runInAction } from "mobx"; import { delay } from "@k8slens/utilities"; import { getDiForUnitTesting } from "../../renderer/getDiForUnitTesting"; @@ -12,7 +13,8 @@ import ipcRendererInjectable from "../../renderer/utils/channel/ipc-renderer.inj import type { IpcRenderer } from "electron"; import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import currentlyInClusterFrameInjectable from "../../renderer/routes/currently-in-cluster-frame.injectable"; -import updateExtensionsStateInjectable from "../../features/extensions/enabled/common/update-state.injectable"; +import type { LensExtensionState } from "../../features/extensions/enabled/common/state.injectable"; +import enabledExtensionsStateInjectable from "../../features/extensions/enabled/common/state.injectable"; const manifestPath = "manifest/path"; const manifestPath2 = "manifest/path2"; @@ -20,7 +22,7 @@ const manifestPath3 = "manifest/path3"; describe("ExtensionLoader", () => { let extensionLoader: ExtensionLoader; - let updateExtensionStateMock: jest.Mock; + let enabledExtensionsState: ObservableMap; beforeEach(() => { const di = getDiForUnitTesting(); @@ -106,11 +108,8 @@ describe("ExtensionLoader", () => { }, }) as unknown as IpcRenderer); - updateExtensionStateMock = jest.fn(); - - di.override(updateExtensionsStateInjectable, () => updateExtensionStateMock); - extensionLoader = di.inject(extensionLoaderInjectable); + enabledExtensionsState = di.inject(enabledExtensionsStateInjectable); }); it("renderer updates extension after ipc broadcast", async () => { @@ -151,24 +150,18 @@ describe("ExtensionLoader", () => { it("updates ExtensionsStore after isEnabled is changed", async () => { await extensionLoader.init(); - expect(updateExtensionStateMock).not.toHaveBeenCalled(); - runInAction(() => { extensionLoader.setIsEnabled("manifest/path", false); }); - expect(updateExtensionStateMock).toHaveBeenCalledWith( - expect.objectContaining({ - "manifest/path": { - enabled: false, - name: "TestExtension", - }, - - "manifest/path2": { - enabled: true, - name: "TestExtension2", - }, - }), - ); + expect(enabledExtensionsState.size).toBe(2); + expect(enabledExtensionsState.get("manifest/path")).toMatchObject({ + enabled: false, + name: "TestExtension", + }); + expect(enabledExtensionsState.get("manifest/path2")).toMatchObject({ + enabled: true, + name: "TestExtension2", + }); }); }); diff --git a/packages/core/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap b/packages/core/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap index a7d87f9d8d..a63146ddcc 100644 --- a/packages/core/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap +++ b/packages/core/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap @@ -230,7 +230,7 @@ exports[`extension special characters in page registrations renders 1`] = ` class="HotbarSelector" > { }); extensionInstances.set(extId, ext); - enabledExtensions.set(extId, { name: "@mirantis/minikube" }); + enabledExtensions.set(extId, { name: "@mirantis/minikube", enabled: true }); lpr.addInternalHandler("/", noop); @@ -101,14 +101,14 @@ describe("protocol router tests", () => { expect(throwIfDefined(error)).not.toThrow(); } + expect(broadcastMessageMock).toHaveBeenCalledWith(ProtocolHandlerInternal, "lens://app", "matched"); + try { expect(await lpr.route("lens://extension/@mirantis/minikube")).toBeUndefined(); } catch (error) { expect(throwIfDefined(error)).not.toThrow(); } - await delay(50); - expect(broadcastMessageMock).toHaveBeenCalledWith(ProtocolHandlerInternal, "lens://app", "matched"); expect(broadcastMessageMock).toHaveBeenCalledWith(ProtocolHandlerExtension, "lens://extension/@mirantis/minikube", "matched"); }); @@ -171,7 +171,7 @@ describe("protocol router tests", () => { }); extensionInstances.set(extId, ext); - enabledExtensions.set(extId, { name: "@foobar/icecream" }); + enabledExtensions.set(extId, { name: "@foobar/icecream", enabled: true }); try { expect(await lpr.route("lens://extension/@foobar/icecream/page/foob")).toBeUndefined(); @@ -179,7 +179,6 @@ describe("protocol router tests", () => { expect(throwIfDefined(error)).not.toThrow(); } - await delay(50); expect(called).toBe("foob"); expect(broadcastMessageMock).toBeCalledWith(ProtocolHandlerExtension, "lens://extension/@foobar/icecream/page/foob", "matched"); }); @@ -210,7 +209,7 @@ describe("protocol router tests", () => { }); extensionInstances.set(extId, ext); - enabledExtensions.set(extId, { name: "@foobar/icecream" }); + enabledExtensions.set(extId, { name: "@foobar/icecream", enabled: true }); } { @@ -236,7 +235,7 @@ describe("protocol router tests", () => { }); extensionInstances.set(extId, ext); - enabledExtensions.set(extId, { name: "icecream" }); + enabledExtensions.set(extId, { name: "icecream", enabled: true }); } try { @@ -245,7 +244,6 @@ describe("protocol router tests", () => { expect(throwIfDefined(error)).not.toThrow(); } - await delay(50); expect(called).toBe(1); expect(broadcastMessageMock).toBeCalledWith(ProtocolHandlerExtension, "lens://extension/icecream/page", "matched"); diff --git a/packages/core/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts b/packages/core/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts index fb0ad71892..8185ca4e68 100644 --- a/packages/core/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts +++ b/packages/core/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts @@ -119,7 +119,13 @@ export class LensProtocolRouterMain extends proto.LensProtocolRouter { const rawUrl = url.toString(); // for sending to renderer const attempt = super._routeToInternal(url); - this.disposers.push(when(() => this.rendererLoaded, () => this.dependencies.broadcastMessage(proto.ProtocolHandlerInternal, rawUrl, attempt))); + const sendRoutingToRenderer = () => this.dependencies.broadcastMessage(proto.ProtocolHandlerInternal, rawUrl, attempt); + + if (this.rendererLoaded) { + sendRoutingToRenderer(); + } else { + this.disposers.push(when(() => this.rendererLoaded, sendRoutingToRenderer)); + } return attempt; } @@ -136,7 +142,13 @@ export class LensProtocolRouterMain extends proto.LensProtocolRouter { */ const attempt = await super._routeToExtension(new URLParse(url.toString(), true)); - this.disposers.push(when(() => this.rendererLoaded, () => this.dependencies.broadcastMessage(proto.ProtocolHandlerExtension, rawUrl, attempt))); + const sendRoutingToRenderer = () => this.dependencies.broadcastMessage(proto.ProtocolHandlerExtension, rawUrl, attempt); + + if (this.rendererLoaded) { + sendRoutingToRenderer(); + } else { + this.disposers.push(when(() => this.rendererLoaded, sendRoutingToRenderer)); + } return attempt; }