import { render, screen, waitFor } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import GeoJsonCatalogItem from "../../../lib/Models/Catalog/CatalogItems/GeoJsonCatalogItem"; import CommonStrata from "../../../lib/Models/Definition/CommonStrata"; import Terria from "../../../lib/Models/Terria"; import DataPreviewMap from "../../../lib/ReactViews/Preview/DataPreviewMap"; import TerriaViewer from "../../../lib/ViewModels/TerriaViewer"; describe("DataPreviewMapSpec", () => { let terria: Terria; let attachSpy: jasmine.Spy; beforeEach(() => { terria = new Terria({ baseUrl: "./" }); attachSpy = spyOn(TerriaViewer.prototype, "attach").and.callThrough(); }); it("renders DataPreviewMap placeholder", () => { const { container } = render( ); expect( container.querySelector(".tjs-data-preview-map__terria-preview") ).toBeVisible(); expect(screen.getByText("preview.noPreviewAvailable")).toBeVisible(); }); it("renders DataPreviewMap with no data", async () => { const { container } = render(); await waitFor(() => expect(container.querySelector(".leaflet-container")).toBeVisible() ); expect(screen.getByText("preview.noPreviewAvailable")).toBeVisible(); expect(attachSpy).toHaveBeenCalledTimes(1); }); it("renders DataPreviewMap with data", async () => { const geojson = new GeoJsonCatalogItem("test-geojson", terria); geojson.setTrait(CommonStrata.user, "geoJsonData", { type: "FeatureCollection", features: [ { type: "Feature", properties: { LGA_CODE19: "19499", LGA_NAME19: "No usual address (NSW)", STE_CODE16: "1", STE_NAME16: "New South Wales", AREASQKM19: 0.0 }, geometry: null }, { type: "Feature", properties: {}, geometry: { type: "Polygon", coordinates: [ [ [0.806671142578125, -2.96258644191746], [0.008544921875, -2.19273094190691], [0.557861328125, -2.659031913817685], [0.042877197265625, -2.375322284319346], [0.7998046875, -2.96719522935591], [0.806671142578125, -2.96258644191746] ] ] } } ] }); await geojson.loadMapItems(); const { container } = render( ); await waitFor(() => { expect(attachSpy).toHaveBeenCalledTimes(1); }); await waitFor(() => expect(container.querySelector(".leaflet-container")).toBeVisible() ); expect(screen.getByText("preview.dataPreview")).toBeVisible(); expect(attachSpy).toHaveBeenCalledTimes(1); }); it("doesn't render entire data preview map when clicking on the map", async () => { const geojson = new GeoJsonCatalogItem("test-geojson", terria); geojson.setTrait(CommonStrata.user, "geoJsonData", { type: "FeatureCollection", features: [ { type: "Feature", properties: { LGA_CODE19: "19499", LGA_NAME19: "No usual address (NSW)", STE_CODE16: "1", STE_NAME16: "New South Wales", AREASQKM19: 0.0 }, geometry: null }, { type: "Feature", properties: {}, geometry: { type: "Polygon", coordinates: [ [ [0.806671142578125, -2.96258644191746], [0.008544921875, -2.19273094190691], [0.557861328125, -2.659031913817685], [0.042877197265625, -2.375322284319346], [0.7998046875, -2.96719522935591], [0.806671142578125, -2.96258644191746] ] ] } } ] }); await geojson.loadMapItems(); const { container } = render( ); await waitFor(() => expect(container.querySelector(".leaflet-container")).toBeVisible() ); expect(attachSpy).toHaveBeenCalledTimes(1); const containerElement = container.querySelector( ".tjs-data-preview-map__map" )!; await userEvent.click(containerElement); expect(attachSpy).toHaveBeenCalledTimes(1); }); it("should not reinitialize the map after rerender", async () => { const geojson = new GeoJsonCatalogItem("test-geojson", terria); geojson.setTrait(CommonStrata.user, "geoJsonData", { type: "FeatureCollection", features: [ { type: "Feature", properties: { LGA_CODE19: "19499", LGA_NAME19: "No usual address (NSW)", STE_CODE16: "1", STE_NAME16: "New South Wales", AREASQKM19: 0.0 }, geometry: null }, { type: "Feature", properties: {}, geometry: { type: "Polygon", coordinates: [ [ [0.806671142578125, -2.96258644191746], [0.008544921875, -2.19273094190691], [0.557861328125, -2.659031913817685], [0.042877197265625, -2.375322284319346], [0.7998046875, -2.96719522935591], [0.806671142578125, -2.96258644191746] ] ] } } ] }); await geojson.loadMapItems(); const { container, rerender } = render( ); await waitFor(() => expect(container.querySelector(".leaflet-container")).toBeVisible() ); expect(attachSpy).toHaveBeenCalledTimes(1); rerender(); expect(attachSpy).toHaveBeenCalledTimes(1); }); });