import { runInAction } from "mobx"; import { createContainer, DiContainer, getInjectable } from "@ogre-tools/injectable"; import { renderFor } from "@k8slens/test-utils"; import { DockHost } from "./dock/dock-host"; import React from "react"; import type { RenderResult } from "@testing-library/react"; import { act } from "@testing-library/react"; import { dockTabInjectionToken } from "./dock-tab"; import { Discover, discoverFor } from "@k8slens/react-testing-library-discovery"; import { registerFeature } from "@k8slens/feature-core"; import { dockFeature } from "./feature"; describe("DockHost, given rendered", () => { let di: DiContainer; let rendered: RenderResult; let discover: Discover; beforeEach(() => { di = createContainer("some-container"); registerFeature(di, dockFeature); const render = renderFor(di); rendered = render(); discover = discoverFor(() => rendered); }); it("given no implementations of dock tabs, renders", () => { expect(rendered.baseElement).toMatchSnapshot(); }); describe("given implementations of dock tabs emerge", () => { beforeEach(() => { const dockTabInjectable1 = getInjectable({ id: "some-dock-tab-1", instantiate: () => ({ id: "some-dock-tab-1", TitleComponent: () =>
Some title 1
, ContentComponent: () => (
Some content 1
), }), injectionToken: dockTabInjectionToken, }); const dockTabInjectable2 = getInjectable({ id: "some-dock-tab-2", instantiate: () => ({ id: "some-dock-tab-2", TitleComponent: () =>
Some title 2
, ContentComponent: () => (
Some content 2
), }), injectionToken: dockTabInjectionToken, }); runInAction(() => { di.register(dockTabInjectable1, dockTabInjectable2); }); }); it("renders", () => { expect(rendered.baseElement).toMatchSnapshot(); }); it("renders the titles of all the dock tabs in order", () => { expect(discover.queryAllElements("dock-tab-title").attributeValues).toEqual([ "some-title-1", "some-title-2", ]); }); it("renders only the content of the first dock tab", () => { expect(discover.queryAllElements("dock-tab-content").attributeValues).toEqual([ "some-content-1", ]); }); describe("when the second dock tab is clicked", () => { beforeEach(() => { act(() => { discover.getSingleElement("dock-tab", "some-dock-tab-2").click(); }); }); it("renders", () => { expect(rendered.baseElement).toMatchSnapshot(); }); it("renders only the content of the second dock tab", () => { expect(discover.queryAllElements("dock-tab-content").attributeValues).toEqual([ "some-content-2", ]); }); }); }); });