UNPKG

terriajs

Version:

Geospatial data visualization platform.

177 lines (150 loc) 6.16 kB
import { http, HttpResponse } from "msw"; import CzmlDataSource from "terriajs-cesium/Source/DataSources/CzmlDataSource"; import TerriaError from "../../../../lib/Core/TerriaError"; import CzmlCatalogItem from "../../../../lib/Models/Catalog/CatalogItems/CzmlCatalogItem"; import CommonStrata from "../../../../lib/Models/Definition/CommonStrata"; import Terria from "../../../../lib/Models/Terria"; import { worker } from "../../../mocks/browser"; import verysimpleCzml from "../../../../wwwroot/test/CZML/verysimple.czml" with { type: "json" }; import vehicleCzml from "../../../../wwwroot/test/CZML/Vehicle.czml" with { type: "json" }; import simpleCzml from "../../../../wwwroot/test/CZML/simple.czml" with { type: "json" }; describe("CzmlCatalogItem", function () { let terria: Terria; let czml: CzmlCatalogItem; beforeEach(function () { terria = new Terria({ baseUrl: "./" }); czml = new CzmlCatalogItem("test", terria); worker.use( http.get("test/CZML/verysimple.czml", () => HttpResponse.json(verysimpleCzml) ), http.get("test/CZML/Vehicle.czml", () => HttpResponse.json(vehicleCzml)), http.get("test/CZML/simple.czml", () => HttpResponse.json(simpleCzml)), http.get("test/KML/vic_police.kml", () => HttpResponse.text("test string that is not JSON") ) ); }); describe("loading a very simple CZML file", function () { it("works by URL", async function () { czml.setTrait(CommonStrata.user, "url", "test/CZML/verysimple.czml"); await czml.loadMapItems(); expect(czml.mapItems[0].entities.values.length).toBeGreaterThan(0); }); it("proxies URLs", async function () { czml.setTrait(CommonStrata.user, "url", "https://someexternalurl/"); czml.setTrait(CommonStrata.user, "forceProxy", true); const load = spyOn(CzmlDataSource, "load"); await czml.loadMapItems(); expect(load.calls.mostRecent().args[0]).toBe( "proxy/https://someexternalurl/" ); }); it("works by string", async function () { czml.setTrait( CommonStrata.user, "czmlString", JSON.stringify(verysimpleCzml) ); await czml.loadMapItems(); expect(czml.mapItems[0].entities.values.length).toBeGreaterThan(0); }); it("works by json object", async function () { czml.setTrait(CommonStrata.user, "czmlData", verysimpleCzml); await czml.loadMapItems(); expect(czml.mapItems[0].entities.values.length).toBeGreaterThan(0); }); it("works by blob", async function () { const blob = new Blob([JSON.stringify(verysimpleCzml)], { type: "application/json" }) as File; czml.setFileInput(blob); await czml.loadMapItems(); expect(czml.mapItems[0].entities.values.length).toBeGreaterThan(0); }); }); describe("loading a CZML file with a moving vehicle", function () { it("works by URL", async function () { czml.setTrait(CommonStrata.user, "url", "test/CZML/Vehicle.czml"); await czml.loadMapItems(); expect(czml.mapItems[0].entities.values.length).toBeGreaterThan(0); }); it("works by string", async function () { czml.setTrait( CommonStrata.user, "czmlString", JSON.stringify(vehicleCzml) ); await czml.loadMapItems(); expect(czml.mapItems[0].entities.values.length).toBeGreaterThan(0); }); it("works by blob", async function () { const blob = new Blob([JSON.stringify(vehicleCzml)], { type: "application/json" }) as File; czml.setFileInput(blob); await czml.loadMapItems(); expect(czml.mapItems[0].entities.values.length).toBeGreaterThan(0); }); }); it("can load a CZML file with multiple moving and static objects", async function () { czml.setTrait(CommonStrata.user, "url", "test/CZML/simple.czml"); await czml.loadMapItems(); expect(czml.mapItems[0].entities.values.length).toBeGreaterThan(0); }); describe("Time varying traits", function () { beforeEach(async function () { czml.setTrait(CommonStrata.user, "url", "test/CZML/Vehicle.czml"); await czml.loadMapItems(); }); it("sets currentTime", function () { expect(czml.currentTime).toBe("2012-08-04T16:00:00Z"); }); it("sets startTime", function () { expect(czml.startTime).toBe("2012-08-04T16:00:00Z"); }); it("sets stopTime", function () { expect(czml.stopTime).toBe("2012-08-04T17:04:54.996219574019051Z"); }); it("sets multiplier", function () { expect(czml.multiplier).toBe(32); }); }); describe("error handling", function () { it("fails gracefully when the data at a URL is not JSON", async function () { czml.setTrait(CommonStrata.user, "url", "test/KML/vic_police.kml"); const error = (await czml.loadMapItems()).error; expect(error instanceof TerriaError).toBe(true); }); it("fails gracefully when the provided string is not JSON", async function () { czml.setTrait( CommonStrata.user, "czmlString", "test string that is not JSON" ); const error = (await czml.loadMapItems()).error; expect(error instanceof TerriaError).toBe(true); }); it("fails gracefully when the provided blob is not JSON", async function () { const invalidBlob = new Blob(["test string that is not JSON"], { type: "text/plain" }) as File; czml.setFileInput(invalidBlob); const error = (await czml.loadMapItems()).error; expect(error instanceof TerriaError).toBe(true); }); }); describe("auto refreshing", function () { it("reloads the datasource when refreshed", async function () { czml.setTrait(CommonStrata.user, "url", "test/CZML/Vehicle.czml"); await czml.loadMapItems(); const [dataSource] = czml.mapItems as [CzmlDataSource]; expect(dataSource).toBeDefined("Expected datasource to be defined"); spyOn(dataSource, "process"); czml.refreshData(); expect(dataSource.process).toHaveBeenCalledWith("test/CZML/Vehicle.czml"); }); }); });