1
0
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:
Alex Andreev 2022-06-21 11:42:44 +03:00
parent 10c9581f1b
commit 788d4c61de

View File

@ -3,36 +3,31 @@
* 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 applicationBuilder: ApplicationBuilder;
beforeEach(() => {
applicationBuilder = getApplicationBuilder();
});
describe("given in preferences, when rendered", () => {
let renderer: RenderResult;
let di: DiContainer; let di: DiContainer;
let render: DiRender;
beforeEach(async () => {
di = getDiForUnitTesting({ doGeneralOverrides: true });
render = renderFor(di);
});
it("renders", () => {
const { container } = render(<PreferencesNavigation />);
expect(container).toBeInTheDocument();
});
describe("when general navigation items passed", () => { describe("when general navigation items passed", () => {
beforeEach(() => { beforeEach(async () => {
const generalNavItems: IComputedValue<PreferenceNavigationItem[]> = computed(() => [ const generalNavItems: IComputedValue<PreferenceNavigationItem[]> = computed(() => [
{ {
id: "general", id: "general",
@ -54,29 +49,35 @@ describe("<PreferencesNavigation />", () => {
}, },
]); ]);
di.override(generalPreferenceNavigationItemsInjectable, () => generalNavItems); applicationBuilder.beforeApplicationStart(({ rendererDi }) => {
rendererDi.override(
generalPreferenceNavigationItemsInjectable,
() => generalNavItems,
);
}); });
it("renders them", () => { applicationBuilder.beforeRender(() => {
const { container } = render( applicationBuilder.preferences.navigate();
<PreferencesNavigation/>, });
);
expect(container).toHaveTextContent("General"); di = getDiForUnitTesting({ doGeneralOverrides: true });
expect(container).toHaveTextContent("Proxy");
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", () => { it("does not show custom settings block", () => {
const { queryByTestId } = render( expect(renderer.queryByTestId("extension-settings")).not.toBeInTheDocument();
<PreferencesNavigation/>,
);
expect(queryByTestId("extension-settings")).not.toBeInTheDocument();
}); });
}); });
describe("when general + extension navigation items passed", () => { describe("when general + extension navigation items passed", () => {
beforeEach(() => { beforeEach(async () => {
const generalNavItems: IComputedValue<PreferenceNavigationItem[]> = computed(() => [ const generalNavItems: IComputedValue<PreferenceNavigationItem[]> = computed(() => [
{ {
id: "general", id: "general",
@ -85,6 +86,7 @@ describe("<PreferencesNavigation />", () => {
isVisible: computed(() => true), isVisible: computed(() => true),
navigate: () => noop, navigate: () => noop,
orderNumber: 0, orderNumber: 0,
parent: "",
}, },
{ {
id: "proxy", id: "proxy",
@ -93,6 +95,7 @@ describe("<PreferencesNavigation />", () => {
isVisible: computed(() => true), isVisible: computed(() => true),
navigate: () => noop, navigate: () => noop,
orderNumber: 1, orderNumber: 1,
parent: "",
}, },
]); ]);
@ -126,45 +129,48 @@ describe("<PreferencesNavigation />", () => {
}, },
]); ]);
di.override(generalPreferenceNavigationItemsInjectable, () => generalNavItems); applicationBuilder.beforeApplicationStart(({ rendererDi }) => {
di.override(extensionsPreferenceNavigationItemsInjectable, () => extensionNavItems); rendererDi.override(
}); generalPreferenceNavigationItemsInjectable,
() => generalNavItems,
it("renders general navigation items", () => {
const { container } = render(
<PreferencesNavigation/>,
); );
expect(container).toHaveTextContent("General"); rendererDi.override(
expect(container).toHaveTextContent("Proxy"); extensionsPreferenceNavigationItemsInjectable,
() => extensionNavItems,
);
});
applicationBuilder.beforeRender(() => {
applicationBuilder.preferences.navigate();
});
di = getDiForUnitTesting({ doGeneralOverrides: true });
renderer = await applicationBuilder.render();
});
const generalLinks = ["General", "Proxy"];
it.each(generalLinks)("renders general link with text content %s", (link) => {
expect(renderer.container).toHaveTextContent(link);
}); });
it("shows custom settings block", () => { it("shows custom settings block", () => {
const { getByTestId } = render( expect(renderer.queryByTestId("extension-settings")).toBeInTheDocument();
<PreferencesNavigation/>,
);
expect(getByTestId("extension-settings")).toBeInTheDocument();
}); });
it("renders extension navigation items", () => { const extensionLinks = ["lensapp-node-menu", "lensapp-pod-menu"];
const { getByTestId } = render(
<PreferencesNavigation/>,
);
const nodeAppMenuItem = getByTestId("tab-link-for-extension-preferences-navigation-item-lensapp-node-menu"); it.each(extensionLinks)("shows extension navigation item %s", (link) => {
const podMenuItem = getByTestId("tab-link-for-extension-preferences-navigation-item-lensapp-pod-menu"); expect(renderer.getByTestId(`tab-link-for-extension-preferences-navigation-item-${link}`)).toBeInTheDocument();
expect([nodeAppMenuItem, podMenuItem]).toBeTruthy();
}); });
it("renders extension navigation items inside custom settings block", () => { it("renders extension navigation items inside custom settings block", () => {
const { getByTestId } = render( const settingsBlock = renderer.getByTestId("extension-settings");
<PreferencesNavigation/>,
);
const settingsBlock = getByTestId("extension-settings");
expect(settingsBlock).toHaveTextContent("lensapp-node-menu"); expect(settingsBlock).toHaveTextContent("lensapp-node-menu");
}); });
}); });
}); });
});