import { render, screen, within } from "@testing-library/react"; import i18next from "i18next"; import { runInAction } from "mobx"; import JulianDate from "terriajs-cesium/Source/Core/JulianDate"; import WebMapServiceCatalogItem from "../../lib/Models/Catalog/Ows/WebMapServiceCatalogItem"; import CommonStrata from "../../lib/Models/Definition/CommonStrata"; import Terria from "../../lib/Models/Terria"; import { formatDateTime } from "../../lib/ReactViews/BottomDock/Timeline/DateFormats"; import Timeline from "../../lib/ReactViews/BottomDock/Timeline/Timeline"; import { withThemeContext } from "./withContext"; describe("Timeline", function () { describe("dateTime format", function () { let terria: Terria; let wmsItem: WebMapServiceCatalogItem; beforeAll(async () => { await i18next.changeLanguage("en"); }); afterAll(async () => { await i18next.changeLanguage("cimode"); }); beforeEach(async function () { terria = new Terria({ baseUrl: "./" }); wmsItem = new WebMapServiceCatalogItem("test-wms", terria); terria.addModel(wmsItem); wmsItem.setTrait("definition", "url", "test/WMS/period_datetimes.xml"); await wmsItem.loadMapItems(); }); afterEach(function () { terria.timelineStack.deactivate(); }); it("dateFormat should be used if provided", async function () { runInAction(() => { wmsItem.setTrait(CommonStrata.definition, "currentTime", "2016-01-03"); wmsItem.setTrait(CommonStrata.definition, "dateFormat", "mmm"); terria.timelineStack.addToTop(wmsItem); terria.timelineStack.activate(); }); expect(terria.timelineStack.top).toBe(wmsItem); const { container } = render( withThemeContext() ); expect(within(container).getByText("Jan")).toBeInTheDocument(); }); it("default format should be used if dateFormat is not provided", function () { const isoTime = "2016-01-01T00:00:00Z"; runInAction(() => { wmsItem.setTrait(CommonStrata.definition, "currentTime", isoTime); terria.timelineStack.addToTop(wmsItem); terria.timelineStack.activate(); }); render(withThemeContext()); const expectedDate = JulianDate.toDate(JulianDate.fromIso8601(isoTime)); const expectedText = formatDateTime(expectedDate); expect(screen.getByText(expectedText)).toBeInTheDocument(); }); }); });