mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Simplify logic for injecting many instances which can reactively change e.g. based on extension being enabled or disabled (#5662)
* Reorganize stuff to prevent circular dependencies Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Install injectable extension to allow injecting reactively many implementations Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Switch to using computedInjectMany over filtering injectMany based on enabled extensions for simplicity Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove await for not being needed Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Sort dependencies alphabetically Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
1 parent
d0ed4e46b1
commit
f87f5f245c
35 files changed
+245
-333
No files matched your search
@@ -42,11 +42,11 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
|
||||
});
|
||||
|
||||
describe("given extension with cluster pages and cluster page menus", () => {
|
||||
beforeEach(async () => {
|
||||
beforeEach(() => {
|
||||
const getRendererExtensionFake = getRendererExtensionFakeFor(applicationBuilder);
|
||||
const testExtension = getRendererExtensionFake(extensionStubWithSidebarItems);
|
||||
|
||||
await applicationBuilder.extensions.renderer.enable(testExtension);
|
||||
applicationBuilder.extensions.renderer.enable(testExtension);
|
||||
});
|
||||
|
||||
describe("given no state for expanded sidebar items exists, and navigated to child sidebar item, when rendered", () => {
|
||||
|
||||
@@ -23,7 +23,7 @@ describe("extension special characters in page registrations", () => {
|
||||
extensionWithPagesHavingSpecialCharacters,
|
||||
);
|
||||
|
||||
await applicationBuilder.extensions.renderer.enable(testExtension);
|
||||
applicationBuilder.extensions.renderer.enable(testExtension);
|
||||
|
||||
rendered = await applicationBuilder.render();
|
||||
});
|
||||
|
||||
@@ -27,7 +27,7 @@ describe("navigate to extension page", () => {
|
||||
extensionWithPagesHavingParameters,
|
||||
);
|
||||
|
||||
await applicationBuilder.extensions.renderer.enable(testExtension);
|
||||
applicationBuilder.extensions.renderer.enable(testExtension);
|
||||
|
||||
rendered = await applicationBuilder.render();
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ import { getApplicationBuilder } from "../renderer/components/test-utils/get-app
|
||||
import currentRouteInjectable from "../renderer/routes/current-route.injectable";
|
||||
import currentPathInjectable from "../renderer/routes/current-path.injectable";
|
||||
import queryParametersInjectable from "../renderer/routes/query-parameters.injectable";
|
||||
import currentPathParametersInjectable from "../renderer/routes/current-path-parameters.injectable";
|
||||
import { navigateToRouteInjectionToken } from "../common/front-end-routing/navigate-to-route-injection-token";
|
||||
import routePathParametersInjectable from "../renderer/routes/route-path-parameters.injectable";
|
||||
|
||||
describe("navigating between routes", () => {
|
||||
let rendererDi: DiContainer;
|
||||
@@ -73,7 +73,7 @@ describe("navigating between routes", () => {
|
||||
});
|
||||
|
||||
it("does not have path parameters", () => {
|
||||
const pathParameters = rendererDi.inject(currentPathParametersInjectable);
|
||||
const pathParameters = rendererDi.inject(routePathParametersInjectable, route);
|
||||
|
||||
expect(pathParameters.get()).toEqual({});
|
||||
});
|
||||
@@ -101,7 +101,6 @@ describe("navigating between routes", () => {
|
||||
|
||||
describe("given route with optional path parameters", () => {
|
||||
beforeEach(async () => {
|
||||
|
||||
applicationBuilder.beforeApplicationStart(({ rendererDi }) => {
|
||||
rendererDi.register(routeWithOptionalPathParametersInjectable);
|
||||
rendererDi.register(routeWithOptionalPathParametersComponentInjectable);
|
||||
@@ -146,7 +145,7 @@ describe("navigating between routes", () => {
|
||||
});
|
||||
|
||||
it("knows path parameters", () => {
|
||||
const pathParameters = rendererDi.inject(currentPathParametersInjectable);
|
||||
const pathParameters = rendererDi.inject(routePathParametersInjectable, route);
|
||||
|
||||
expect(pathParameters.get()).toEqual({
|
||||
someParameter: "some-value",
|
||||
@@ -179,7 +178,7 @@ describe("navigating between routes", () => {
|
||||
});
|
||||
|
||||
it("knows path parameters", () => {
|
||||
const pathParameters = rendererDi.inject(currentPathParametersInjectable);
|
||||
const pathParameters = rendererDi.inject(routePathParametersInjectable, route);
|
||||
|
||||
expect(pathParameters.get()).toEqual({
|
||||
someParameter: undefined,
|
||||
@@ -227,10 +226,11 @@ const routeWithOptionalPathParametersComponentInjectable = getInjectable({
|
||||
id: "some-route-component",
|
||||
|
||||
instantiate: (di) => {
|
||||
const pathParameters = di.inject(currentPathParametersInjectable);
|
||||
const route = di.inject(routeWithOptionalPathParametersInjectable);
|
||||
const pathParameters = di.inject(routePathParametersInjectable, route);
|
||||
|
||||
return {
|
||||
route: di.inject(routeWithOptionalPathParametersInjectable),
|
||||
route,
|
||||
|
||||
Component: observer(() => (
|
||||
<pre>{JSON.stringify(pathParameters.get(), null, 2)}</pre>
|
||||
|
||||
@@ -44,11 +44,11 @@ describe("preferences - navigation to extension specific preferences", () => {
|
||||
});
|
||||
|
||||
describe("when extension with specific preferences is enabled", () => {
|
||||
beforeEach(async () => {
|
||||
beforeEach(() => {
|
||||
const getRendererExtensionFake = getRendererExtensionFakeFor(applicationBuilder);
|
||||
const testExtension = getRendererExtensionFake(extensionStubWithExtensionSpecificPreferenceItems);
|
||||
|
||||
await applicationBuilder.extensions.renderer.enable(testExtension);
|
||||
applicationBuilder.extensions.renderer.enable(testExtension);
|
||||
});
|
||||
|
||||
it("renders", () => {
|
||||
|
||||
@@ -29,7 +29,7 @@ describe("clicking tray menu item originating from extension", () => {
|
||||
let someExtension: SomeTestExtension;
|
||||
let clickMock: jest.Mock;
|
||||
|
||||
beforeEach(async () => {
|
||||
beforeEach(() => {
|
||||
clickMock = jest.fn();
|
||||
|
||||
someExtension = new SomeTestExtension({
|
||||
@@ -37,12 +37,12 @@ describe("clicking tray menu item originating from extension", () => {
|
||||
trayMenus: [{ label: "some-label", click: clickMock }],
|
||||
});
|
||||
|
||||
await applicationBuilder.extensions.main.enable(someExtension);
|
||||
applicationBuilder.extensions.main.enable(someExtension);
|
||||
});
|
||||
|
||||
it("when item is clicked, triggers the click handler", () => {
|
||||
applicationBuilder.tray.click(
|
||||
"some-label-tray-menu-item-for-extension-some-extension-id-instance-1",
|
||||
"some-label-tray-menu-item-for-extension-some-extension-id",
|
||||
);
|
||||
|
||||
expect(clickMock).toHaveBeenCalled();
|
||||
@@ -55,7 +55,7 @@ describe("clicking tray menu item originating from extension", () => {
|
||||
});
|
||||
|
||||
applicationBuilder.tray.click(
|
||||
"some-label-tray-menu-item-for-extension-some-extension-id-instance-1",
|
||||
"some-label-tray-menu-item-for-extension-some-extension-id",
|
||||
);
|
||||
});
|
||||
|
||||
@@ -72,7 +72,7 @@ describe("clicking tray menu item originating from extension", () => {
|
||||
clickMock.mockImplementation(() => Promise.reject("some-rejection"));
|
||||
|
||||
applicationBuilder.tray.click(
|
||||
"some-label-tray-menu-item-for-extension-some-extension-id-instance-1",
|
||||
"some-label-tray-menu-item-for-extension-some-extension-id",
|
||||
);
|
||||
});
|
||||
|
||||
@@ -90,11 +90,9 @@ describe("clicking tray menu item originating from extension", () => {
|
||||
});
|
||||
|
||||
it("does not have the tray menu item from extension", () => {
|
||||
applicationBuilder.extensions.main.disable(someExtension);
|
||||
|
||||
expect(
|
||||
applicationBuilder.tray.get(
|
||||
"some-label-tray-menu-item-for-extension-some-extension-id-instance-1",
|
||||
"some-label-tray-menu-item-for-extension-some-extension-id",
|
||||
),
|
||||
).toBeNull();
|
||||
});
|
||||
@@ -105,7 +103,7 @@ describe("clicking tray menu item originating from extension", () => {
|
||||
|
||||
expect(
|
||||
applicationBuilder.tray.get(
|
||||
"some-label-tray-menu-item-for-extension-some-extension-id-instance-2",
|
||||
"some-label-tray-menu-item-for-extension-some-extension-id",
|
||||
),
|
||||
).not.toBeNull();
|
||||
});
|
||||
|
||||
@@ -28,9 +28,9 @@ describe("multiple separators originating from extension", () => {
|
||||
trayMenus: [{ type: "separator" }, { type: "separator" } ],
|
||||
});
|
||||
|
||||
return expect(
|
||||
applicationBuilder.extensions.main.enable(someExtension),
|
||||
).resolves.toBeUndefined();
|
||||
expect(() => {
|
||||
applicationBuilder.extensions.main.enable(someExtension);
|
||||
}).not.toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in new issue
Block a user