mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Replace static application window with ability to create many (#5979)
* Replace static application window with ability to create as many as you wish Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Adapt tests for replacing static application window with ability to create as many as you wish and separate starting of main and window in behaviours Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Make first render of application smaller in test that proves to be hard for CI Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Remove redundant code Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> * Simplify code Signed-off-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
1 parent
299922c8a7
commit
63d5a34379
98 files changed
+3283
-2743
No files matched your search
@@ -2,49 +2,51 @@
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { LensMainExtension } from "../../extensions/lens-main-extension";
|
||||
import type { TrayMenuRegistration } from "../../main/tray/tray-menu-registration";
|
||||
import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
|
||||
import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
|
||||
import loggerInjectable from "../../common/logger.injectable";
|
||||
import type { Logger } from "../../common/logger";
|
||||
import type { FakeExtensionOptions } from "../../renderer/components/test-utils/get-extension-fake";
|
||||
import getRandomIdInjectable from "../../common/utils/get-random-id.injectable";
|
||||
|
||||
describe("clicking tray menu item originating from extension", () => {
|
||||
let applicationBuilder: ApplicationBuilder;
|
||||
let builder: ApplicationBuilder;
|
||||
let logErrorMock: jest.Mock;
|
||||
|
||||
beforeEach(async () => {
|
||||
applicationBuilder = getApplicationBuilder();
|
||||
builder = getApplicationBuilder();
|
||||
|
||||
applicationBuilder.beforeApplicationStart(({ mainDi }) => {
|
||||
builder.beforeApplicationStart((mainDi) => {
|
||||
logErrorMock = jest.fn();
|
||||
|
||||
mainDi.override(loggerInjectable, () => ({ error: logErrorMock }) as unknown as Logger);
|
||||
mainDi.override(getRandomIdInjectable, () => () => "some-random-id");
|
||||
});
|
||||
|
||||
await applicationBuilder.render();
|
||||
await builder.render();
|
||||
});
|
||||
|
||||
describe("when extension is enabled", () => {
|
||||
let someExtension: SomeTestExtension;
|
||||
let someExtension: FakeExtensionOptions;
|
||||
let clickMock: jest.Mock;
|
||||
|
||||
beforeEach(() => {
|
||||
clickMock = jest.fn();
|
||||
|
||||
someExtension = new SomeTestExtension({
|
||||
someExtension = {
|
||||
id: "some-extension-id",
|
||||
trayMenus: [{ label: "some-label", click: clickMock }],
|
||||
});
|
||||
name: "some-extension-name",
|
||||
mainOptions: {
|
||||
trayMenus: [{ label: "some-label", click: clickMock }],
|
||||
},
|
||||
};
|
||||
|
||||
applicationBuilder.extensions.main.enable(someExtension);
|
||||
builder.extensions.enable(someExtension);
|
||||
});
|
||||
|
||||
it("when item is clicked, triggers the click handler", () => {
|
||||
applicationBuilder.tray.click(
|
||||
"some-random-id-tray-menu-item-for-extension-some-extension-id",
|
||||
builder.tray.click(
|
||||
"some-random-id-tray-menu-item-for-extension-some-extension-name",
|
||||
);
|
||||
|
||||
expect(clickMock).toHaveBeenCalled();
|
||||
@@ -56,14 +58,14 @@ describe("clicking tray menu item originating from extension", () => {
|
||||
throw new Error("some-error");
|
||||
});
|
||||
|
||||
applicationBuilder.tray.click(
|
||||
"some-random-id-tray-menu-item-for-extension-some-extension-id",
|
||||
builder.tray.click(
|
||||
"some-random-id-tray-menu-item-for-extension-some-extension-name",
|
||||
);
|
||||
});
|
||||
|
||||
it("logs the error", () => {
|
||||
expect(logErrorMock).toHaveBeenCalledWith(
|
||||
'[TRAY]: Clicking of tray item "some-random-id" from extension "some-extension-id" failed.',
|
||||
'[TRAY]: Clicking of tray item "some-random-id" from extension "some-extension-name" failed.',
|
||||
expect.any(Error),
|
||||
);
|
||||
});
|
||||
@@ -73,14 +75,14 @@ describe("clicking tray menu item originating from extension", () => {
|
||||
beforeEach(() => {
|
||||
clickMock.mockImplementation(() => Promise.reject("some-rejection"));
|
||||
|
||||
applicationBuilder.tray.click(
|
||||
"some-random-id-tray-menu-item-for-extension-some-extension-id",
|
||||
builder.tray.click(
|
||||
"some-random-id-tray-menu-item-for-extension-some-extension-name",
|
||||
);
|
||||
});
|
||||
|
||||
it("logs the error", () => {
|
||||
expect(logErrorMock).toHaveBeenCalledWith(
|
||||
'[TRAY]: Clicking of tray item "some-random-id" from extension "some-extension-id" failed.',
|
||||
'[TRAY]: Clicking of tray item "some-random-id" from extension "some-extension-name" failed.',
|
||||
"some-rejection",
|
||||
);
|
||||
});
|
||||
@@ -88,47 +90,27 @@ describe("clicking tray menu item originating from extension", () => {
|
||||
|
||||
describe("when extension is disabled", () => {
|
||||
beforeEach(() => {
|
||||
applicationBuilder.extensions.main.disable(someExtension);
|
||||
builder.extensions.disable(someExtension);
|
||||
});
|
||||
|
||||
it("does not have the tray menu item from extension", () => {
|
||||
expect(
|
||||
applicationBuilder.tray.get(
|
||||
"some-random-id-tray-menu-item-for-extension-some-extension-id",
|
||||
builder.tray.get(
|
||||
"some-random-id-tray-menu-item-for-extension-some-extension-name",
|
||||
),
|
||||
).toBeNull();
|
||||
});
|
||||
|
||||
// Note: Motivation here is to make sure that enabling same extension does not throw
|
||||
it("when extension is re-enabled, has the tray menu item from extension", async () => {
|
||||
await applicationBuilder.extensions.main.enable(someExtension);
|
||||
await builder.extensions.enable(someExtension);
|
||||
|
||||
expect(
|
||||
applicationBuilder.tray.get(
|
||||
"some-random-id-tray-menu-item-for-extension-some-extension-id",
|
||||
builder.tray.get(
|
||||
"some-random-id-tray-menu-item-for-extension-some-extension-name",
|
||||
),
|
||||
).not.toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
class SomeTestExtension extends LensMainExtension {
|
||||
constructor({ id, trayMenus }: {
|
||||
id: string;
|
||||
trayMenus: TrayMenuRegistration[];
|
||||
}) {
|
||||
super({
|
||||
id,
|
||||
absolutePath: "irrelevant",
|
||||
isBundled: false,
|
||||
isCompatible: false,
|
||||
isEnabled: false,
|
||||
manifest: { name: id, version: "some-version", engines: { lens: "^5.5.0" }},
|
||||
manifestPath: "irrelevant",
|
||||
});
|
||||
|
||||
this.trayMenus = trayMenus;
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,6 @@ import type { IObservableValue } from "mobx";
|
||||
import { computed, runInAction, observable } from "mobx";
|
||||
import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
|
||||
import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
|
||||
import { getExtensionFakeFor } from "../../renderer/components/test-utils/get-extension-fake";
|
||||
|
||||
describe("preferences: extension adding tray items", () => {
|
||||
describe("when extension with tray items is enabled", () => {
|
||||
@@ -22,13 +21,11 @@ describe("preferences: extension adding tray items", () => {
|
||||
|
||||
builder.preferences.navigate();
|
||||
|
||||
const getExtensionFake = getExtensionFakeFor(builder);
|
||||
|
||||
someObservableForVisibility = observable.box(false);
|
||||
someObservableForEnabled = observable.box(false);
|
||||
someObservableLabel = observable.box("Some label");
|
||||
|
||||
const testExtension = getExtensionFake({
|
||||
const testExtension = {
|
||||
id: "some-extension-id",
|
||||
name: "some-extension",
|
||||
|
||||
@@ -82,7 +79,7 @@ describe("preferences: extension adding tray items", () => {
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
builder.extensions.enable(testExtension);
|
||||
});
|
||||
|
||||
@@ -2,53 +2,36 @@
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { LensMainExtension } from "../../extensions/lens-main-extension";
|
||||
import type { TrayMenuRegistration } from "../../main/tray/tray-menu-registration";
|
||||
import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
|
||||
import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
|
||||
import getRandomIdInjectable from "../../common/utils/get-random-id.injectable";
|
||||
|
||||
describe("multiple separators originating from extension", () => {
|
||||
let applicationBuilder: ApplicationBuilder;
|
||||
let builder: ApplicationBuilder;
|
||||
|
||||
beforeEach(async () => {
|
||||
applicationBuilder = getApplicationBuilder();
|
||||
builder = getApplicationBuilder();
|
||||
|
||||
applicationBuilder.beforeApplicationStart(({ mainDi }) => {
|
||||
builder.beforeApplicationStart((mainDi) => {
|
||||
mainDi.unoverride(getRandomIdInjectable);
|
||||
mainDi.permitSideEffects(getRandomIdInjectable);
|
||||
});
|
||||
|
||||
await applicationBuilder.render();
|
||||
await builder.render();
|
||||
});
|
||||
|
||||
it("given extension with multiple separators, when extension is enabled, does not throw", () => {
|
||||
const someExtension = new SomeTestExtension({
|
||||
const someExtension = {
|
||||
id: "some-extension-id",
|
||||
trayMenus: [{ type: "separator" }, { type: "separator" } ],
|
||||
});
|
||||
name: "some-extension",
|
||||
|
||||
mainOptions: {
|
||||
trayMenus: [{ type: "separator" as const }, { type: "separator" as const } ],
|
||||
},
|
||||
};
|
||||
|
||||
expect(() => {
|
||||
applicationBuilder.extensions.main.enable(someExtension);
|
||||
builder.extensions.enable(someExtension);
|
||||
}).not.toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
class SomeTestExtension extends LensMainExtension {
|
||||
constructor({ id, trayMenus }: {
|
||||
id: string;
|
||||
trayMenus: TrayMenuRegistration[];
|
||||
}) {
|
||||
super({
|
||||
id,
|
||||
absolutePath: "irrelevant",
|
||||
isBundled: false,
|
||||
isCompatible: false,
|
||||
isEnabled: false,
|
||||
manifest: { name: id, version: "some-version", engines: { lens: "^5.5.0" }},
|
||||
manifestPath: "irrelevant",
|
||||
});
|
||||
|
||||
this.trayMenus = trayMenus;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user