mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix tests failing due to overriding getters
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
84640ce533
commit
c244e9f2b3
@ -38,17 +38,9 @@ describe("configurable directories for extension files", () => {
|
|||||||
|
|
||||||
testExtensionOptions = {
|
testExtensionOptions = {
|
||||||
id: "some-extension",
|
id: "some-extension",
|
||||||
name: "some-extension-name",
|
|
||||||
|
|
||||||
mainOptions: {
|
|
||||||
manifest: {
|
manifest: {
|
||||||
name: "irrelevant",
|
name: "some-extension-name",
|
||||||
storeName: "some-specific-store-name",
|
storeName: "some-specific-store-name",
|
||||||
version: "0",
|
|
||||||
engines: {
|
|
||||||
lens: "0",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -73,17 +65,8 @@ describe("configurable directories for extension files", () => {
|
|||||||
|
|
||||||
testExtensionOptions = {
|
testExtensionOptions = {
|
||||||
id: "some-extension",
|
id: "some-extension",
|
||||||
name: "some-extension-name",
|
|
||||||
|
|
||||||
mainOptions: {
|
|
||||||
manifest: {
|
manifest: {
|
||||||
name: "some-package-name",
|
name: "some-extension-name",
|
||||||
storeName: undefined,
|
|
||||||
version: "0",
|
|
||||||
engines: {
|
|
||||||
lens: "0",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -21,6 +21,10 @@ export interface LensExtensionDependencies {
|
|||||||
|
|
||||||
export const Disposers = Symbol("disposers");
|
export const Disposers = Symbol("disposers");
|
||||||
|
|
||||||
|
export interface LensExtensionParts {
|
||||||
|
protocolHandlers: ProtocolHandlerRegistration[];
|
||||||
|
}
|
||||||
|
|
||||||
export class LensExtension {
|
export class LensExtension {
|
||||||
get id() {
|
get id() {
|
||||||
return this.extension.id;
|
return this.extension.id;
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { LensExtensionDependencies } from "./lens-extension";
|
import type { LensExtensionDependencies, LensExtensionParts } from "./lens-extension";
|
||||||
import { LensExtension } from "./lens-extension";
|
import { LensExtension } from "./lens-extension";
|
||||||
import type { CatalogEntity } from "../common/catalog";
|
import type { CatalogEntity } from "../common/catalog";
|
||||||
import type { IComputedValue, IObservableArray } from "mobx";
|
import type { IComputedValue, IObservableArray } from "mobx";
|
||||||
@ -25,6 +25,11 @@ interface LensMainExtensionDependencies extends LensExtensionDependencies {
|
|||||||
readonly navigate: NavigateForExtension;
|
readonly navigate: NavigateForExtension;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface LensMainExtensionParts extends LensExtensionParts {
|
||||||
|
appMenus: MenuRegistration[] | IComputedValue<MenuRegistration[]>;
|
||||||
|
trayMenus: TrayMenuRegistration[] | IComputedValue<TrayMenuRegistration[]>;
|
||||||
|
}
|
||||||
|
|
||||||
export class LensMainExtension extends LensExtension {
|
export class LensMainExtension extends LensExtension {
|
||||||
appMenus: MenuRegistration[] | IComputedValue<MenuRegistration[]> = [];
|
appMenus: MenuRegistration[] | IComputedValue<MenuRegistration[]> = [];
|
||||||
trayMenus: TrayMenuRegistration[] | IComputedValue<TrayMenuRegistration[]> = [];
|
trayMenus: TrayMenuRegistration[] | IComputedValue<TrayMenuRegistration[]> = [];
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { LensExtensionDependencies } from "./lens-extension";
|
import type { LensExtensionDependencies, LensExtensionParts } from "./lens-extension";
|
||||||
import { Disposers, LensExtension } from "./lens-extension";
|
import { Disposers, LensExtension } from "./lens-extension";
|
||||||
import type { CatalogEntity, CategoryFilter, CatalogCategoryRegistry } from "../common/catalog";
|
import type { CatalogEntity, CategoryFilter, CatalogCategoryRegistry } from "../common/catalog";
|
||||||
import type { Disposer } from "../common/utils";
|
import type { Disposer } from "../common/utils";
|
||||||
@ -53,6 +53,30 @@ interface LensRendererExtensionDependencies extends LensExtensionDependencies {
|
|||||||
readonly categoryRegistry: CatalogCategoryRegistry;
|
readonly categoryRegistry: CatalogCategoryRegistry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface LensRendererExtensionParts extends LensExtensionParts {
|
||||||
|
globalPages: PageRegistration[];
|
||||||
|
clusterPages: PageRegistration[];
|
||||||
|
clusterPageMenus: ClusterPageMenuRegistration[];
|
||||||
|
clusterFrameComponents: ClusterFrameChildComponent[];
|
||||||
|
kubeObjectStatusTexts: KubeObjectStatusRegistration[];
|
||||||
|
appPreferences: AppPreferenceRegistration[];
|
||||||
|
appPreferenceTabs: AppPreferenceTabRegistration[];
|
||||||
|
entitySettings: EntitySettingRegistration[];
|
||||||
|
statusBarItems: StatusBarRegistration[];
|
||||||
|
kubeObjectDetailItems: KubeObjectDetailRegistration[];
|
||||||
|
kubeObjectMenuItems: KubeObjectMenuRegistration[];
|
||||||
|
kubeWorkloadsOverviewItems: WorkloadsOverviewDetailRegistration[];
|
||||||
|
commands: CommandRegistration[];
|
||||||
|
welcomeMenus: WelcomeMenuRegistration[];
|
||||||
|
welcomeBanners: WelcomeBannerRegistration[];
|
||||||
|
catalogEntityDetailItems: CatalogEntityDetailRegistration<CatalogEntity>[];
|
||||||
|
topBarItems: TopBarRegistration[];
|
||||||
|
additionalCategoryColumns: AdditionalCategoryColumnRegistration[];
|
||||||
|
customCategoryViews: CustomCategoryViewRegistration[];
|
||||||
|
kubeObjectHandlers: KubeObjectHandlerRegistration[];
|
||||||
|
isEnabledForCluster(cluster: KubernetesCluster): Promise<boolean>;
|
||||||
|
}
|
||||||
|
|
||||||
export class LensRendererExtension extends LensExtension {
|
export class LensRendererExtension extends LensExtension {
|
||||||
globalPages: PageRegistration[] = [];
|
globalPages: PageRegistration[] = [];
|
||||||
clusterPages: PageRegistration[] = [];
|
clusterPages: PageRegistration[] = [];
|
||||||
|
|||||||
@ -45,8 +45,9 @@ describe("application-menu-in-legacy-extension-api", () => {
|
|||||||
|
|
||||||
testExtensionOptions = {
|
testExtensionOptions = {
|
||||||
id: "some-test-extension",
|
id: "some-test-extension",
|
||||||
|
manifest: {
|
||||||
name: "some-extension-name",
|
name: "some-extension-name",
|
||||||
|
},
|
||||||
mainOptions: {
|
mainOptions: {
|
||||||
appMenus: [
|
appMenus: [
|
||||||
{
|
{
|
||||||
@ -151,8 +152,9 @@ describe("application-menu-in-legacy-extension-api", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
const testExtensionOptions: FakeExtensionOptions = {
|
const testExtensionOptions: FakeExtensionOptions = {
|
||||||
id: "some-test-extension",
|
id: "some-test-extension",
|
||||||
|
manifest: {
|
||||||
name: "some-extension-name",
|
name: "some-extension-name",
|
||||||
|
},
|
||||||
mainOptions: {
|
mainOptions: {
|
||||||
appMenus: [
|
appMenus: [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -103,7 +103,9 @@ describe("custom category columns for catalog", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
builder.extensions.enable({
|
builder.extensions.enable({
|
||||||
id: "some-id",
|
id: "some-id",
|
||||||
|
manifest: {
|
||||||
name: "some-name",
|
name: "some-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
additionalCategoryColumns: [
|
additionalCategoryColumns: [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -24,10 +24,13 @@ describe("disable-cluster-pages-when-cluster-is-not-relevant", () => {
|
|||||||
|
|
||||||
isEnabledForClusterMock = asyncFn();
|
isEnabledForClusterMock = asyncFn();
|
||||||
|
|
||||||
const testExtension = {
|
rendered = await builder.render();
|
||||||
id: "test-extension-id",
|
|
||||||
name: "test-extension",
|
|
||||||
|
|
||||||
|
builder.extensions.enable({
|
||||||
|
id: "test-extension-id",
|
||||||
|
manifest: {
|
||||||
|
name: "test-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
isEnabledForCluster: isEnabledForClusterMock,
|
isEnabledForCluster: isEnabledForClusterMock,
|
||||||
|
|
||||||
@ -37,11 +40,7 @@ describe("disable-cluster-pages-when-cluster-is-not-relevant", () => {
|
|||||||
},
|
},
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
|
|
||||||
rendererTestExtension =
|
rendererTestExtension =
|
||||||
builder.extensions.get("test-extension-id").applicationWindows.only;
|
builder.extensions.get("test-extension-id").applicationWindows.only;
|
||||||
|
|||||||
@ -22,10 +22,13 @@ describe("disable sidebar items when cluster is not relevant", () => {
|
|||||||
|
|
||||||
isEnabledForClusterMock = asyncFn();
|
isEnabledForClusterMock = asyncFn();
|
||||||
|
|
||||||
const testExtension = {
|
rendered = await builder.render();
|
||||||
id: "test-extension-id",
|
|
||||||
name: "test-extension",
|
|
||||||
|
|
||||||
|
builder.extensions.enable({
|
||||||
|
id: "test-extension-id",
|
||||||
|
manifest: {
|
||||||
|
name: "test-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
isEnabledForCluster: isEnabledForClusterMock,
|
isEnabledForCluster: isEnabledForClusterMock,
|
||||||
|
|
||||||
@ -46,11 +49,7 @@ describe("disable sidebar items when cluster is not relevant", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("given not yet known if extension should be enabled for the cluster", () => {
|
describe("given not yet known if extension should be enabled for the cluster", () => {
|
||||||
|
|||||||
@ -23,10 +23,13 @@ describe("reactively disable cluster pages", () => {
|
|||||||
|
|
||||||
someObservable = observable.box(false);
|
someObservable = observable.box(false);
|
||||||
|
|
||||||
const testExtensionOptions = {
|
rendered = await builder.render();
|
||||||
id: "test-extension-id",
|
|
||||||
name: "test-extension",
|
|
||||||
|
|
||||||
|
builder.extensions.enable({
|
||||||
|
id: "test-extension-id",
|
||||||
|
manifest: {
|
||||||
|
name: "test-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
clusterPages: [{
|
clusterPages: [{
|
||||||
components: {
|
components: {
|
||||||
@ -36,11 +39,7 @@ describe("reactively disable cluster pages", () => {
|
|||||||
enabled: computed(() => someObservable.get()),
|
enabled: computed(() => someObservable.get()),
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
|
|
||||||
builder.extensions.enable(testExtensionOptions);
|
|
||||||
|
|
||||||
testExtensionInstance =
|
testExtensionInstance =
|
||||||
builder.extensions.get("test-extension-id").applicationWindows.only;
|
builder.extensions.get("test-extension-id").applicationWindows.only;
|
||||||
|
|||||||
@ -42,10 +42,18 @@ describe("disable kube object detail items when cluster is not relevant", () =>
|
|||||||
|
|
||||||
isEnabledForClusterMock = asyncFn();
|
isEnabledForClusterMock = asyncFn();
|
||||||
|
|
||||||
const testExtension = {
|
rendered = await builder.render();
|
||||||
id: "test-extension-id",
|
|
||||||
name: "test-extension",
|
|
||||||
|
|
||||||
|
const windowDi = builder.applicationWindow.only.di;
|
||||||
|
const showDetails = windowDi.inject(showDetailsInjectable);
|
||||||
|
|
||||||
|
showDetails("/apis/some-api-version/namespaces/some-namespace/some-kind/some-name");
|
||||||
|
|
||||||
|
builder.extensions.enable({
|
||||||
|
id: "test-extension-id",
|
||||||
|
manifest: {
|
||||||
|
name: "test-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
isEnabledForCluster: isEnabledForClusterMock,
|
isEnabledForCluster: isEnabledForClusterMock,
|
||||||
|
|
||||||
@ -63,16 +71,7 @@ describe("disable kube object detail items when cluster is not relevant", () =>
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
|
|
||||||
const windowDi = builder.applicationWindow.only.di;
|
|
||||||
const showDetails = windowDi.inject(showDetailsInjectable);
|
|
||||||
|
|
||||||
showDetails("/apis/some-api-version/namespaces/some-namespace/some-kind/some-name");
|
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("given not yet known if extension should be enabled for the cluster", () => {
|
describe("given not yet known if extension should be enabled for the cluster", () => {
|
||||||
|
|||||||
@ -41,10 +41,18 @@ describe("reactively hide kube object detail item", () => {
|
|||||||
|
|
||||||
someObservable = observable.box(false);
|
someObservable = observable.box(false);
|
||||||
|
|
||||||
const testExtension = {
|
rendered = await builder.render();
|
||||||
id: "test-extension-id",
|
|
||||||
name: "test-extension",
|
|
||||||
|
|
||||||
|
const windowDi = builder.applicationWindow.only.di;
|
||||||
|
const showDetails = windowDi.inject(showDetailsInjectable);
|
||||||
|
|
||||||
|
showDetails("/apis/some-api-version/namespaces/some-namespace/some-kind/some-name");
|
||||||
|
|
||||||
|
builder.extensions.enable({
|
||||||
|
id: "test-extension-id",
|
||||||
|
manifest: {
|
||||||
|
name: "test-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
kubeObjectDetailItems: [
|
kubeObjectDetailItems: [
|
||||||
{
|
{
|
||||||
@ -63,16 +71,7 @@ describe("reactively hide kube object detail item", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
|
|
||||||
const windowDi = builder.applicationWindow.only.di;
|
|
||||||
const showDetails = windowDi.inject(showDetailsInjectable);
|
|
||||||
|
|
||||||
showDetails("/apis/some-api-version/namespaces/some-namespace/some-kind/some-name");
|
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
it("renders", () => {
|
||||||
|
|||||||
@ -37,10 +37,20 @@ describe("disable kube object menu items when cluster is not relevant", () => {
|
|||||||
|
|
||||||
isEnabledForClusterMock = asyncFn();
|
isEnabledForClusterMock = asyncFn();
|
||||||
|
|
||||||
const testExtension = {
|
rendered = await builder.render();
|
||||||
id: "test-extension-id",
|
|
||||||
name: "test-extension",
|
|
||||||
|
|
||||||
|
const windowDi = builder.applicationWindow.only.di;
|
||||||
|
|
||||||
|
const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken);
|
||||||
|
const testRoute = windowDi.inject(testRouteInjectable);
|
||||||
|
|
||||||
|
navigateToRoute(testRoute);
|
||||||
|
|
||||||
|
builder.extensions.enable({
|
||||||
|
id: "test-extension-id",
|
||||||
|
manifest: {
|
||||||
|
name: "test-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
isEnabledForCluster: isEnabledForClusterMock,
|
isEnabledForCluster: isEnabledForClusterMock,
|
||||||
|
|
||||||
@ -56,18 +66,7 @@ describe("disable kube object menu items when cluster is not relevant", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
|
|
||||||
const windowDi = builder.applicationWindow.only.di;
|
|
||||||
|
|
||||||
const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken);
|
|
||||||
const testRoute = windowDi.inject(testRouteInjectable);
|
|
||||||
|
|
||||||
navigateToRoute(testRoute);
|
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("given not yet known if extension should be enabled for the cluster", () => {
|
describe("given not yet known if extension should be enabled for the cluster", () => {
|
||||||
|
|||||||
@ -33,10 +33,20 @@ describe("reactively hide kube object menu item", () => {
|
|||||||
|
|
||||||
someObservable = observable.box(false);
|
someObservable = observable.box(false);
|
||||||
|
|
||||||
const testExtension = {
|
rendered = await builder.render();
|
||||||
id: "test-extension-id",
|
|
||||||
name: "test-extension",
|
|
||||||
|
|
||||||
|
const windowDi = builder.applicationWindow.only.di;
|
||||||
|
|
||||||
|
const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken);
|
||||||
|
const testRoute = windowDi.inject(testRouteInjectable);
|
||||||
|
|
||||||
|
navigateToRoute(testRoute);
|
||||||
|
|
||||||
|
builder.extensions.enable({
|
||||||
|
id: "test-extension-id",
|
||||||
|
manifest: {
|
||||||
|
name: "test-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
kubeObjectMenuItems: [
|
kubeObjectMenuItems: [
|
||||||
{
|
{
|
||||||
@ -52,18 +62,7 @@ describe("reactively hide kube object menu item", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
|
|
||||||
const windowDi = builder.applicationWindow.only.di;
|
|
||||||
|
|
||||||
const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken);
|
|
||||||
const testRoute = windowDi.inject(testRouteInjectable);
|
|
||||||
|
|
||||||
navigateToRoute(testRoute);
|
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("does not show the kube object menu item", () => {
|
it("does not show the kube object menu item", () => {
|
||||||
|
|||||||
@ -38,10 +38,20 @@ describe("disable kube object statuses when cluster is not relevant", () => {
|
|||||||
|
|
||||||
isEnabledForClusterMock = asyncFn();
|
isEnabledForClusterMock = asyncFn();
|
||||||
|
|
||||||
const testExtension = {
|
rendered = await builder.render();
|
||||||
id: "test-extension-id",
|
|
||||||
name: "test-extension",
|
|
||||||
|
|
||||||
|
const windowDi = builder.applicationWindow.only.di;
|
||||||
|
|
||||||
|
const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken);
|
||||||
|
const testRoute = windowDi.inject(testRouteInjectable);
|
||||||
|
|
||||||
|
navigateToRoute(testRoute);
|
||||||
|
|
||||||
|
builder.extensions.enable({
|
||||||
|
id: "test-extension-id",
|
||||||
|
manifest: {
|
||||||
|
name: "test-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
isEnabledForCluster: isEnabledForClusterMock,
|
isEnabledForCluster: isEnabledForClusterMock,
|
||||||
|
|
||||||
@ -57,18 +67,7 @@ describe("disable kube object statuses when cluster is not relevant", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
|
|
||||||
const windowDi = builder.applicationWindow.only.di;
|
|
||||||
|
|
||||||
const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken);
|
|
||||||
const testRoute = windowDi.inject(testRouteInjectable);
|
|
||||||
|
|
||||||
navigateToRoute(testRoute);
|
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("given not yet known if extension should be enabled for the cluster", () => {
|
describe("given not yet known if extension should be enabled for the cluster", () => {
|
||||||
|
|||||||
@ -34,10 +34,20 @@ describe("reactively hide kube object status", () => {
|
|||||||
|
|
||||||
someObservable = observable.box(false);
|
someObservable = observable.box(false);
|
||||||
|
|
||||||
const testExtension = {
|
rendered = await builder.render();
|
||||||
id: "test-extension-id",
|
|
||||||
name: "test-extension",
|
|
||||||
|
|
||||||
|
const windowDi = builder.applicationWindow.only.di;
|
||||||
|
|
||||||
|
const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken);
|
||||||
|
const testRoute = windowDi.inject(testRouteInjectable);
|
||||||
|
|
||||||
|
navigateToRoute(testRoute);
|
||||||
|
|
||||||
|
builder.extensions.enable({
|
||||||
|
id: "test-extension-id",
|
||||||
|
manifest: {
|
||||||
|
name: "test-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
kubeObjectStatusTexts: [
|
kubeObjectStatusTexts: [
|
||||||
{
|
{
|
||||||
@ -53,18 +63,7 @@ describe("reactively hide kube object status", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
|
|
||||||
const windowDi = builder.applicationWindow.only.di;
|
|
||||||
|
|
||||||
const navigateToRoute = windowDi.inject(navigateToRouteInjectionToken);
|
|
||||||
const testRoute = windowDi.inject(testRouteInjectable);
|
|
||||||
|
|
||||||
navigateToRoute(testRoute);
|
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("does not show the kube object status", () => {
|
it("does not show the kube object status", () => {
|
||||||
|
|||||||
@ -25,10 +25,12 @@ describe("legacy extension adding cluster frame components", () => {
|
|||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
someObservable = observable.box(false);
|
someObservable = observable.box(false);
|
||||||
|
|
||||||
const testExtension = {
|
rendered = await builder.render();
|
||||||
|
builder.extensions.enable({
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension-name",
|
name: "some-extension-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
clusterFrameComponents: [
|
clusterFrameComponents: [
|
||||||
{
|
{
|
||||||
@ -43,10 +45,7 @@ describe("legacy extension adding cluster frame components", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
it("renders", () => {
|
||||||
|
|||||||
@ -50,10 +50,11 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
someObservable = observable.box(false);
|
someObservable = observable.box(false);
|
||||||
|
|
||||||
const testExtension = {
|
applicationBuilder.extensions.enable({
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension-name",
|
name: "some-extension-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
clusterPages: [
|
clusterPages: [
|
||||||
{
|
{
|
||||||
@ -124,9 +125,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
applicationBuilder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("given no state for expanded sidebar items exists, and navigated to child sidebar item, when rendered", () => {
|
describe("given no state for expanded sidebar items exists, and navigated to child sidebar item, when rendered", () => {
|
||||||
@ -458,10 +457,11 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
someObservable = observable.box(false);
|
someObservable = observable.box(false);
|
||||||
|
|
||||||
const testExtension = {
|
applicationBuilder.extensions.enable({
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension-name",
|
name: "some-extension-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
clusterPages: [
|
clusterPages: [
|
||||||
{
|
{
|
||||||
@ -526,9 +526,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
|
|||||||
},
|
},
|
||||||
] as ClusterPageMenuRegistration[],
|
] as ClusterPageMenuRegistration[],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
applicationBuilder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("given no state for expanded sidebar items exists, and navigated to child sidebar item, when rendered", () => {
|
describe("given no state for expanded sidebar items exists, and navigated to child sidebar item, when rendered", () => {
|
||||||
|
|||||||
@ -25,10 +25,21 @@ describe("disable workloads overview details when cluster is not relevant", () =
|
|||||||
|
|
||||||
isEnabledForClusterMock = asyncFn();
|
isEnabledForClusterMock = asyncFn();
|
||||||
|
|
||||||
const testExtension = {
|
rendered = await builder.render();
|
||||||
id: "test-extension-id",
|
|
||||||
name: "test-extension",
|
|
||||||
|
|
||||||
|
const windowDi = builder.applicationWindow.only.di;
|
||||||
|
|
||||||
|
const navigateToWorkloadsOverview = windowDi.inject(
|
||||||
|
navigateToWorkloadsOverviewInjectable,
|
||||||
|
);
|
||||||
|
|
||||||
|
navigateToWorkloadsOverview();
|
||||||
|
|
||||||
|
builder.extensions.enable({
|
||||||
|
id: "test-extension-id",
|
||||||
|
manifest: {
|
||||||
|
name: "test-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
isEnabledForCluster: isEnabledForClusterMock,
|
isEnabledForCluster: isEnabledForClusterMock,
|
||||||
|
|
||||||
@ -42,19 +53,7 @@ describe("disable workloads overview details when cluster is not relevant", () =
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
|
|
||||||
const windowDi = builder.applicationWindow.only.di;
|
|
||||||
|
|
||||||
const navigateToWorkloadsOverview = windowDi.inject(
|
|
||||||
navigateToWorkloadsOverviewInjectable,
|
|
||||||
);
|
|
||||||
|
|
||||||
navigateToWorkloadsOverview();
|
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("given not yet known if extension should be enabled for the cluster", () => {
|
describe("given not yet known if extension should be enabled for the cluster", () => {
|
||||||
|
|||||||
@ -33,10 +33,11 @@ describe("order of workload overview details", () => {
|
|||||||
|
|
||||||
rendered = await builder.render();
|
rendered = await builder.render();
|
||||||
|
|
||||||
const testExtension = {
|
builder.extensions.enable({
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension",
|
name: "some-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
kubeWorkloadsOverviewItems: [
|
kubeWorkloadsOverviewItems: [
|
||||||
{
|
{
|
||||||
@ -73,9 +74,7 @@ describe("order of workload overview details", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("shows items in correct order", () => {
|
it("shows items in correct order", () => {
|
||||||
|
|||||||
@ -22,10 +22,21 @@ describe("reactively hide workloads overview details item", () => {
|
|||||||
|
|
||||||
someObservable = observable.box(false);
|
someObservable = observable.box(false);
|
||||||
|
|
||||||
const testExtension = {
|
rendered = await builder.render();
|
||||||
id: "test-extension-id",
|
|
||||||
name: "test-extension",
|
|
||||||
|
|
||||||
|
const windowDi = builder.applicationWindow.only.di;
|
||||||
|
|
||||||
|
const navigateToWorkloadsOverview = windowDi.inject(
|
||||||
|
navigateToWorkloadsOverviewInjectable,
|
||||||
|
);
|
||||||
|
|
||||||
|
navigateToWorkloadsOverview();
|
||||||
|
|
||||||
|
builder.extensions.enable({
|
||||||
|
id: "test-extension-id",
|
||||||
|
manifest: {
|
||||||
|
name: "test-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
kubeWorkloadsOverviewItems: [
|
kubeWorkloadsOverviewItems: [
|
||||||
{
|
{
|
||||||
@ -39,19 +50,7 @@ describe("reactively hide workloads overview details item", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
|
|
||||||
const windowDi = builder.applicationWindow.only.di;
|
|
||||||
|
|
||||||
const navigateToWorkloadsOverview = windowDi.inject(
|
|
||||||
navigateToWorkloadsOverviewInjectable,
|
|
||||||
);
|
|
||||||
|
|
||||||
navigateToWorkloadsOverview();
|
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("does not show the workload overview detail item", () => {
|
it("does not show the workload overview detail item", () => {
|
||||||
|
|||||||
@ -51,8 +51,9 @@ describe("extension special characters in page registrations", () => {
|
|||||||
|
|
||||||
const extensionWithPagesHavingSpecialCharacters: FakeExtensionOptions = {
|
const extensionWithPagesHavingSpecialCharacters: FakeExtensionOptions = {
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "@some-extension-name/",
|
name: "@some-extension-name/",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
globalPages: [
|
globalPages: [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -125,8 +125,9 @@ describe("navigate to extension page", () => {
|
|||||||
|
|
||||||
const extensionWithPagesHavingParameters: FakeExtensionOptions = {
|
const extensionWithPagesHavingParameters: FakeExtensionOptions = {
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension-name",
|
name: "some-extension-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
globalPages: [
|
globalPages: [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -32,10 +32,11 @@ describe("preferences: extension adding preference tabs", () => {
|
|||||||
|
|
||||||
someObservable = observable.box(false);
|
someObservable = observable.box(false);
|
||||||
|
|
||||||
const testExtension = {
|
builder.extensions.enable({
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension",
|
name: "some-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
appPreferenceTabs: [
|
appPreferenceTabs: [
|
||||||
{
|
{
|
||||||
@ -89,9 +90,7 @@ describe("preferences: extension adding preference tabs", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
it("renders", () => {
|
||||||
|
|||||||
@ -9,7 +9,6 @@ import { getApplicationBuilder } from "../../renderer/components/test-utils/get-
|
|||||||
import navigateToProxyPreferencesInjectable from "./common/navigate-to-proxy-preferences.injectable";
|
import navigateToProxyPreferencesInjectable from "./common/navigate-to-proxy-preferences.injectable";
|
||||||
import type { Discover } from "../../renderer/components/test-utils/discovery-of-html-elements";
|
import type { Discover } from "../../renderer/components/test-utils/discovery-of-html-elements";
|
||||||
import { discoverFor } from "../../renderer/components/test-utils/discovery-of-html-elements";
|
import { discoverFor } from "../../renderer/components/test-utils/discovery-of-html-elements";
|
||||||
import type { FakeExtensionOptions } from "../../renderer/components/test-utils/get-extension-fake";
|
|
||||||
|
|
||||||
describe("preferences - navigation to application preferences", () => {
|
describe("preferences - navigation to application preferences", () => {
|
||||||
let builder: ApplicationBuilder;
|
let builder: ApplicationBuilder;
|
||||||
@ -47,9 +46,26 @@ describe("preferences - navigation to application preferences", () => {
|
|||||||
|
|
||||||
describe("when extension with application preference items gets enabled", () => {
|
describe("when extension with application preference items gets enabled", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
builder.extensions.enable(
|
builder.extensions.enable({
|
||||||
extensionStubWithApplicationPreferenceItems,
|
id: "some-test-extension-id",
|
||||||
);
|
manifest: {
|
||||||
|
name: "some-test-extension-name",
|
||||||
|
},
|
||||||
|
rendererOptions: {
|
||||||
|
appPreferences: [
|
||||||
|
{
|
||||||
|
title: "Some application-preference item",
|
||||||
|
id: "some-application-preference-item-id",
|
||||||
|
showInPreferencesTab: "application",
|
||||||
|
|
||||||
|
components: {
|
||||||
|
Hint: () => <div data-testid="some-preference-item-hint" />,
|
||||||
|
Input: () => <div data-testid="some-preference-item-input" />,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
it("renders", () => {
|
||||||
@ -133,23 +149,3 @@ describe("preferences - navigation to application preferences", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const extensionStubWithApplicationPreferenceItems: FakeExtensionOptions = {
|
|
||||||
id: "some-test-extension-id",
|
|
||||||
name: "some-test-extension-name",
|
|
||||||
|
|
||||||
rendererOptions: {
|
|
||||||
appPreferences: [
|
|
||||||
{
|
|
||||||
title: "Some application-preference item",
|
|
||||||
id: "some-application-preference-item-id",
|
|
||||||
showInPreferencesTab: "application",
|
|
||||||
|
|
||||||
components: {
|
|
||||||
Hint: () => <div data-testid="some-preference-item-hint" />,
|
|
||||||
Input: () => <div data-testid="some-preference-item-input" />,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|||||||
@ -335,8 +335,9 @@ describe("preferences - navigation to extension specific preferences", () => {
|
|||||||
|
|
||||||
const extensionStubWithExtensionSpecificPreferenceItems: FakeExtensionOptions = {
|
const extensionStubWithExtensionSpecificPreferenceItems: FakeExtensionOptions = {
|
||||||
id: "some-test-extension-id",
|
id: "some-test-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-test-extension-id",
|
name: "some-test-extension-id",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
appPreferences: [
|
appPreferences: [
|
||||||
{
|
{
|
||||||
@ -365,8 +366,9 @@ const extensionStubWithExtensionSpecificPreferenceItems: FakeExtensionOptions =
|
|||||||
|
|
||||||
const someOtherExtensionStubWithExtensionSpecificPreferenceItems: FakeExtensionOptions = {
|
const someOtherExtensionStubWithExtensionSpecificPreferenceItems: FakeExtensionOptions = {
|
||||||
id: "some-other-test-extension-id",
|
id: "some-other-test-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-other-test-extension-id",
|
name: "some-other-test-extension-id",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
appPreferences: [
|
appPreferences: [
|
||||||
{
|
{
|
||||||
@ -384,13 +386,16 @@ const someOtherExtensionStubWithExtensionSpecificPreferenceItems: FakeExtensionO
|
|||||||
|
|
||||||
const extensionStubWithoutPreferences: FakeExtensionOptions = {
|
const extensionStubWithoutPreferences: FakeExtensionOptions = {
|
||||||
id: "without-preferences-id",
|
id: "without-preferences-id",
|
||||||
|
manifest: {
|
||||||
name: "without-preferences-id",
|
name: "without-preferences-id",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const extensionStubWithShowInPreferencesTab: FakeExtensionOptions = {
|
const extensionStubWithShowInPreferencesTab: FakeExtensionOptions = {
|
||||||
id: "specified-preferences-page-id",
|
id: "specified-preferences-page-id",
|
||||||
|
manifest: {
|
||||||
name: "specified-preferences-page-name",
|
name: "specified-preferences-page-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
appPreferences: [
|
appPreferences: [
|
||||||
{
|
{
|
||||||
@ -409,8 +414,9 @@ const extensionStubWithShowInPreferencesTab: FakeExtensionOptions = {
|
|||||||
|
|
||||||
const extensionStubWithRegisteredTab: FakeExtensionOptions = {
|
const extensionStubWithRegisteredTab: FakeExtensionOptions = {
|
||||||
id: "registered-tab-page-id",
|
id: "registered-tab-page-id",
|
||||||
|
manifest: {
|
||||||
name: "registered-tab-page-id",
|
name: "registered-tab-page-id",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
appPreferences: [
|
appPreferences: [
|
||||||
{
|
{
|
||||||
@ -455,8 +461,9 @@ const extensionStubWithRegisteredTab: FakeExtensionOptions = {
|
|||||||
|
|
||||||
const extensionStubWithSameRegisteredTab: FakeExtensionOptions = {
|
const extensionStubWithSameRegisteredTab: FakeExtensionOptions = {
|
||||||
id: "duplicated-tab-page-id",
|
id: "duplicated-tab-page-id",
|
||||||
|
manifest: {
|
||||||
name: "duplicated-tab-page-id",
|
name: "duplicated-tab-page-id",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
appPreferences: [
|
appPreferences: [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -8,7 +8,6 @@ import type { ApplicationBuilder } from "../../renderer/components/test-utils/ge
|
|||||||
import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
|
import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
|
||||||
import navigateToTelemetryPreferencesInjectable from "./common/navigate-to-telemetry-preferences.injectable";
|
import navigateToTelemetryPreferencesInjectable from "./common/navigate-to-telemetry-preferences.injectable";
|
||||||
import sentryDataSourceNameInjectable from "../../common/vars/sentry-dsn-url.injectable";
|
import sentryDataSourceNameInjectable from "../../common/vars/sentry-dsn-url.injectable";
|
||||||
import type { FakeExtensionOptions } from "../../renderer/components/test-utils/get-extension-fake";
|
|
||||||
import type { Discover } from "../../renderer/components/test-utils/discovery-of-html-elements";
|
import type { Discover } from "../../renderer/components/test-utils/discovery-of-html-elements";
|
||||||
import { discoverFor } from "../../renderer/components/test-utils/discovery-of-html-elements";
|
import { discoverFor } from "../../renderer/components/test-utils/discovery-of-html-elements";
|
||||||
|
|
||||||
@ -57,9 +56,26 @@ describe("preferences - navigation to telemetry preferences", () => {
|
|||||||
|
|
||||||
describe("when extension with telemetry preference items gets enabled", () => {
|
describe("when extension with telemetry preference items gets enabled", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
builder.extensions.enable(
|
builder.extensions.enable({
|
||||||
extensionStubWithTelemetryPreferenceItems,
|
id: "some-test-extension-id",
|
||||||
);
|
manifest: {
|
||||||
|
name: "some-test-extension-name",
|
||||||
|
},
|
||||||
|
rendererOptions: {
|
||||||
|
appPreferences: [
|
||||||
|
{
|
||||||
|
title: "Some telemetry-preference item",
|
||||||
|
id: "some-telemetry-preference-item-id",
|
||||||
|
showInPreferencesTab: "telemetry",
|
||||||
|
|
||||||
|
components: {
|
||||||
|
Hint: () => <div data-testid="some-preference-item-hint" />,
|
||||||
|
Input: () => <div data-testid="some-preference-item-input" />,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
it("renders", () => {
|
||||||
@ -107,8 +123,9 @@ describe("preferences - navigation to telemetry preferences", () => {
|
|||||||
it("given extensions but no telemetry preference items, does not show link for telemetry preferences", () => {
|
it("given extensions but no telemetry preference items, does not show link for telemetry preferences", () => {
|
||||||
builder.extensions.enable({
|
builder.extensions.enable({
|
||||||
id: "some-test-extension-id",
|
id: "some-test-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-test-extension-name",
|
name: "some-test-extension-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
appPreferenceTabs: [
|
appPreferenceTabs: [
|
||||||
{
|
{
|
||||||
@ -205,23 +222,3 @@ describe("preferences - navigation to telemetry preferences", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const extensionStubWithTelemetryPreferenceItems: FakeExtensionOptions = {
|
|
||||||
id: "some-test-extension-id",
|
|
||||||
name: "some-test-extension-name",
|
|
||||||
|
|
||||||
rendererOptions: {
|
|
||||||
appPreferences: [
|
|
||||||
{
|
|
||||||
title: "Some telemetry-preference item",
|
|
||||||
id: "some-telemetry-preference-item-id",
|
|
||||||
showInPreferencesTab: "telemetry",
|
|
||||||
|
|
||||||
components: {
|
|
||||||
Hint: () => <div data-testid="some-preference-item-hint" />,
|
|
||||||
Input: () => <div data-testid="some-preference-item-input" />,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|||||||
@ -28,10 +28,11 @@ describe("preferences: URLs of legacy extensions", () => {
|
|||||||
|
|
||||||
discover = discoverFor(() => rendered);
|
discover = discoverFor(() => rendered);
|
||||||
|
|
||||||
const testExtension = {
|
builder.extensions.enable({
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension",
|
name: "some-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
appPreferenceTabs: [
|
appPreferenceTabs: [
|
||||||
{
|
{
|
||||||
@ -71,9 +72,7 @@ describe("preferences: URLs of legacy extensions", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
|
|
||||||
navigate = builder.applicationWindow.only.di.inject(navigateInjectable);
|
navigate = builder.applicationWindow.only.di.inject(navigateInjectable);
|
||||||
});
|
});
|
||||||
@ -143,10 +142,11 @@ describe("preferences: URLs of legacy extensions", () => {
|
|||||||
|
|
||||||
discover = discoverFor(() => rendered);
|
discover = discoverFor(() => rendered);
|
||||||
|
|
||||||
const testExtension = {
|
builder.extensions.enable({
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension",
|
name: "some-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
appPreferences: [
|
appPreferences: [
|
||||||
{
|
{
|
||||||
@ -160,9 +160,7 @@ describe("preferences: URLs of legacy extensions", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
|
|
||||||
navigate = builder.applicationWindow.only.di.inject(navigateInjectable);
|
navigate = builder.applicationWindow.only.di.inject(navigateInjectable);
|
||||||
});
|
});
|
||||||
@ -203,10 +201,11 @@ describe("preferences: URLs of legacy extensions", () => {
|
|||||||
|
|
||||||
discover = discoverFor(() => rendered);
|
discover = discoverFor(() => rendered);
|
||||||
|
|
||||||
const testExtension = {
|
builder.extensions.enable({
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension",
|
name: "some-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
appPreferenceTabs: [
|
appPreferenceTabs: [
|
||||||
{
|
{
|
||||||
@ -256,9 +255,7 @@ describe("preferences: URLs of legacy extensions", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
|
|
||||||
navigate = builder.applicationWindow.only.di.inject(navigateInjectable);
|
navigate = builder.applicationWindow.only.di.inject(navigateInjectable);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -21,10 +21,13 @@ describe("reactively disable global pages", () => {
|
|||||||
|
|
||||||
someObservable = observable.box(false);
|
someObservable = observable.box(false);
|
||||||
|
|
||||||
const testExtension = {
|
rendered = await builder.render();
|
||||||
id: "test-extension-id",
|
|
||||||
name: "test-extension",
|
|
||||||
|
|
||||||
|
builder.extensions.enable({
|
||||||
|
id: "test-extension-id",
|
||||||
|
manifest: {
|
||||||
|
name: "test-extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
globalPages: [{
|
globalPages: [{
|
||||||
components: {
|
components: {
|
||||||
@ -34,11 +37,7 @@ describe("reactively disable global pages", () => {
|
|||||||
enabled: computed(() => someObservable.get()),
|
enabled: computed(() => someObservable.get()),
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
rendered = await builder.render();
|
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
|
|
||||||
rendererTestExtension = builder.extensions.get("test-extension-id").applicationWindows.only;
|
rendererTestExtension = builder.extensions.get("test-extension-id").applicationWindows.only;
|
||||||
});
|
});
|
||||||
|
|||||||
@ -30,10 +30,12 @@ describe("status-bar-items-originating-from-extensions", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("when multiple extensions with status bar items are loaded, shows items in correct order", () => {
|
it("when multiple extensions with status bar items are loaded, shows items in correct order", () => {
|
||||||
const testExtension1 = {
|
applicationBuilder.extensions.enable(
|
||||||
|
{
|
||||||
id: "some-id",
|
id: "some-id",
|
||||||
|
manifest: {
|
||||||
name: "some-name",
|
name: "some-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
statusBarItems: [
|
statusBarItems: [
|
||||||
{
|
{
|
||||||
@ -44,12 +46,12 @@ describe("status-bar-items-originating-from-extensions", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
},
|
||||||
|
{
|
||||||
const testExtension2 = {
|
|
||||||
id: "some-other-id",
|
id: "some-other-id",
|
||||||
|
manifest: {
|
||||||
name: "some-other-name",
|
name: "some-other-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
statusBarItems: [
|
statusBarItems: [
|
||||||
{
|
{
|
||||||
@ -60,9 +62,8 @@ describe("status-bar-items-originating-from-extensions", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
},
|
||||||
|
);
|
||||||
applicationBuilder.extensions.enable(testExtension1, testExtension2);
|
|
||||||
|
|
||||||
const rightSide = rendered.getByTestId("status-bar-right");
|
const rightSide = rendered.getByTestId("status-bar-right");
|
||||||
|
|
||||||
@ -80,8 +81,9 @@ describe("status-bar-items-originating-from-extensions", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
testExtensionOptions = {
|
testExtensionOptions = {
|
||||||
id: "some-id",
|
id: "some-id",
|
||||||
|
manifest: {
|
||||||
name: "some-name",
|
name: "some-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
statusBarItems: [
|
statusBarItems: [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -33,8 +33,9 @@ describe("extendability-using-extension-api", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
testExtension = {
|
testExtension = {
|
||||||
id: "test-extension",
|
id: "test-extension",
|
||||||
|
manifest: {
|
||||||
name: "Test Extension",
|
name: "Test Extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
topBarItems: [
|
topBarItems: [
|
||||||
{
|
{
|
||||||
@ -78,8 +79,9 @@ describe("extendability-using-extension-api", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
const testExtension: FakeExtensionOptions = {
|
const testExtension: FakeExtensionOptions = {
|
||||||
id: "test-extension",
|
id: "test-extension",
|
||||||
|
manifest: {
|
||||||
name: "Test Extension",
|
name: "Test Extension",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
topBarItems: [
|
topBarItems: [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -34,7 +34,9 @@ describe("clicking tray menu item originating from extension", () => {
|
|||||||
|
|
||||||
someExtension = {
|
someExtension = {
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension-name",
|
name: "some-extension-name",
|
||||||
|
},
|
||||||
mainOptions: {
|
mainOptions: {
|
||||||
trayMenus: [{ label: "some-label", click: clickMock }],
|
trayMenus: [{ label: "some-label", click: clickMock }],
|
||||||
},
|
},
|
||||||
|
|||||||
@ -26,10 +26,11 @@ describe("preferences: extension adding tray items", () => {
|
|||||||
someObservableForEnabled = observable.box(false);
|
someObservableForEnabled = observable.box(false);
|
||||||
someObservableLabel = observable.box("Some label");
|
someObservableLabel = observable.box("Some label");
|
||||||
|
|
||||||
const testExtension = {
|
builder.extensions.enable({
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension",
|
name: "some-extension",
|
||||||
|
},
|
||||||
mainOptions: {
|
mainOptions: {
|
||||||
trayMenus: [
|
trayMenus: [
|
||||||
{
|
{
|
||||||
@ -80,9 +81,7 @@ describe("preferences: extension adding tray items", () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("given controlled label", () => {
|
describe("given controlled label", () => {
|
||||||
@ -214,16 +213,15 @@ describe("preferences: extension adding tray items", () => {
|
|||||||
|
|
||||||
const computedTrayMenu = computed(() => menuItems);
|
const computedTrayMenu = computed(() => menuItems);
|
||||||
|
|
||||||
const testExtension = {
|
builder.extensions.enable({
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension",
|
name: "some-extension",
|
||||||
|
},
|
||||||
mainOptions: {
|
mainOptions: {
|
||||||
trayMenus: computedTrayMenu,
|
trayMenus: computedTrayMenu,
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
builder.extensions.enable(testExtension);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("given item exists, it's shown", () => {
|
it("given item exists, it's shown", () => {
|
||||||
|
|||||||
@ -21,17 +21,16 @@ describe("multiple separators originating from extension", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("given extension with multiple separators, when extension is enabled, does not throw", () => {
|
it("given extension with multiple separators, when extension is enabled, does not throw", () => {
|
||||||
const someExtension = {
|
expect(() => {
|
||||||
|
builder.extensions.enable({
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension",
|
name: "some-extension",
|
||||||
|
},
|
||||||
mainOptions: {
|
mainOptions: {
|
||||||
trayMenus: [{ type: "separator" as const }, { type: "separator" as const } ],
|
trayMenus: [{ type: "separator" as const }, { type: "separator" as const } ],
|
||||||
},
|
},
|
||||||
};
|
});
|
||||||
|
|
||||||
expect(() => {
|
|
||||||
builder.extensions.enable(someExtension);
|
|
||||||
}).not.toThrow();
|
}).not.toThrow();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -31,7 +31,9 @@ describe("Banners from extensions", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
builder.extensions.enable({
|
builder.extensions.enable({
|
||||||
id: "some-id",
|
id: "some-id",
|
||||||
|
manifest: {
|
||||||
name: "some-name",
|
name: "some-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
welcomeBanners: [
|
welcomeBanners: [
|
||||||
{
|
{
|
||||||
@ -55,7 +57,9 @@ describe("Banners from extensions", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
builder.extensions.enable({
|
builder.extensions.enable({
|
||||||
id: "some-id",
|
id: "some-id",
|
||||||
|
manifest: {
|
||||||
name: "some-name",
|
name: "some-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
welcomeBanners: [
|
welcomeBanners: [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -32,7 +32,7 @@ describe("setting-welcome-page", () => {
|
|||||||
windowDi.override(welcomeRouteConfigInjectable, () => "/welcome");
|
windowDi.override(welcomeRouteConfigInjectable, () => "/welcome");
|
||||||
});
|
});
|
||||||
|
|
||||||
// enable the extension even though the welcomeRoute is not overriden
|
// enable the extension even though the welcomeRoute is not overridden
|
||||||
applicationBuilder.extensions.enable(extensionWithWelcomePage);
|
applicationBuilder.extensions.enable(extensionWithWelcomePage);
|
||||||
rendered = await applicationBuilder.render();
|
rendered = await applicationBuilder.render();
|
||||||
|
|
||||||
@ -84,8 +84,9 @@ describe("setting-welcome-page", () => {
|
|||||||
|
|
||||||
const extensionWithWelcomePage: FakeExtensionOptions = {
|
const extensionWithWelcomePage: FakeExtensionOptions = {
|
||||||
id: "some-extension-id",
|
id: "some-extension-id",
|
||||||
|
manifest: {
|
||||||
name: "some-extension-name",
|
name: "some-extension-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
globalPages: [
|
globalPages: [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -31,8 +31,9 @@ describe("<StatusBar />", () => {
|
|||||||
|
|
||||||
builder.extensions.enable({
|
builder.extensions.enable({
|
||||||
id: "some-id",
|
id: "some-id",
|
||||||
|
manifest: {
|
||||||
name: "some-name",
|
name: "some-name",
|
||||||
|
},
|
||||||
rendererOptions: {
|
rendererOptions: {
|
||||||
statusBarItems,
|
statusBarItems,
|
||||||
},
|
},
|
||||||
@ -61,7 +62,7 @@ describe("<StatusBar />", () => {
|
|||||||
|
|
||||||
it("renders items [{item: React.ReactNode}] (4.0.0-rc.1)", async () => {
|
it("renders items [{item: React.ReactNode}] (4.0.0-rc.1)", async () => {
|
||||||
const testId = "testId";
|
const testId = "testId";
|
||||||
const text = "heee";
|
const text = "help";
|
||||||
|
|
||||||
builder.beforeWindowStart((windowDi) => {
|
builder.beforeWindowStart((windowDi) => {
|
||||||
windowDi.override(statusBarItemsInjectable, () => computed(() => ({
|
windowDi.override(statusBarItemsInjectable, () => computed(() => ({
|
||||||
@ -77,7 +78,7 @@ describe("<StatusBar />", () => {
|
|||||||
|
|
||||||
it("renders items [{item: () => React.ReactNode}] (4.0.0-rc.1+)", async () => {
|
it("renders items [{item: () => React.ReactNode}] (4.0.0-rc.1+)", async () => {
|
||||||
const testId = "testId";
|
const testId = "testId";
|
||||||
const text = "heee";
|
const text = "help";
|
||||||
|
|
||||||
statusBarItems.replace([{
|
statusBarItems.replace([{
|
||||||
item: () => <span data-testid={testId} >{text}</span>,
|
item: () => <span data-testid={testId} >{text}</span>,
|
||||||
@ -117,8 +118,8 @@ describe("<StatusBar />", () => {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
const { getAllByTestId } = await builder.render();
|
const { getAllByTestId } = await builder.render();
|
||||||
const elems = getAllByTestId("sortedElem");
|
const elements = getAllByTestId("sortedElem");
|
||||||
const positions = elems.map(elem => elem.textContent);
|
const positions = elements.map(elem => elem.textContent);
|
||||||
|
|
||||||
expect(positions).toEqual(["left1", "left2", "right2", "right1"]);
|
expect(positions).toEqual(["left1", "left2", "right2", "right1"]);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -569,29 +569,16 @@ export const getApplicationBuilder = () => {
|
|||||||
|
|
||||||
enable: (...extensions) => {
|
enable: (...extensions) => {
|
||||||
builder.afterWindowStart((windowDi) => {
|
builder.afterWindowStart((windowDi) => {
|
||||||
const rendererExtensionInstances = extensions.map((options) =>
|
extensions
|
||||||
getExtensionFakeForRenderer(
|
.map(getExtensionFakeForRenderer)
|
||||||
windowDi,
|
.forEach(enableExtensionFor(windowDi, rendererExtensionsStateInjectable));
|
||||||
options.id,
|
|
||||||
options.name,
|
|
||||||
options.rendererOptions || {},
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
rendererExtensionInstances.forEach(
|
|
||||||
enableExtensionFor(windowDi, rendererExtensionsStateInjectable),
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.afterApplicationStart((mainDi) => {
|
builder.afterApplicationStart((mainDi) => {
|
||||||
const mainExtensionInstances = extensions.map((extension) =>
|
|
||||||
getExtensionFakeForMain(mainDi, extension.id, extension.name, extension.mainOptions || {}),
|
|
||||||
);
|
|
||||||
|
|
||||||
runInAction(() => {
|
runInAction(() => {
|
||||||
mainExtensionInstances.forEach(
|
extensions
|
||||||
enableExtensionFor(mainDi, mainExtensionsStateInjectable),
|
.map(getExtensionFakeForMain)
|
||||||
);
|
.forEach(enableExtensionFor(mainDi, mainExtensionsStateInjectable));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|||||||
@ -2,21 +2,26 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||||
*/
|
*/
|
||||||
|
import type { LensMainExtensionParts } from "../../../extensions/lens-main-extension";
|
||||||
import { LensMainExtension } from "../../../extensions/lens-main-extension";
|
import { LensMainExtension } from "../../../extensions/lens-main-extension";
|
||||||
|
import type { LensRendererExtensionParts } from "../../../extensions/lens-renderer-extension";
|
||||||
import { LensRendererExtension } from "../../../extensions/lens-renderer-extension";
|
import { LensRendererExtension } from "../../../extensions/lens-renderer-extension";
|
||||||
import type { DiContainer } from "@ogre-tools/injectable";
|
import type { SetRequired } from "type-fest";
|
||||||
|
import type { LensExtensionManifest } from "../../../features/extensions/common/installed-extension";
|
||||||
|
|
||||||
export class TestExtensionMain extends LensMainExtension {}
|
export class TestExtensionMain extends LensMainExtension {}
|
||||||
export class TestExtensionRenderer extends LensRendererExtension {}
|
export class TestExtensionRenderer extends LensRendererExtension {}
|
||||||
|
|
||||||
|
type FakeManifest = SetRequired<Partial<LensExtensionManifest>, "name">;
|
||||||
|
|
||||||
export interface FakeExtensionOptions {
|
export interface FakeExtensionOptions {
|
||||||
id: string;
|
id: string;
|
||||||
name: string;
|
manifest: FakeManifest;
|
||||||
rendererOptions?: Partial<LensRendererExtension>;
|
rendererOptions?: Partial<LensRendererExtensionParts>;
|
||||||
mainOptions?: Partial<LensMainExtension>;
|
mainOptions?: Partial<LensMainExtensionParts>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getExtensionFakeForMain = (di: DiContainer, id: string, name: string, options: Partial<LensMainExtension>) => (
|
export const getExtensionFakeForMain = ({ id, manifest, mainOptions: options = {}}: FakeExtensionOptions) => (
|
||||||
Object.assign(
|
Object.assign(
|
||||||
new TestExtensionMain({
|
new TestExtensionMain({
|
||||||
id,
|
id,
|
||||||
@ -25,11 +30,11 @@ export const getExtensionFakeForMain = (di: DiContainer, id: string, name: strin
|
|||||||
isCompatible: false,
|
isCompatible: false,
|
||||||
isEnabled: false,
|
isEnabled: false,
|
||||||
manifest: {
|
manifest: {
|
||||||
name,
|
|
||||||
version: "1.0.0",
|
version: "1.0.0",
|
||||||
engines: {
|
engines: {
|
||||||
lens: "^5.5.0",
|
lens: "^5.5.0",
|
||||||
},
|
},
|
||||||
|
...manifest,
|
||||||
},
|
},
|
||||||
manifestPath: "irrelevant",
|
manifestPath: "irrelevant",
|
||||||
}),
|
}),
|
||||||
@ -37,7 +42,7 @@ export const getExtensionFakeForMain = (di: DiContainer, id: string, name: strin
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
export const getExtensionFakeForRenderer = (di: DiContainer, id: string, name: string, options: Partial<LensRendererExtension>) => (
|
export const getExtensionFakeForRenderer = ({ id, manifest, rendererOptions: options = {}}: FakeExtensionOptions) => (
|
||||||
Object.assign(
|
Object.assign(
|
||||||
new TestExtensionRenderer({
|
new TestExtensionRenderer({
|
||||||
id,
|
id,
|
||||||
@ -46,11 +51,11 @@ export const getExtensionFakeForRenderer = (di: DiContainer, id: string, name: s
|
|||||||
isCompatible: false,
|
isCompatible: false,
|
||||||
isEnabled: false,
|
isEnabled: false,
|
||||||
manifest: {
|
manifest: {
|
||||||
name,
|
|
||||||
version: "1.0.0",
|
version: "1.0.0",
|
||||||
engines: {
|
engines: {
|
||||||
lens: "^5.5.0",
|
lens: "^5.5.0",
|
||||||
},
|
},
|
||||||
|
...manifest,
|
||||||
},
|
},
|
||||||
manifestPath: "irrelevant",
|
manifestPath: "irrelevant",
|
||||||
}),
|
}),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user