1
0
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:
Sebastian Malton 2023-02-24 16:38:38 -05:00
parent 84640ce533
commit c244e9f2b3
38 changed files with 392 additions and 389 deletions

View File

@ -38,17 +38,9 @@ describe("configurable directories for extension files", () => {
testExtensionOptions = {
id: "some-extension",
name: "some-extension-name",
mainOptions: {
manifest: {
name: "irrelevant",
storeName: "some-specific-store-name",
version: "0",
engines: {
lens: "0",
},
},
manifest: {
name: "some-extension-name",
storeName: "some-specific-store-name",
},
};
@ -73,17 +65,8 @@ describe("configurable directories for extension files", () => {
testExtensionOptions = {
id: "some-extension",
name: "some-extension-name",
mainOptions: {
manifest: {
name: "some-package-name",
storeName: undefined,
version: "0",
engines: {
lens: "0",
},
},
manifest: {
name: "some-extension-name",
},
};

View File

@ -21,6 +21,10 @@ export interface LensExtensionDependencies {
export const Disposers = Symbol("disposers");
export interface LensExtensionParts {
protocolHandlers: ProtocolHandlerRegistration[];
}
export class LensExtension {
get id() {
return this.extension.id;

View File

@ -3,7 +3,7 @@
* 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 type { CatalogEntity } from "../common/catalog";
import type { IComputedValue, IObservableArray } from "mobx";
@ -25,6 +25,11 @@ interface LensMainExtensionDependencies extends LensExtensionDependencies {
readonly navigate: NavigateForExtension;
}
export interface LensMainExtensionParts extends LensExtensionParts {
appMenus: MenuRegistration[] | IComputedValue<MenuRegistration[]>;
trayMenus: TrayMenuRegistration[] | IComputedValue<TrayMenuRegistration[]>;
}
export class LensMainExtension extends LensExtension {
appMenus: MenuRegistration[] | IComputedValue<MenuRegistration[]> = [];
trayMenus: TrayMenuRegistration[] | IComputedValue<TrayMenuRegistration[]> = [];

View File

@ -3,7 +3,7 @@
* 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 type { CatalogEntity, CategoryFilter, CatalogCategoryRegistry } from "../common/catalog";
import type { Disposer } from "../common/utils";
@ -53,6 +53,30 @@ interface LensRendererExtensionDependencies extends LensExtensionDependencies {
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 {
globalPages: PageRegistration[] = [];
clusterPages: PageRegistration[] = [];

View File

@ -45,8 +45,9 @@ describe("application-menu-in-legacy-extension-api", () => {
testExtensionOptions = {
id: "some-test-extension",
name: "some-extension-name",
manifest: {
name: "some-extension-name",
},
mainOptions: {
appMenus: [
{
@ -151,8 +152,9 @@ describe("application-menu-in-legacy-extension-api", () => {
beforeEach(() => {
const testExtensionOptions: FakeExtensionOptions = {
id: "some-test-extension",
name: "some-extension-name",
manifest: {
name: "some-extension-name",
},
mainOptions: {
appMenus: [
{

View File

@ -103,7 +103,9 @@ describe("custom category columns for catalog", () => {
beforeEach(() => {
builder.extensions.enable({
id: "some-id",
name: "some-name",
manifest: {
name: "some-name",
},
rendererOptions: {
additionalCategoryColumns: [
{

View File

@ -24,10 +24,13 @@ describe("disable-cluster-pages-when-cluster-is-not-relevant", () => {
isEnabledForClusterMock = asyncFn();
const testExtension = {
id: "test-extension-id",
name: "test-extension",
rendered = await builder.render();
builder.extensions.enable({
id: "test-extension-id",
manifest: {
name: "test-extension",
},
rendererOptions: {
isEnabledForCluster: isEnabledForClusterMock,
@ -37,11 +40,7 @@ describe("disable-cluster-pages-when-cluster-is-not-relevant", () => {
},
}],
},
};
rendered = await builder.render();
builder.extensions.enable(testExtension);
});
rendererTestExtension =
builder.extensions.get("test-extension-id").applicationWindows.only;

View File

@ -22,10 +22,13 @@ describe("disable sidebar items when cluster is not relevant", () => {
isEnabledForClusterMock = asyncFn();
const testExtension = {
id: "test-extension-id",
name: "test-extension",
rendered = await builder.render();
builder.extensions.enable({
id: "test-extension-id",
manifest: {
name: "test-extension",
},
rendererOptions: {
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", () => {

View File

@ -23,10 +23,13 @@ describe("reactively disable cluster pages", () => {
someObservable = observable.box(false);
const testExtensionOptions = {
id: "test-extension-id",
name: "test-extension",
rendered = await builder.render();
builder.extensions.enable({
id: "test-extension-id",
manifest: {
name: "test-extension",
},
rendererOptions: {
clusterPages: [{
components: {
@ -36,11 +39,7 @@ describe("reactively disable cluster pages", () => {
enabled: computed(() => someObservable.get()),
}],
},
};
rendered = await builder.render();
builder.extensions.enable(testExtensionOptions);
});
testExtensionInstance =
builder.extensions.get("test-extension-id").applicationWindows.only;

View File

@ -42,10 +42,18 @@ describe("disable kube object detail items when cluster is not relevant", () =>
isEnabledForClusterMock = asyncFn();
const testExtension = {
id: "test-extension-id",
name: "test-extension",
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({
id: "test-extension-id",
manifest: {
name: "test-extension",
},
rendererOptions: {
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", () => {

View File

@ -41,10 +41,18 @@ describe("reactively hide kube object detail item", () => {
someObservable = observable.box(false);
const testExtension = {
id: "test-extension-id",
name: "test-extension",
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({
id: "test-extension-id",
manifest: {
name: "test-extension",
},
rendererOptions: {
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", () => {

View File

@ -37,10 +37,20 @@ describe("disable kube object menu items when cluster is not relevant", () => {
isEnabledForClusterMock = asyncFn();
const testExtension = {
id: "test-extension-id",
name: "test-extension",
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({
id: "test-extension-id",
manifest: {
name: "test-extension",
},
rendererOptions: {
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", () => {

View File

@ -33,10 +33,20 @@ describe("reactively hide kube object menu item", () => {
someObservable = observable.box(false);
const testExtension = {
id: "test-extension-id",
name: "test-extension",
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({
id: "test-extension-id",
manifest: {
name: "test-extension",
},
rendererOptions: {
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", () => {

View File

@ -38,10 +38,20 @@ describe("disable kube object statuses when cluster is not relevant", () => {
isEnabledForClusterMock = asyncFn();
const testExtension = {
id: "test-extension-id",
name: "test-extension",
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({
id: "test-extension-id",
manifest: {
name: "test-extension",
},
rendererOptions: {
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", () => {

View File

@ -34,10 +34,20 @@ describe("reactively hide kube object status", () => {
someObservable = observable.box(false);
const testExtension = {
id: "test-extension-id",
name: "test-extension",
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({
id: "test-extension-id",
manifest: {
name: "test-extension",
},
rendererOptions: {
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", () => {

View File

@ -25,10 +25,12 @@ describe("legacy extension adding cluster frame components", () => {
beforeEach(async () => {
someObservable = observable.box(false);
const testExtension = {
rendered = await builder.render();
builder.extensions.enable({
id: "some-extension-id",
name: "some-extension-name",
manifest: {
name: "some-extension-name",
},
rendererOptions: {
clusterFrameComponents: [
{
@ -43,10 +45,7 @@ describe("legacy extension adding cluster frame components", () => {
},
],
},
};
rendered = await builder.render();
builder.extensions.enable(testExtension);
});
});
it("renders", () => {

View File

@ -50,10 +50,11 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
beforeEach(() => {
someObservable = observable.box(false);
const testExtension = {
applicationBuilder.extensions.enable({
id: "some-extension-id",
name: "some-extension-name",
manifest: {
name: "some-extension-name",
},
rendererOptions: {
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", () => {
@ -458,10 +457,11 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
beforeEach(() => {
someObservable = observable.box(false);
const testExtension = {
applicationBuilder.extensions.enable({
id: "some-extension-id",
name: "some-extension-name",
manifest: {
name: "some-extension-name",
},
rendererOptions: {
clusterPages: [
{
@ -526,9 +526,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => {
},
] as ClusterPageMenuRegistration[],
},
};
applicationBuilder.extensions.enable(testExtension);
});
});
describe("given no state for expanded sidebar items exists, and navigated to child sidebar item, when rendered", () => {

View File

@ -25,10 +25,21 @@ describe("disable workloads overview details when cluster is not relevant", () =
isEnabledForClusterMock = asyncFn();
const testExtension = {
id: "test-extension-id",
name: "test-extension",
rendered = await builder.render();
const windowDi = builder.applicationWindow.only.di;
const navigateToWorkloadsOverview = windowDi.inject(
navigateToWorkloadsOverviewInjectable,
);
navigateToWorkloadsOverview();
builder.extensions.enable({
id: "test-extension-id",
manifest: {
name: "test-extension",
},
rendererOptions: {
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", () => {

View File

@ -33,10 +33,11 @@ describe("order of workload overview details", () => {
rendered = await builder.render();
const testExtension = {
builder.extensions.enable({
id: "some-extension-id",
name: "some-extension",
manifest: {
name: "some-extension",
},
rendererOptions: {
kubeWorkloadsOverviewItems: [
{
@ -73,9 +74,7 @@ describe("order of workload overview details", () => {
},
],
},
};
builder.extensions.enable(testExtension);
});
});
it("shows items in correct order", () => {

View File

@ -22,10 +22,21 @@ describe("reactively hide workloads overview details item", () => {
someObservable = observable.box(false);
const testExtension = {
id: "test-extension-id",
name: "test-extension",
rendered = await builder.render();
const windowDi = builder.applicationWindow.only.di;
const navigateToWorkloadsOverview = windowDi.inject(
navigateToWorkloadsOverviewInjectable,
);
navigateToWorkloadsOverview();
builder.extensions.enable({
id: "test-extension-id",
manifest: {
name: "test-extension",
},
rendererOptions: {
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", () => {

View File

@ -51,8 +51,9 @@ describe("extension special characters in page registrations", () => {
const extensionWithPagesHavingSpecialCharacters: FakeExtensionOptions = {
id: "some-extension-id",
name: "@some-extension-name/",
manifest: {
name: "@some-extension-name/",
},
rendererOptions: {
globalPages: [
{

View File

@ -125,8 +125,9 @@ describe("navigate to extension page", () => {
const extensionWithPagesHavingParameters: FakeExtensionOptions = {
id: "some-extension-id",
name: "some-extension-name",
manifest: {
name: "some-extension-name",
},
rendererOptions: {
globalPages: [
{

View File

@ -32,10 +32,11 @@ describe("preferences: extension adding preference tabs", () => {
someObservable = observable.box(false);
const testExtension = {
builder.extensions.enable({
id: "some-extension-id",
name: "some-extension",
manifest: {
name: "some-extension",
},
rendererOptions: {
appPreferenceTabs: [
{
@ -89,9 +90,7 @@ describe("preferences: extension adding preference tabs", () => {
},
],
},
};
builder.extensions.enable(testExtension);
});
});
it("renders", () => {

View File

@ -9,7 +9,6 @@ import { getApplicationBuilder } from "../../renderer/components/test-utils/get-
import navigateToProxyPreferencesInjectable from "./common/navigate-to-proxy-preferences.injectable";
import type { Discover } 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", () => {
let builder: ApplicationBuilder;
@ -47,9 +46,26 @@ describe("preferences - navigation to application preferences", () => {
describe("when extension with application preference items gets enabled", () => {
beforeEach(() => {
builder.extensions.enable(
extensionStubWithApplicationPreferenceItems,
);
builder.extensions.enable({
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", () => {
@ -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" />,
},
},
],
},
};

View File

@ -335,8 +335,9 @@ describe("preferences - navigation to extension specific preferences", () => {
const extensionStubWithExtensionSpecificPreferenceItems: FakeExtensionOptions = {
id: "some-test-extension-id",
name: "some-test-extension-id",
manifest: {
name: "some-test-extension-id",
},
rendererOptions: {
appPreferences: [
{
@ -365,8 +366,9 @@ const extensionStubWithExtensionSpecificPreferenceItems: FakeExtensionOptions =
const someOtherExtensionStubWithExtensionSpecificPreferenceItems: FakeExtensionOptions = {
id: "some-other-test-extension-id",
name: "some-other-test-extension-id",
manifest: {
name: "some-other-test-extension-id",
},
rendererOptions: {
appPreferences: [
{
@ -384,13 +386,16 @@ const someOtherExtensionStubWithExtensionSpecificPreferenceItems: FakeExtensionO
const extensionStubWithoutPreferences: FakeExtensionOptions = {
id: "without-preferences-id",
name: "without-preferences-id",
manifest: {
name: "without-preferences-id",
},
};
const extensionStubWithShowInPreferencesTab: FakeExtensionOptions = {
id: "specified-preferences-page-id",
name: "specified-preferences-page-name",
manifest: {
name: "specified-preferences-page-name",
},
rendererOptions: {
appPreferences: [
{
@ -409,8 +414,9 @@ const extensionStubWithShowInPreferencesTab: FakeExtensionOptions = {
const extensionStubWithRegisteredTab: FakeExtensionOptions = {
id: "registered-tab-page-id",
name: "registered-tab-page-id",
manifest: {
name: "registered-tab-page-id",
},
rendererOptions: {
appPreferences: [
{
@ -455,8 +461,9 @@ const extensionStubWithRegisteredTab: FakeExtensionOptions = {
const extensionStubWithSameRegisteredTab: FakeExtensionOptions = {
id: "duplicated-tab-page-id",
name: "duplicated-tab-page-id",
manifest: {
name: "duplicated-tab-page-id",
},
rendererOptions: {
appPreferences: [
{

View File

@ -8,7 +8,6 @@ import type { ApplicationBuilder } from "../../renderer/components/test-utils/ge
import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
import navigateToTelemetryPreferencesInjectable from "./common/navigate-to-telemetry-preferences.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 { 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", () => {
beforeEach(() => {
builder.extensions.enable(
extensionStubWithTelemetryPreferenceItems,
);
builder.extensions.enable({
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", () => {
@ -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", () => {
builder.extensions.enable({
id: "some-test-extension-id",
name: "some-test-extension-name",
manifest: {
name: "some-test-extension-name",
},
rendererOptions: {
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" />,
},
},
],
},
};

View File

@ -28,10 +28,11 @@ describe("preferences: URLs of legacy extensions", () => {
discover = discoverFor(() => rendered);
const testExtension = {
builder.extensions.enable({
id: "some-extension-id",
name: "some-extension",
manifest: {
name: "some-extension",
},
rendererOptions: {
appPreferenceTabs: [
{
@ -71,9 +72,7 @@ describe("preferences: URLs of legacy extensions", () => {
},
],
},
};
builder.extensions.enable(testExtension);
});
navigate = builder.applicationWindow.only.di.inject(navigateInjectable);
});
@ -143,10 +142,11 @@ describe("preferences: URLs of legacy extensions", () => {
discover = discoverFor(() => rendered);
const testExtension = {
builder.extensions.enable({
id: "some-extension-id",
name: "some-extension",
manifest: {
name: "some-extension",
},
rendererOptions: {
appPreferences: [
{
@ -160,9 +160,7 @@ describe("preferences: URLs of legacy extensions", () => {
},
],
},
};
builder.extensions.enable(testExtension);
});
navigate = builder.applicationWindow.only.di.inject(navigateInjectable);
});
@ -203,10 +201,11 @@ describe("preferences: URLs of legacy extensions", () => {
discover = discoverFor(() => rendered);
const testExtension = {
builder.extensions.enable({
id: "some-extension-id",
name: "some-extension",
manifest: {
name: "some-extension",
},
rendererOptions: {
appPreferenceTabs: [
{
@ -256,9 +255,7 @@ describe("preferences: URLs of legacy extensions", () => {
},
],
},
};
builder.extensions.enable(testExtension);
});
navigate = builder.applicationWindow.only.di.inject(navigateInjectable);
});

View File

@ -21,10 +21,13 @@ describe("reactively disable global pages", () => {
someObservable = observable.box(false);
const testExtension = {
id: "test-extension-id",
name: "test-extension",
rendered = await builder.render();
builder.extensions.enable({
id: "test-extension-id",
manifest: {
name: "test-extension",
},
rendererOptions: {
globalPages: [{
components: {
@ -34,11 +37,7 @@ describe("reactively disable global pages", () => {
enabled: computed(() => someObservable.get()),
}],
},
};
rendered = await builder.render();
builder.extensions.enable(testExtension);
});
rendererTestExtension = builder.extensions.get("test-extension-id").applicationWindows.only;
});

View File

@ -30,39 +30,40 @@ describe("status-bar-items-originating-from-extensions", () => {
});
it("when multiple extensions with status bar items are loaded, shows items in correct order", () => {
const testExtension1 = {
id: "some-id",
name: "some-name",
rendererOptions: {
statusBarItems: [
{
components: {
Item: () => <div data-testid="some-testId">extension1</div>,
position: "right" as const,
applicationBuilder.extensions.enable(
{
id: "some-id",
manifest: {
name: "some-name",
},
rendererOptions: {
statusBarItems: [
{
components: {
Item: () => <div data-testid="some-testId">extension1</div>,
position: "right" as const,
},
},
},
],
],
},
},
};
const testExtension2 = {
id: "some-other-id",
name: "some-other-name",
rendererOptions: {
statusBarItems: [
{
components: {
Item: () => <div data-testid="some-testId">extension2</div>,
position: "right" as const,
{
id: "some-other-id",
manifest: {
name: "some-other-name",
},
rendererOptions: {
statusBarItems: [
{
components: {
Item: () => <div data-testid="some-testId">extension2</div>,
position: "right" as const,
},
},
},
],
],
},
},
};
applicationBuilder.extensions.enable(testExtension1, testExtension2);
);
const rightSide = rendered.getByTestId("status-bar-right");
@ -80,8 +81,9 @@ describe("status-bar-items-originating-from-extensions", () => {
beforeEach(() => {
testExtensionOptions = {
id: "some-id",
name: "some-name",
manifest: {
name: "some-name",
},
rendererOptions: {
statusBarItems: [
{

View File

@ -33,8 +33,9 @@ describe("extendability-using-extension-api", () => {
beforeEach(() => {
testExtension = {
id: "test-extension",
name: "Test Extension",
manifest: {
name: "Test Extension",
},
rendererOptions: {
topBarItems: [
{
@ -78,8 +79,9 @@ describe("extendability-using-extension-api", () => {
beforeEach(() => {
const testExtension: FakeExtensionOptions = {
id: "test-extension",
name: "Test Extension",
manifest: {
name: "Test Extension",
},
rendererOptions: {
topBarItems: [
{

View File

@ -34,7 +34,9 @@ describe("clicking tray menu item originating from extension", () => {
someExtension = {
id: "some-extension-id",
name: "some-extension-name",
manifest: {
name: "some-extension-name",
},
mainOptions: {
trayMenus: [{ label: "some-label", click: clickMock }],
},

View File

@ -26,10 +26,11 @@ describe("preferences: extension adding tray items", () => {
someObservableForEnabled = observable.box(false);
someObservableLabel = observable.box("Some label");
const testExtension = {
builder.extensions.enable({
id: "some-extension-id",
name: "some-extension",
manifest: {
name: "some-extension",
},
mainOptions: {
trayMenus: [
{
@ -80,9 +81,7 @@ describe("preferences: extension adding tray items", () => {
},
],
},
};
builder.extensions.enable(testExtension);
});
});
describe("given controlled label", () => {
@ -214,16 +213,15 @@ describe("preferences: extension adding tray items", () => {
const computedTrayMenu = computed(() => menuItems);
const testExtension = {
builder.extensions.enable({
id: "some-extension-id",
name: "some-extension",
manifest: {
name: "some-extension",
},
mainOptions: {
trayMenus: computedTrayMenu,
},
};
builder.extensions.enable(testExtension);
});
});
it("given item exists, it's shown", () => {

View File

@ -21,17 +21,16 @@ describe("multiple separators originating from extension", () => {
});
it("given extension with multiple separators, when extension is enabled, does not throw", () => {
const someExtension = {
id: "some-extension-id",
name: "some-extension",
mainOptions: {
trayMenus: [{ type: "separator" as const }, { type: "separator" as const } ],
},
};
expect(() => {
builder.extensions.enable(someExtension);
builder.extensions.enable({
id: "some-extension-id",
manifest: {
name: "some-extension",
},
mainOptions: {
trayMenus: [{ type: "separator" as const }, { type: "separator" as const } ],
},
});
}).not.toThrow();
});
});

View File

@ -31,7 +31,9 @@ describe("Banners from extensions", () => {
beforeEach(() => {
builder.extensions.enable({
id: "some-id",
name: "some-name",
manifest: {
name: "some-name",
},
rendererOptions: {
welcomeBanners: [
{
@ -55,7 +57,9 @@ describe("Banners from extensions", () => {
beforeEach(() => {
builder.extensions.enable({
id: "some-id",
name: "some-name",
manifest: {
name: "some-name",
},
rendererOptions: {
welcomeBanners: [
{

View File

@ -32,7 +32,7 @@ describe("setting-welcome-page", () => {
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);
rendered = await applicationBuilder.render();
@ -84,8 +84,9 @@ describe("setting-welcome-page", () => {
const extensionWithWelcomePage: FakeExtensionOptions = {
id: "some-extension-id",
name: "some-extension-name",
manifest: {
name: "some-extension-name",
},
rendererOptions: {
globalPages: [
{

View File

@ -31,8 +31,9 @@ describe("<StatusBar />", () => {
builder.extensions.enable({
id: "some-id",
name: "some-name",
manifest: {
name: "some-name",
},
rendererOptions: {
statusBarItems,
},
@ -61,7 +62,7 @@ describe("<StatusBar />", () => {
it("renders items [{item: React.ReactNode}] (4.0.0-rc.1)", async () => {
const testId = "testId";
const text = "heee";
const text = "help";
builder.beforeWindowStart((windowDi) => {
windowDi.override(statusBarItemsInjectable, () => computed(() => ({
@ -77,7 +78,7 @@ describe("<StatusBar />", () => {
it("renders items [{item: () => React.ReactNode}] (4.0.0-rc.1+)", async () => {
const testId = "testId";
const text = "heee";
const text = "help";
statusBarItems.replace([{
item: () => <span data-testid={testId} >{text}</span>,
@ -117,8 +118,8 @@ describe("<StatusBar />", () => {
]);
const { getAllByTestId } = await builder.render();
const elems = getAllByTestId("sortedElem");
const positions = elems.map(elem => elem.textContent);
const elements = getAllByTestId("sortedElem");
const positions = elements.map(elem => elem.textContent);
expect(positions).toEqual(["left1", "left2", "right2", "right1"]);
});

View File

@ -569,29 +569,16 @@ export const getApplicationBuilder = () => {
enable: (...extensions) => {
builder.afterWindowStart((windowDi) => {
const rendererExtensionInstances = extensions.map((options) =>
getExtensionFakeForRenderer(
windowDi,
options.id,
options.name,
options.rendererOptions || {},
),
);
rendererExtensionInstances.forEach(
enableExtensionFor(windowDi, rendererExtensionsStateInjectable),
);
extensions
.map(getExtensionFakeForRenderer)
.forEach(enableExtensionFor(windowDi, rendererExtensionsStateInjectable));
});
builder.afterApplicationStart((mainDi) => {
const mainExtensionInstances = extensions.map((extension) =>
getExtensionFakeForMain(mainDi, extension.id, extension.name, extension.mainOptions || {}),
);
runInAction(() => {
mainExtensionInstances.forEach(
enableExtensionFor(mainDi, mainExtensionsStateInjectable),
);
extensions
.map(getExtensionFakeForMain)
.forEach(enableExtensionFor(mainDi, mainExtensionsStateInjectable));
});
});
},

View File

@ -2,21 +2,26 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* 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 type { LensRendererExtensionParts } 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 TestExtensionRenderer extends LensRendererExtension {}
type FakeManifest = SetRequired<Partial<LensExtensionManifest>, "name">;
export interface FakeExtensionOptions {
id: string;
name: string;
rendererOptions?: Partial<LensRendererExtension>;
mainOptions?: Partial<LensMainExtension>;
manifest: FakeManifest;
rendererOptions?: Partial<LensRendererExtensionParts>;
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(
new TestExtensionMain({
id,
@ -25,11 +30,11 @@ export const getExtensionFakeForMain = (di: DiContainer, id: string, name: strin
isCompatible: false,
isEnabled: false,
manifest: {
name,
version: "1.0.0",
engines: {
lens: "^5.5.0",
},
...manifest,
},
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(
new TestExtensionRenderer({
id,
@ -46,11 +51,11 @@ export const getExtensionFakeForRenderer = (di: DiContainer, id: string, name: s
isCompatible: false,
isEnabled: false,
manifest: {
name,
version: "1.0.0",
engines: {
lens: "^5.5.0",
},
...manifest,
},
manifestPath: "irrelevant",
}),