/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { RenderResult } from "@testing-library/react"; import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; import React from "react"; import type { FakeExtensionData } from "../../renderer/components/test-utils/get-renderer-extension-fake"; import { getRendererExtensionFakeFor } from "../../renderer/components/test-utils/get-renderer-extension-fake"; describe("preferences - navigation to extension specific preferences", () => { let applicationBuilder: ApplicationBuilder; beforeEach(() => { applicationBuilder = getApplicationBuilder(); }); describe("given in preferences, when rendered", () => { let rendered: RenderResult; beforeEach(async () => { applicationBuilder.beforeRender(() => { applicationBuilder.preferences.navigate(); }); rendered = await applicationBuilder.render(); }); it("renders", () => { expect(rendered.container).toMatchSnapshot(); }); it("does not show extension preferences yet", () => { const page = rendered.queryByTestId("extension-preferences-page"); expect(page).toBeNull(); }); it("does not show link for extension preferences", () => { const actual = rendered.queryByTestId("tab-link-for-extensions"); expect(actual).toBeNull(); }); describe("when extension with specific preferences is enabled", () => { beforeEach(() => { const getRendererExtensionFake = getRendererExtensionFakeFor(applicationBuilder); const testExtension = getRendererExtensionFake(extensionStubWithExtensionSpecificPreferenceItems); applicationBuilder.extensions.renderer.enable(testExtension); }); it("renders", () => { expect(rendered.container).toMatchSnapshot(); }); it("shows link for extension preferences", () => { const actual = rendered.getByTestId("tab-link-for-extensions"); expect(actual).not.toBeNull(); }); describe("when navigating to extension preferences using navigation", () => { beforeEach(() => { applicationBuilder.preferences.navigation.click("extensions"); }); it("renders", () => { expect(rendered.container).toMatchSnapshot(); }); it("shows extension specific preferences", () => { const page = rendered.getByTestId("extension-preferences-page"); expect(page).not.toBeNull(); }); it("shows extension specific preference item", () => { const actual = rendered.getByTestId("extension-preference-item-for-some-preference-item-id"); expect(actual).not.toBeNull(); }); it("does not show unrelated preference tab items", () => { const actual = rendered.queryByTestId("extension-preference-item-for-some-unrelated-preference-item-id"); expect(actual).toBeNull(); }); }); }); }); }); const extensionStubWithExtensionSpecificPreferenceItems: FakeExtensionData = { id: "some-extension-id", name: "some-extension-name", appPreferences: [ { title: "Some preference item", id: "some-preference-item-id", components: { Hint: () =>
, Input: () =>
, }, }, { title: "irrelevant", id: "some-unrelated-preference-item-id", showInPreferencesTab: "some-tab", components: { Hint: () =>
, Input: () =>
, }, }, ], };