import ViewingControls from "../../../../lib/ReactViews/Workbench/Controls/ViewingControls"; import Terria from "../../../../lib/Models/Terria"; import ViewState from "../../../../lib/ReactViewModels/ViewState"; import SimpleCatalogItem from "../../../Helpers/SimpleCatalogItem"; import * as ViewingControlsMenu from "../../../../lib/ViewModels/ViewingControlsMenu"; import Icon from "../../../../lib/Styled/Icon"; import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; describe("ViewingControls", function () { let terria: Terria; let viewState: ViewState; beforeEach(function () { terria = new Terria(); viewState = new ViewState({ terria, catalogSearchProvider: undefined }); }); it("renders the viewing controls buttons", () => { const simpleItem = new SimpleCatalogItem("simple", terria); render(); expect( screen.getByRole("button", { name: "workbench.zoomTo" }) ).toBeVisible(); expect( screen.getByRole("button", { name: "workbench.previewItem" }) ).toBeVisible(); expect( screen.getByRole("button", { name: "workbench.showMoreActionsTitle" }) ).toBeVisible(); }); it("shows viewing controls added through `viewState.globalViewingControls`", async () => { const simpleItem = new SimpleCatalogItem("simple", terria); ViewingControlsMenu.addMenuItem(viewState, () => ({ name: "View details", icon: Icon.GLYPHS.eye, iconTitle: "View more details", onClick: () => {} })); render(); await userEvent.click( screen.getByRole("button", { name: "workbench.showMoreActionsTitle" }) ); expect(screen.getByText("View details")).toBeVisible(); expect(screen.getByTitle("View more details")).toBeVisible(); }); it("should close menu on click outside", async () => { const simpleItem = new SimpleCatalogItem("simple", terria); ViewingControlsMenu.addMenuItem(viewState, () => ({ name: "View details", icon: Icon.GLYPHS.eye, iconTitle: "View more details", onClick: () => {} })); render(); await userEvent.click( screen.getByRole("button", { name: "workbench.showMoreActionsTitle" }) ); expect(screen.getByText("View details")).toBeVisible(); await userEvent.click( screen.getByRole("button", { name: "workbench.previewItem" }) ); expect(screen.queryByText("View details")).not.toBeInTheDocument(); }); });