UNPKG

terriajs

Version:

Geospatial data visualization platform.

187 lines (155 loc) 6.24 kB
import { IReactionDisposer, reaction, runInAction } from "mobx"; import WebMapServiceCatalogItem from "../../lib/Models/Catalog/Ows/WebMapServiceCatalogItem"; import CommonStrata from "../../lib/Models/Definition/CommonStrata"; import createStratumInstance from "../../lib/Models/Definition/createStratumInstance"; import updateModelFromJson from "../../lib/Models/Definition/updateModelFromJson"; import { isEnum } from "../../lib/Models/SelectableDimensions/SelectableDimensions"; import Terria from "../../lib/Models/Terria"; import EnumDimensionTraits, { DimensionOptionTraits } from "../../lib/Traits/TraitsClasses/DimensionTraits"; describe("CatalogMemberMixin", function () { describe(" - infoWithoutSources", function () { let terria: Terria; let wmsItem: WebMapServiceCatalogItem; beforeEach(async function () { terria = new Terria({ baseUrl: "./" }); wmsItem = new WebMapServiceCatalogItem("test", terria); runInAction(() => { wmsItem.setTrait( "definition", "url", "test/WMS/single_metadata_url.xml" ); }); await wmsItem.loadMetadata(); }); it(" - infoAsObject exists", function () { expect(wmsItem.info.length).toBe(6); expect(Object.keys(wmsItem.infoAsObject).length).toBe(6); expect(wmsItem.infoAsObject.WebMapServiceLayerDescription).toBe( "description foo bar baz" ); }); it(" - info section can contain both content and contentAsObject ", function () { wmsItem.info.forEach((i) => { // Something a bit funky with i18n strings not yet being transformed if (i.name === "models.webMapServiceCatalogItem.dataDescription") { expect(i.content).toBeUndefined(); expect(i.contentAsObject).toBeDefined(); } else if (i.name === "Web Map Service Layer Description") { expect(i.contentAsObject).toBeUndefined(); expect(i.content).toBeDefined(); } }); }); it(" - info and infoWithoutSources can produce different results", function () { expect(wmsItem.info.length).toBe(6); if (wmsItem._sourceInfoItemNames !== undefined) { expect(wmsItem._sourceInfoItemNames.length).toBe(1); } expect(wmsItem.infoWithoutSources.length).toBe(5); }); it(" - has metadataUrls", function () { expect(wmsItem.metadataUrls.length).toBe(1); expect(wmsItem.metadataUrls[0].url).toBe("http://examplemetadata.com"); expect(wmsItem.metadataUrls[0].title).toBeUndefined(); }); it(" - can add metadataUrls title", function () { runInAction(() => { updateModelFromJson(wmsItem, "definition", { metadataUrls: [{ title: "Some Title" }] }); }); expect(wmsItem.metadataUrls.length).toBe(1); expect(wmsItem.metadataUrls[0].url).toBe("http://examplemetadata.com"); expect(wmsItem.metadataUrls[0].title).toBe("Some Title"); }); }); describe(" - AsyncLoaders work as expected", function () { let terria: Terria; let wmsItem: WebMapServiceCatalogItem; beforeEach(function () { terria = new Terria({ baseUrl: "./" }); wmsItem = new WebMapServiceCatalogItem("test", terria); runInAction(() => { wmsItem.setTrait( "definition", "url", "test/WMS/single_metadata_url.xml" ); }); }); it(" - calls loadMetadata and then loadMapItems", async () => { const promise = wmsItem.loadMapItems(); expect(wmsItem.isLoading).toBeTruthy(); expect(wmsItem.isLoadingMetadata).toBeTruthy(); expect(wmsItem.isLoadingMapItems).toBeFalsy(); let dispose: IReactionDisposer | undefined; // Wait for isLoadingMapItems to be true -> then check isLoadingMetadata and isLoading await new Promise<void>((resolve) => { dispose = reaction( () => wmsItem.isLoadingMapItems, () => { if (wmsItem.isLoadingMapItems) { expect(wmsItem.isLoading).toBeTruthy(); expect(wmsItem.isLoadingMetadata).toBeFalsy(); resolve(); } } ); }); dispose?.(); await promise; expect(wmsItem.isLoading).toBeFalsy(); expect(wmsItem.isLoadingMetadata).toBeFalsy(); expect(wmsItem.isLoadingMapItems).toBeFalsy(); }); it(" - modelDimensions", () => { wmsItem.setTrait(CommonStrata.definition, "styles", "init-style"); wmsItem.setTrait(CommonStrata.definition, "layers", "init-layers"); wmsItem.setTrait(CommonStrata.user, "modelDimensions", [ createStratumInstance(EnumDimensionTraits, { id: "modelDimensions", options: [ createStratumInstance(DimensionOptionTraits, { id: "styles-test", value: { styles: "test" } }), createStratumInstance(DimensionOptionTraits, { id: "styles-test2", value: { styles: "test2" } }), createStratumInstance(DimensionOptionTraits, { id: "layers-test", value: { layers: "{{modelDimensions.0.selectedId}}" } }) ] }) ]); expect(wmsItem.styles).toBe("init-style"); expect(wmsItem.layers).toBe("init-layers"); const result = wmsItem.selectableDimensions.find( (dim) => dim.id === "modelDimensions" ); expect(result).toBeDefined(); expect(result?.type === undefined); const modelDimension = result; if (!modelDimension || !isEnum(modelDimension)) throw "Couldn't find modelDimensions"; modelDimension?.setDimensionValue(CommonStrata.user, "styles-test"); expect(wmsItem.styles).toBe("test"); expect(wmsItem.layers).toBe("init-layers"); modelDimension.setDimensionValue(CommonStrata.user, "styles-test2"); expect(wmsItem.styles).toBe("test2"); expect(wmsItem.layers).toBe("init-layers"); modelDimension.setDimensionValue(CommonStrata.user, "layers-test"); expect(wmsItem.styles).toBe("test2"); expect(wmsItem.layers).toBe("layers-test"); }); }); });