import { screen } from "@testing-library/react"; import { runInAction } from "mobx"; import { ThemeProvider } from "styled-components"; import CommonStrata from "../../../lib/Models/Definition/CommonStrata"; import CatalogSearchProvider from "../../../lib/Models/SearchProviders/CatalogSearchProvider"; import Terria from "../../../lib/Models/Terria"; import ViewState from "../../../lib/ReactViewModels/ViewState"; import SearchBoxAndResults from "../../../lib/ReactViews/Search/SearchBoxAndResults"; import { terriaTheme } from "../../../lib/ReactViews/StandardUserInterface"; import { renderWithContexts } from "../withContext"; describe("SearchBoxAndResults", function () { let terria: Terria; let viewState: ViewState; beforeEach(function () { terria = new Terria({ baseUrl: "./" }); viewState = new ViewState({ terria: terria, catalogSearchProvider: new CatalogSearchProvider("catalog", terria) }); }); it("renders with an input(SearchBox), but no SearchInDataCatalog without showLocationSearchResults", function () { const searchText = "neko"; runInAction(() => { viewState.searchState.locationSearchText = searchText; viewState.searchState.showLocationSearchResults = false; viewState.searchState.locationSearchResults = []; }); renderWithContexts( , viewState ); const searchBox = screen.getByRole("textbox"); expect(searchBox).toBeVisible(); expect(searchBox).toHaveValue(searchText); expect( screen.queryByText("search.searchInDataCatalog") ).not.toBeInTheDocument(); }); it("renders with an input & SearchInDataCatalog when showLocationSearchResults", async () => { const searchText = "mochi"; runInAction(() => { viewState.searchState.locationSearchText = searchText; viewState.searchState.showLocationSearchResults = true; viewState.searchState.locationSearchResults = []; }); renderWithContexts( , viewState ); const searchBox = screen.getByRole("textbox"); expect(searchBox).toBeVisible(); expect(searchBox).toHaveValue(searchText); expect(screen.getByText("search.searchInDataCatalog")).toBeVisible(); }); it("renders with an input & no SearchInDataCatalog without catalogSearchProvider", function () { const searchText = "timmynook"; runInAction(() => { viewState.searchState.locationSearchText = searchText; viewState.searchState.showLocationSearchResults = true; viewState.searchState.locationSearchResults = []; viewState.terria.searchBarModel.catalogSearchProvider = undefined; }); renderWithContexts( , viewState ); const searchBox = screen.getByRole("textbox"); expect(searchBox).toBeVisible(); expect(searchBox).toHaveValue(searchText); expect( screen.queryByText("search.searchInDataCatalog") ).not.toBeInTheDocument(); }); it("renders with an input & no SearchInDataCatalog when showSearchInCatalog is false", function () { const searchText = "timmynook"; runInAction(() => { viewState.searchState.locationSearchText = searchText; viewState.searchState.showLocationSearchResults = true; viewState.searchState.locationSearchResults = []; viewState.terria.searchBarModel.setTrait( CommonStrata.user, "showSearchInCatalog", false ); }); renderWithContexts( , viewState ); const searchBox = screen.getByRole("textbox"); expect(searchBox).toBeVisible(); expect(searchBox).toHaveValue(searchText); expect( screen.queryByText("search.searchInDataCatalog") ).not.toBeInTheDocument(); }); });