mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Adapt application builder and tests to array-like paths over string-like paths
Array-like paths do not have weakness for special characters as part of id, such as ".". Also note: the error messaging for clicking of application menu in application builder is a bit worse now I think, but the simplification of the test code is worth it in this case IMHO. Co-authored-by: Janne Savolainen <janne.savolainen@live.fi> Signed-off-by: Iku-turso <mikko.aspiala@gmail.com>
This commit is contained in:
parent
5b9ce7bbb2
commit
4c31f4f6a7
@ -29,7 +29,11 @@ describe("add-cluster - navigation using application menu", () => {
|
|||||||
|
|
||||||
describe("when navigating to add cluster using application menu", () => {
|
describe("when navigating to add cluster using application menu", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await applicationBuilder.applicationMenu.click("root.file.add-cluster");
|
await applicationBuilder.applicationMenu.click(
|
||||||
|
"root",
|
||||||
|
"file",
|
||||||
|
"add-cluster",
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
it("renders", () => {
|
||||||
|
|||||||
@ -107,7 +107,7 @@ describe("application-menu-in-legacy-extension-api", () => {
|
|||||||
|
|
||||||
it("when the extension-based clickable menu item is clicked, does so", () => {
|
it("when the extension-based clickable menu item is clicked, does so", () => {
|
||||||
builder.applicationMenu.click(
|
builder.applicationMenu.click(
|
||||||
"root.some-top-menu-item.some-extension-name/some-clickable-item",
|
"root", "some-top-menu-item", "some-extension-name/some-clickable-item",
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(onClickMock).toHaveBeenCalled();
|
expect(onClickMock).toHaveBeenCalled();
|
||||||
|
|||||||
@ -142,7 +142,7 @@ describe("analytics for installing update", () => {
|
|||||||
it("when checking for updates using application menu, sends event to analytics for being checked from application menu", async () => {
|
it("when checking for updates using application menu, sends event to analytics for being checked from application menu", async () => {
|
||||||
analyticsListenerMock.mockClear();
|
analyticsListenerMock.mockClear();
|
||||||
|
|
||||||
builder.applicationMenu.click("root.mac.check-for-updates");
|
builder.applicationMenu.click("root", "mac", "check-for-updates");
|
||||||
|
|
||||||
expect(analyticsListenerMock.mock.calls).toEqual([
|
expect(analyticsListenerMock.mock.calls).toEqual([
|
||||||
[
|
[
|
||||||
|
|||||||
@ -48,7 +48,7 @@ describe("extensions - navigation using application menu", () => {
|
|||||||
|
|
||||||
describe("when navigating to extensions using application menu", () => {
|
describe("when navigating to extensions using application menu", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
builder.applicationMenu.click("root.mac.navigate-to-extensions");
|
builder.applicationMenu.click("root", "mac", "navigate-to-extensions");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("focuses the window", () => {
|
it("focuses the window", () => {
|
||||||
|
|||||||
@ -36,7 +36,11 @@ describe("preferences - navigation using application menu", () => {
|
|||||||
|
|
||||||
describe("when navigating to preferences using application menu", () => {
|
describe("when navigating to preferences using application menu", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
applicationBuilder.applicationMenu.click("root.mac.navigate-to-preferences");
|
applicationBuilder.applicationMenu.click(
|
||||||
|
"root",
|
||||||
|
"mac",
|
||||||
|
"navigate-to-preferences",
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
it("renders", () => {
|
||||||
|
|||||||
@ -45,7 +45,7 @@ describe("quitting the app using application menu", () => {
|
|||||||
|
|
||||||
describe("when application is quit", () => {
|
describe("when application is quit", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
builder.applicationMenu.click("root.mac.quit");
|
builder.applicationMenu.click("root", "mac", "quit");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("closes all windows", () => {
|
it("closes all windows", () => {
|
||||||
|
|||||||
@ -29,7 +29,11 @@ describe("welcome - navigation using application menu", () => {
|
|||||||
|
|
||||||
describe("when navigated somewhere else", () => {
|
describe("when navigated somewhere else", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
applicationBuilder.applicationMenu.click("root.mac.navigate-to-preferences");
|
applicationBuilder.applicationMenu.click(
|
||||||
|
"root",
|
||||||
|
"mac",
|
||||||
|
"navigate-to-preferences",
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
it("renders", () => {
|
||||||
@ -44,7 +48,11 @@ describe("welcome - navigation using application menu", () => {
|
|||||||
|
|
||||||
describe("when navigated to welcome using application menu", () => {
|
describe("when navigated to welcome using application menu", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
applicationBuilder.applicationMenu.click("root.help.navigate-to-welcome");
|
applicationBuilder.applicationMenu.click(
|
||||||
|
"root",
|
||||||
|
"help",
|
||||||
|
"navigate-to-welcome",
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
it("renders", () => {
|
||||||
|
|||||||
@ -66,10 +66,8 @@ import { Namespace } from "../../../common/k8s-api/endpoints";
|
|||||||
import { overrideFsWithFakes } from "../../../test-utils/override-fs-with-fakes";
|
import { overrideFsWithFakes } from "../../../test-utils/override-fs-with-fakes";
|
||||||
import applicationMenuItemCompositeInjectable from "../../../features/application-menu/main/application-menu-item-composite.injectable";
|
import applicationMenuItemCompositeInjectable from "../../../features/application-menu/main/application-menu-item-composite.injectable";
|
||||||
import { getCompositePaths } from "../../../common/utils/composite/get-composite-paths/get-composite-paths";
|
import { getCompositePaths } from "../../../common/utils/composite/get-composite-paths/get-composite-paths";
|
||||||
import { getCompositeNormalization } from "../../../common/utils/composite/get-composite-normalization/get-composite-normalization";
|
|
||||||
import type { ClickableMenuItem } from "../../../features/application-menu/main/menu-items/application-menu-item-injection-token";
|
|
||||||
import type { Composite } from "../../../common/utils/composite/get-composite/get-composite";
|
|
||||||
import { discoverFor } from "./discovery-of-html-elements";
|
import { discoverFor } from "./discovery-of-html-elements";
|
||||||
|
import { findComposite } from "../../../common/utils/composite/find-composite/find-composite";
|
||||||
|
|
||||||
type Callback = (di: DiContainer) => void | Promise<void>;
|
type Callback = (di: DiContainer) => void | Promise<void>;
|
||||||
|
|
||||||
@ -128,7 +126,7 @@ export interface ApplicationBuilder {
|
|||||||
};
|
};
|
||||||
|
|
||||||
applicationMenu: {
|
applicationMenu: {
|
||||||
click: (path: string) => void;
|
click: (...path: string[]) => void;
|
||||||
items: string[];
|
items: string[];
|
||||||
};
|
};
|
||||||
preferences: {
|
preferences: {
|
||||||
@ -354,26 +352,19 @@ export const getApplicationBuilder = () => {
|
|||||||
return getCompositePaths(composite);
|
return getCompositePaths(composite);
|
||||||
},
|
},
|
||||||
|
|
||||||
click: (path: string) => {
|
click: (...path: string[]) => {
|
||||||
const composite = mainDi.inject(
|
const composite = mainDi.inject(
|
||||||
applicationMenuItemCompositeInjectable,
|
applicationMenuItemCompositeInjectable,
|
||||||
).get();
|
).get();
|
||||||
|
|
||||||
const clickableMenuItems = getCompositeNormalization(composite).filter(isClickableMenuItem);
|
const clickableMenuItem = findComposite(...path)(composite).value;
|
||||||
const clickableMenuItemMap = new Map(clickableMenuItems);
|
|
||||||
// TODO: find out why this any!? The typing of above map is strict, so why map.get() isn't?
|
|
||||||
const clickableMenuItem = clickableMenuItemMap.get(path);
|
|
||||||
|
|
||||||
if (clickableMenuItem === undefined) {
|
if(clickableMenuItem.kind === "clickable-menu-item") {
|
||||||
const clickableIds = [...clickableMenuItemMap.keys()];
|
// Todo: prevent leaking of Electron
|
||||||
|
(clickableMenuItem.onClick as any)();
|
||||||
throw new Error(
|
} else {
|
||||||
`Tried to click application menu item with unknown path "${path}". Available clickable paths are: \n"${clickableIds.join('",\n"')}"`,
|
throw new Error(`Tried to trigger clicking of an application menu item, but item at path '${path.join(" -> ")}' isn't clickable.`);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Todo: prevent leaking of Electron.
|
|
||||||
(clickableMenuItem.value as any).onClick();
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -868,10 +859,3 @@ const disableExtensionFor =
|
|||||||
extensionsState.delete(id);
|
extensionsState.delete(id);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const isClickableMenuItem = (
|
|
||||||
pathAndComposite: readonly [path: string, composite: any],
|
|
||||||
): pathAndComposite is [string, Composite<ClickableMenuItem>] =>
|
|
||||||
pathAndComposite[1].value.kind === "clickable-menu-item";
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user