mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Refactor preference-navigation.test
To align with behavioural style Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com>
This commit is contained in:
parent
10c9581f1b
commit
788d4c61de
@ -3,168 +3,174 @@
|
|||||||
* 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 React from "react";
|
|
||||||
import "@testing-library/jest-dom/extend-expect";
|
|
||||||
import type { DiContainer } from "@ogre-tools/injectable";
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
import { getDiForUnitTesting } from "../../../../getDiForUnitTesting";
|
import "@testing-library/jest-dom/extend-expect";
|
||||||
import { type DiRender, renderFor } from "../../../test-utils/renderFor";
|
import type { RenderResult } from "@testing-library/react";
|
||||||
import { PreferencesNavigation } from "../preferences-navigation";
|
|
||||||
import type { PreferenceNavigationItem } from "../preference-navigation-items.injectable";
|
|
||||||
import { computed } from "mobx";
|
import { computed } from "mobx";
|
||||||
import { noop } from "../../../../utils";
|
|
||||||
import type { IComputedValue } from "mobx/dist/internal";
|
import type { IComputedValue } from "mobx/dist/internal";
|
||||||
import generalPreferenceNavigationItemsInjectable from "../general-preference-navigation-items.injectable";
|
import { getDiForUnitTesting } from "../../../../getDiForUnitTesting";
|
||||||
|
import { noop } from "../../../../utils";
|
||||||
|
import { ApplicationBuilder, getApplicationBuilder } from "../../../test-utils/get-application-builder";
|
||||||
import extensionsPreferenceNavigationItemsInjectable from "../extension-preference-navigation-items.injectable";
|
import extensionsPreferenceNavigationItemsInjectable from "../extension-preference-navigation-items.injectable";
|
||||||
|
import generalPreferenceNavigationItemsInjectable from "../general-preference-navigation-items.injectable";
|
||||||
|
import type { PreferenceNavigationItem } from "../preference-navigation-items.injectable";
|
||||||
|
|
||||||
describe("<PreferencesNavigation />", () => {
|
describe.only("preferences - navigation block with links", () => {
|
||||||
let di: DiContainer;
|
let applicationBuilder: ApplicationBuilder;
|
||||||
let render: DiRender;
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(() => {
|
||||||
di = getDiForUnitTesting({ doGeneralOverrides: true });
|
applicationBuilder = getApplicationBuilder();
|
||||||
render = renderFor(di);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
describe("given in preferences, when rendered", () => {
|
||||||
const { container } = render(<PreferencesNavigation />);
|
let renderer: RenderResult;
|
||||||
|
let di: DiContainer;
|
||||||
|
|
||||||
expect(container).toBeInTheDocument();
|
describe("when general navigation items passed", () => {
|
||||||
});
|
beforeEach(async () => {
|
||||||
|
const generalNavItems: IComputedValue<PreferenceNavigationItem[]> = computed(() => [
|
||||||
|
{
|
||||||
|
id: "general",
|
||||||
|
label: "General",
|
||||||
|
isActive: computed(() => false),
|
||||||
|
isVisible: computed(() => true),
|
||||||
|
navigate: () => noop,
|
||||||
|
orderNumber: 0,
|
||||||
|
parent: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "proxy",
|
||||||
|
label: "Proxy",
|
||||||
|
isActive: computed(() => false),
|
||||||
|
isVisible: computed(() => true),
|
||||||
|
navigate: () => noop,
|
||||||
|
orderNumber: 1,
|
||||||
|
parent: "",
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
describe("when general navigation items passed", () => {
|
applicationBuilder.beforeApplicationStart(({ rendererDi }) => {
|
||||||
beforeEach(() => {
|
rendererDi.override(
|
||||||
const generalNavItems: IComputedValue<PreferenceNavigationItem[]> = computed(() => [
|
generalPreferenceNavigationItemsInjectable,
|
||||||
{
|
() => generalNavItems,
|
||||||
id: "general",
|
);
|
||||||
label: "General",
|
});
|
||||||
isActive: computed(() => false),
|
|
||||||
isVisible: computed(() => true),
|
|
||||||
navigate: () => noop,
|
|
||||||
orderNumber: 0,
|
|
||||||
parent: "",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "proxy",
|
|
||||||
label: "Proxy",
|
|
||||||
isActive: computed(() => false),
|
|
||||||
isVisible: computed(() => true),
|
|
||||||
navigate: () => noop,
|
|
||||||
orderNumber: 1,
|
|
||||||
parent: "",
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
di.override(generalPreferenceNavigationItemsInjectable, () => generalNavItems);
|
applicationBuilder.beforeRender(() => {
|
||||||
|
applicationBuilder.preferences.navigate();
|
||||||
|
});
|
||||||
|
|
||||||
|
di = getDiForUnitTesting({ doGeneralOverrides: true });
|
||||||
|
|
||||||
|
renderer = await applicationBuilder.render();
|
||||||
|
});
|
||||||
|
|
||||||
|
const links = ["General", "Proxy"];
|
||||||
|
|
||||||
|
it.each(links)("renders link with text content %s", (link) => {
|
||||||
|
expect(renderer.container).toHaveTextContent(link);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("does not show custom settings block", () => {
|
||||||
|
expect(renderer.queryByTestId("extension-settings")).not.toBeInTheDocument();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders them", () => {
|
describe("when general + extension navigation items passed", () => {
|
||||||
const { container } = render(
|
beforeEach(async () => {
|
||||||
<PreferencesNavigation/>,
|
const generalNavItems: IComputedValue<PreferenceNavigationItem[]> = computed(() => [
|
||||||
);
|
{
|
||||||
|
id: "general",
|
||||||
|
label: "General",
|
||||||
|
isActive: computed(() => false),
|
||||||
|
isVisible: computed(() => true),
|
||||||
|
navigate: () => noop,
|
||||||
|
orderNumber: 0,
|
||||||
|
parent: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "proxy",
|
||||||
|
label: "Proxy",
|
||||||
|
isActive: computed(() => false),
|
||||||
|
isVisible: computed(() => true),
|
||||||
|
navigate: () => noop,
|
||||||
|
orderNumber: 1,
|
||||||
|
parent: "",
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
const extensionNavItems: IComputedValue<PreferenceNavigationItem[]> = computed(() => [
|
||||||
|
{
|
||||||
|
id: "extension-preferences-navigation-item-lensapp-node-menu",
|
||||||
|
label: "lensapp-node-menu",
|
||||||
|
isActive: computed(() => false),
|
||||||
|
isVisible: computed(() => true),
|
||||||
|
navigate: () => noop,
|
||||||
|
orderNumber: 0,
|
||||||
|
parent: "extensions",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "extension-preferences-navigation-item-lensapp-pod-menu",
|
||||||
|
label: "lensapp-pod-menu",
|
||||||
|
isActive: computed(() => false),
|
||||||
|
isVisible: computed(() => true),
|
||||||
|
navigate: () => noop,
|
||||||
|
orderNumber: 0,
|
||||||
|
parent: "extensions",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "extension-preferences-navigation-item-metrics-plugin",
|
||||||
|
label: "metrics-plugin",
|
||||||
|
isActive: computed(() => false),
|
||||||
|
isVisible: computed(() => false),
|
||||||
|
navigate: () => noop,
|
||||||
|
orderNumber: 0,
|
||||||
|
parent: "extensions",
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
applicationBuilder.beforeApplicationStart(({ rendererDi }) => {
|
||||||
|
rendererDi.override(
|
||||||
|
generalPreferenceNavigationItemsInjectable,
|
||||||
|
() => generalNavItems,
|
||||||
|
);
|
||||||
|
|
||||||
|
rendererDi.override(
|
||||||
|
extensionsPreferenceNavigationItemsInjectable,
|
||||||
|
() => extensionNavItems,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
applicationBuilder.beforeRender(() => {
|
||||||
|
applicationBuilder.preferences.navigate();
|
||||||
|
});
|
||||||
|
|
||||||
|
di = getDiForUnitTesting({ doGeneralOverrides: true });
|
||||||
|
|
||||||
|
renderer = await applicationBuilder.render();
|
||||||
|
});
|
||||||
|
|
||||||
expect(container).toHaveTextContent("General");
|
const generalLinks = ["General", "Proxy"];
|
||||||
expect(container).toHaveTextContent("Proxy");
|
|
||||||
});
|
it.each(generalLinks)("renders general link with text content %s", (link) => {
|
||||||
|
expect(renderer.container).toHaveTextContent(link);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("shows custom settings block", () => {
|
||||||
|
expect(renderer.queryByTestId("extension-settings")).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
it("does not show custom settings block", () => {
|
const extensionLinks = ["lensapp-node-menu", "lensapp-pod-menu"];
|
||||||
const { queryByTestId } = render(
|
|
||||||
<PreferencesNavigation/>,
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(queryByTestId("extension-settings")).not.toBeInTheDocument();
|
it.each(extensionLinks)("shows extension navigation item %s", (link) => {
|
||||||
});
|
expect(renderer.getByTestId(`tab-link-for-extension-preferences-navigation-item-${link}`)).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when general + extension navigation items passed", () => {
|
it("renders extension navigation items inside custom settings block", () => {
|
||||||
beforeEach(() => {
|
const settingsBlock = renderer.getByTestId("extension-settings");
|
||||||
const generalNavItems: IComputedValue<PreferenceNavigationItem[]> = computed(() => [
|
|
||||||
{
|
expect(settingsBlock).toHaveTextContent("lensapp-node-menu");
|
||||||
id: "general",
|
});
|
||||||
label: "General",
|
|
||||||
isActive: computed(() => false),
|
|
||||||
isVisible: computed(() => true),
|
|
||||||
navigate: () => noop,
|
|
||||||
orderNumber: 0,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "proxy",
|
|
||||||
label: "Proxy",
|
|
||||||
isActive: computed(() => false),
|
|
||||||
isVisible: computed(() => true),
|
|
||||||
navigate: () => noop,
|
|
||||||
orderNumber: 1,
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
const extensionNavItems: IComputedValue<PreferenceNavigationItem[]> = computed(() => [
|
|
||||||
{
|
|
||||||
id: "extension-preferences-navigation-item-lensapp-node-menu",
|
|
||||||
label: "lensapp-node-menu",
|
|
||||||
isActive: computed(() => false),
|
|
||||||
isVisible: computed(() => true),
|
|
||||||
navigate: () => noop,
|
|
||||||
orderNumber: 0,
|
|
||||||
parent: "extensions",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "extension-preferences-navigation-item-lensapp-pod-menu",
|
|
||||||
label: "lensapp-pod-menu",
|
|
||||||
isActive: computed(() => false),
|
|
||||||
isVisible: computed(() => true),
|
|
||||||
navigate: () => noop,
|
|
||||||
orderNumber: 0,
|
|
||||||
parent: "extensions",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: "extension-preferences-navigation-item-metrics-plugin",
|
|
||||||
label: "metrics-plugin",
|
|
||||||
isActive: computed(() => false),
|
|
||||||
isVisible: computed(() => false),
|
|
||||||
navigate: () => noop,
|
|
||||||
orderNumber: 0,
|
|
||||||
parent: "extensions",
|
|
||||||
},
|
|
||||||
]);
|
|
||||||
|
|
||||||
di.override(generalPreferenceNavigationItemsInjectable, () => generalNavItems);
|
|
||||||
di.override(extensionsPreferenceNavigationItemsInjectable, () => extensionNavItems);
|
|
||||||
});
|
|
||||||
|
|
||||||
it("renders general navigation items", () => {
|
|
||||||
const { container } = render(
|
|
||||||
<PreferencesNavigation/>,
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(container).toHaveTextContent("General");
|
|
||||||
expect(container).toHaveTextContent("Proxy");
|
|
||||||
});
|
|
||||||
|
|
||||||
it("shows custom settings block", () => {
|
|
||||||
const { getByTestId } = render(
|
|
||||||
<PreferencesNavigation/>,
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(getByTestId("extension-settings")).toBeInTheDocument();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("renders extension navigation items", () => {
|
|
||||||
const { getByTestId } = render(
|
|
||||||
<PreferencesNavigation/>,
|
|
||||||
);
|
|
||||||
|
|
||||||
const nodeAppMenuItem = getByTestId("tab-link-for-extension-preferences-navigation-item-lensapp-node-menu");
|
|
||||||
const podMenuItem = getByTestId("tab-link-for-extension-preferences-navigation-item-lensapp-pod-menu");
|
|
||||||
|
|
||||||
expect([nodeAppMenuItem, podMenuItem]).toBeTruthy();
|
|
||||||
});
|
|
||||||
|
|
||||||
it("renders extension navigation items inside custom settings block", () => {
|
|
||||||
const { getByTestId } = render(
|
|
||||||
<PreferencesNavigation/>,
|
|
||||||
);
|
|
||||||
const settingsBlock = getByTestId("extension-settings");
|
|
||||||
|
|
||||||
expect(settingsBlock).toHaveTextContent("lensapp-node-menu");
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user