UNPKG

terriajs

Version:

Geospatial data visualization platform.

159 lines (135 loc) 5.34 kB
import { http, HttpResponse } from "msw"; import i18next from "i18next"; import GetCapabilitiesMixin from "../../../../lib/ModelMixins/GetCapabilitiesMixin"; import WebFeatureServiceCatalogItem, { GetCapabilitiesStratum } from "../../../../lib/Models/Catalog/Ows/WebFeatureServiceCatalogItem"; import Terria from "../../../../lib/Models/Terria"; import { worker } from "../../../mocks/browser"; import getCapabilities from "../../../../wwwroot/test/WFS/getCapabilities.xml"; describe("WebFeatureServiceCatalogItem", function () { let terria: Terria; let wfs: WebFeatureServiceCatalogItem; beforeEach(() => { terria = new Terria(); wfs = new WebFeatureServiceCatalogItem("test", terria); }); it("derives getCapabilitiesUrl from url if getCapabilitiesUrl is not specified", function () { wfs.setTrait("definition", "url", "foo.bar.baz"); expect(wfs.getCapabilitiesUrl).toBeDefined(); expect(wfs.url).toBeDefined(); expect( wfs.getCapabilitiesUrl && wfs.getCapabilitiesUrl.indexOf(wfs.url || "undefined") === 0 ).toBe(true); }); describe("GetCapabilities", function () { beforeEach(() => { wfs.setTrait("definition", "url", "test/WFS/getCapabilities.xml"); wfs.setTrait("definition", "typeNames", "name_of_feature_type"); }); it("loads get capabilities", async () => { expect((await wfs.loadMetadata()).error).toBeUndefined(); }); it("updates description from a GetCapabilities", async function () { (await wfs.loadMetadata()).throwIfError(); expect( wfs.info.find( (section) => section.name === i18next.t("models.webFeatureServiceCatalogItem.abstract") )?.content ).toBe("Abstract of feature type"); }); it("updates rectangle from a GetCapabilities", async function () { (await wfs.loadMetadata()).throwIfError(); expect(wfs.rectangle.west).toBeCloseTo(142.163757324219, 5); expect(wfs.rectangle.east).toBeCloseTo(153.598999023438, 5); expect(wfs.rectangle.south).toBeCloseTo(-28.2700939178467, 5); expect(wfs.rectangle.north).toBeCloseTo(-10.4980516433716, 5); }); it("pulls correct SRS from GetCapabilities", async function () { (await wfs.loadMetadata()).throwIfError(); const strata = wfs.strata.get( GetCapabilitiesMixin.getCapabilitiesStratumName ) as GetCapabilitiesStratum; const layerSrsArray = strata.capabilities.srsNames?.find( (layer) => layer.layerName === "name_of_feature_type" ); expect(layerSrsArray?.srsArray).toEqual([ "urn:x-ogc:def:crs:EPSG:4283", // From DefaultCRS "urn:x-ogc:def:crs:EPSG:4326", // From OtherCRS "urn:x-ogc:def:crs:EPSG:900913" // From OtherCRS ]); expect(wfs.srsName).toBe("urn:x-ogc:def:crs:EPSG:4326"); }); it("pulls correct output formats from GetCapabilities", async function () { (await wfs.loadMetadata()).throwIfError(); const strata = wfs.strata.get( GetCapabilitiesMixin.getCapabilitiesStratumName ) as GetCapabilitiesStratum; expect(strata.capabilities.outputTypes).toEqual([ "text/xml; subtype=gml/3.1.1", "GML2", "KML", "SHAPE-ZIP", "application/gml+xml; version=3.2", "application/json", "application/vnd.google-earth.kml xml", "application/vnd.google-earth.kml+xml", "csv", "gml3", "gml32", "json", "text/csv", "text/xml; subtype=gml/2.1.2", "text/xml; subtype=gml/3.2" ]); expect(wfs.outputFormat).toBe("JSON"); }); }); describe("GetFeature", function () { beforeEach(() => { wfs.setTrait("definition", "url", "test/WFS/getCapabilities.xml"); wfs.setTrait("definition", "typeNames", "name_of_feature_type"); worker.use( http.get("*/test/WFS/getCapabilities.xml", ({ request }) => { const url = new URL(request.url); if (url.searchParams.get("request") === "GetFeature") { return HttpResponse.json({ type: "FeatureCollection", name: "Test data", features: [ { type: "Feature", properties: { someProp: "someValue" }, geometry: { type: "LineString", coordinates: [ [143.876421625763385, -37.565365204704129, 0.0], [143.878406116725529, -37.565587782094575, 0.0], [143.878637784265578, -37.565655550547291, 0.0] ] } } ] }); } if (url.searchParams.get("request") === "GetCapabilities") { return HttpResponse.xml(getCapabilities); } throw new Error(`Unexpected query params: ${url.search}`); }) ); }); it("fetches GeoJSON", async () => { (await wfs.loadMapItems()).throwIfError(); expect(wfs.readyData?.features?.length).toBe(1); const feature = wfs.readyData?.features[0]; expect(feature?.type).toBe("Feature"); expect(feature?.properties?.someProp).toBe("someValue"); }); }); });