UNPKG

terriajs

Version:

Geospatial data visualization platform.

120 lines (107 loc) 4.66 kB
import { http, HttpResponse } from "msw"; import { runInAction } from "mobx"; import Rectangle from "terriajs-cesium/Source/Core/Rectangle"; import WebMapServiceCatalogItem from "../../lib/Models/Catalog/Ows/WebMapServiceCatalogItem"; import Terria from "../../lib/Models/Terria"; import { worker } from "../mocks/browser"; import describeCoverageXml from "../../wwwroot/test/WCS/DescribeCoverage.xml"; import wmsGetCapabilitiesXml from "../../wwwroot/test/WMS/wms_crs.xml"; describe("ExportWebCoverageServiceMixin", function () { let terria: Terria; beforeEach(function () { terria = new Terria({ baseUrl: "./" }); worker.use( http.get("https://some.ows.service/wms", ({ request }) => { const url = new URL(request.url); if (url.searchParams.get("request") !== "GetCapabilities") throw new Error(`Unexpected query params: ${url.search}`); return new HttpResponse(wmsGetCapabilitiesXml, { headers: { "Content-Type": "text/xml" } }); }), http.get("https://some.ows.service/wcs", ({ request }) => { const url = new URL(request.url); const wcsRequest = url.searchParams.get("request"); if (wcsRequest === "DescribeCoverage") { return new HttpResponse(describeCoverageXml, { headers: { "Content-Type": "text/xml" } }); } if (wcsRequest === "GetCoverage") { return new HttpResponse("cool"); } throw new Error(`Unexpected WCS request: ${url.search}`); }) ); }); it("Can call DescribeCoverage and set correct GetCoverage URL", async function () { const wms = new WebMapServiceCatalogItem("test", terria); runInAction(() => { wms.setTrait("definition", "url", "https://some.ows.service/wms"); wms.setTrait("definition", "layers", "ls8_nbart_geomedian_annual"); wms.setTrait( "definition", "linkedWcsUrl", "https://some.ows.service/wcs" ); wms.setTrait("definition", "linkedWcsCoverage", "some_layer"); }); await wms.loadMapItems(); expect(wms.currentDiscreteTimeTag).toBe("2018-01-01"); expect(wms.styles).toBe("simple_rgb"); expect(wms.linkedWcsUrl).toBe("https://some.ows.service/wcs"); expect(wms.linkedWcsCoverage).toBe("some_layer"); expect(wms.linkedWcsParameters.outputCrs).toBe("EPSG:4326"); expect(wms.linkedWcsParameters.outputFormat).toBe("image/geotiff"); expect(wms.linkedWcsParameters.subsets[0].key).toEqual("time"); expect(wms.linkedWcsParameters.subsets[0].value).toEqual("2018-01-01"); await wms.loadWcsMetadata(); expect(wms.linkedWcsParameters.outputCrs).toBe("EPSG:3577"); expect(wms.linkedWcsParameters.outputFormat).toBe("image/geotiff"); expect(wms.linkedWcsParameters.subsets[0].key).toEqual("time"); expect(wms.linkedWcsParameters.subsets[0].value).toEqual("2018-01-01"); expect( wms .getCoverageUrl( new Rectangle( 2.0101529921064003, -0.5874914705360393, 2.0108211126448747, -0.587010105729862 ) ) .ignoreError() ).toBe( "https://some.ows.service/wcs?service=WCS&request=GetCoverage&version=2.0.0&coverageId=some_layer&format=image%2Fgeotiff&subset=Long%28115.17328262329103%2C115.21156311035162%29&subset=Lat%28-33.66078176164941%2C-33.633201589849314%29&subset=time%28%222018-01-01%22%29&subsettingCrs=EPSG%3A4326&outputCrs=EPSG%3A3577&styles=simple_rgb" ); // Set some custom parameters wms.linkedWcsParameters.setTrait("definition", "additionalParameters", [ { key: "someKey", value: "someValue" } ]); wms.linkedWcsParameters.setTrait("definition", "outputCrs", "someCrs"); wms.linkedWcsParameters.setTrait( "definition", "outputFormat", "someFormat" ); wms.linkedWcsParameters.setTrait("definition", "subsets", [ { key: "someSubsetKey", value: "someSubsetValue" } ]); expect( wms .getCoverageUrl( new Rectangle( 2.0101529921064003, -0.5874914705360393, 2.0108211126448747, -0.587010105729862 ) ) .ignoreError() ).toBe( "https://some.ows.service/wcs?service=WCS&request=GetCoverage&version=2.0.0&coverageId=some_layer&format=someFormat&subset=Long%28115.17328262329103%2C115.21156311035162%29&subset=Lat%28-33.66078176164941%2C-33.633201589849314%29&subset=time%28%222018-01-01%22%29&subset=someSubsetKey%28%22someSubsetValue%22%29&subsettingCrs=EPSG%3A4326&outputCrs=someCrs&someKey=someValue" ); }); });