diff --git a/src/renderer/components/+preferences/__tests__/extensions.test.tsx b/src/renderer/components/+preferences/__tests__/extensions.test.tsx
new file mode 100644
index 0000000000..61e3c75a9f
--- /dev/null
+++ b/src/renderer/components/+preferences/__tests__/extensions.test.tsx
@@ -0,0 +1,89 @@
+/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+
+import React from "react";
+import "@testing-library/jest-dom/extend-expect";
+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";
+
+describe("", () => {
+ let di: DiContainer;
+ let render: DiRender;
+
+ beforeEach(async () => {
+ di = getDiForUnitTesting({ doGeneralOverrides: true });
+ render = renderFor(di);
+
+ di.override(rendererExtensionsInjectable, () => computed(() => [getRendererExtensionFake(extensionWithSpecificPreferenceItems)]));
+ di.override(currentPathParametersInjectable, () => computed(() => ({ extensionId: "some-test-extension-id" })));
+ });
+
+ it("renders", () => {
+ const { container } = render();
+
+ expect(container).toBeInTheDocument();
+ });
+
+ it("renders proper page title", () => {
+ const { getByText } = render();
+
+ expect(getByText("some-test-extension-id settings")).toBeInTheDocument();
+ });
+
+ it("renders relevant preference items", () => {
+ const { getByTestId } = render();
+
+ expect(getByTestId(`extension-preference-item-for-some-preference-item-id`)).toBeInTheDocument();
+ });
+
+ it("does not render irrelevant preference items", () => {
+ const { queryByTestId } = render();
+
+ expect(queryByTestId(`extension-preference-item-for-some-unrelated-preference-item-id`)).not.toBeInTheDocument();
+ });
+});
+
+const extensionWithSpecificPreferenceItems: Partial = {
+ id: "some-test-extension-id",
+ appPreferences: [
+ {
+ title: "Some preference item",
+ id: "some-preference-item-id",
+
+ components: {
+ Hint: () => ,
+ Input: () => ,
+ },
+ },
+
+ {
+ title: "Switch on when app starts",
+ id: "some-other-preference-item-id",
+
+ components: {
+ Hint: () => ,
+ Input: () => ,
+ },
+ },
+
+ {
+ title: "irrelevant",
+ id: "some-unrelated-preference-item-id",
+ showInPreferencesTab: "some-tab",
+
+ components: {
+ Hint: () => ,
+ Input: () => ,
+ },
+ },
+ ],
+};
diff --git a/src/renderer/components/+preferences/extensions.tsx b/src/renderer/components/+preferences/extensions.tsx
index 3606a7db81..90c4667a5f 100644
--- a/src/renderer/components/+preferences/extensions.tsx
+++ b/src/renderer/components/+preferences/extensions.tsx
@@ -47,7 +47,7 @@ export const Extensions = withInjectables(
return {
preferenceItems: di.inject(extensionsPreferenceItemsInjectable, extensionId),
- extensionName: extension.manifest.name,
+ extensionName: extension?.manifest.name,
};
},
},