1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Adjusting <Extension/> and its tests

Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
Alex Andreev 2022-06-08 14:38:05 +03:00
parent 6def928883
commit 2011c5dc64
2 changed files with 71 additions and 56 deletions

View File

@ -9,11 +9,74 @@ import type { DiContainer } from "@ogre-tools/injectable";
import { getDiForUnitTesting } from "../../../getDiForUnitTesting";
import { type DiRender, renderFor } from "../../test-utils/renderFor";
import { Extensions } from "../extensions";
import type { LensRendererExtension } from "../../../../extensions/lens-renderer-extension";
import rendererExtensionsInjectable from "../../../../extensions/renderer-extensions.injectable";
import { computed } from "mobx";
import currentPathParametersInjectable from "../../../routes/current-path-parameters.injectable";
import { getRendererExtensionFake } from "../../test-utils/get-renderer-extension-fake";
import { LensRendererExtension } from "../../../../extensions/lens-renderer-extension";
class SomeTestExtension extends LensRendererExtension {
constructor() {
super({
id: "some-test-extension-id",
absolutePath: "irrelevant",
isBundled: false,
isCompatible: false,
isEnabled: false,
manifest: { name: "some-test-extension-id", version: "some-version", engines: { lens: "^5.5.0" }},
manifestPath: "irrelevant",
});
this.appPreferences = [
{
title: "Some preference item",
id: "some-preference-item-id",
components: {
Hint: () => <div data-testid="some-preference-item-hint" />,
Input: () => <div data-testid="some-preference-item-input" />,
},
},
{
title: "Switch on when app starts",
id: "some-other-preference-item-id",
components: {
Hint: () => <div data-testid="some-other-preference-item-hint" />,
Input: () => <div data-testid="some-other-preference-item-input" />,
},
},
{
title: "irrelevant",
id: "some-unrelated-preference-item-id",
showInPreferencesTab: "some-tab",
components: {
Hint: () => <div />,
Input: () => <div />,
},
},
{
title: "preference for specific tab",
id: "preference-for-tab-item-id",
showInPreferencesTab: "metircs-extension-tab",
components: {
Hint: () => <div />,
Input: () => <div />,
},
},
];
this.appPreferenceTabs = [{
title: "Metrics tab",
id: "metircs-extension-tab",
orderNumber: 100,
}];
}
}
describe("<Extensions/>", () => {
let di: DiContainer;
@ -23,7 +86,7 @@ describe("<Extensions/>", () => {
di = getDiForUnitTesting({ doGeneralOverrides: true });
render = renderFor(di);
di.override(rendererExtensionsInjectable, () => computed(() => [getRendererExtensionFake(extensionWithSpecificPreferenceItems)]));
di.override(rendererExtensionsInjectable, () => computed(() => [new SomeTestExtension()]));
di.override(currentPathParametersInjectable, () => computed(() => ({ extensionId: "some-test-extension-id" })));
});
@ -70,55 +133,3 @@ describe("<Extensions/>", () => {
});
});
const extensionWithSpecificPreferenceItems: Partial<LensRendererExtension> = {
id: "some-test-extension-id",
appPreferences: [
{
title: "Some preference item",
id: "some-preference-item-id",
components: {
Hint: () => <div data-testid="some-preference-item-hint" />,
Input: () => <div data-testid="some-preference-item-input" />,
},
},
{
title: "Switch on when app starts",
id: "some-other-preference-item-id",
components: {
Hint: () => <div data-testid="some-other-preference-item-hint" />,
Input: () => <div data-testid="some-other-preference-item-input" />,
},
},
{
title: "irrelevant",
id: "some-unrelated-preference-item-id",
showInPreferencesTab: "some-tab",
components: {
Hint: () => <div />,
Input: () => <div />,
},
},
{
title: "preference for specific tab",
id: "preference-for-tab-item-id",
showInPreferencesTab: "metircs-extension-tab",
components: {
Hint: () => <div />,
Input: () => <div />,
},
},
],
appPreferenceTabs: [{
title: "Metrics tab",
id: "metircs-extension-tab",
orderNumber: 100,
}],
};

View File

@ -45,9 +45,13 @@ export const Extensions = withInjectables<Dependencies>(
const extensions = di.inject(rendererExtensionsInjectable);
const extension = extensions.get().find((extension) => extension.sanitizedExtensionId === extensionId);
if (!extension) {
throw new Error(`Extension ${extensionId} not found`);
}
return {
preferenceItems: di.inject(extensionsPreferenceItemsInjectable, pathParameters),
extensionName: extension?.manifest.name,
extensionName: extension.manifest.name,
};
},
},