terriajs
Version:
Geospatial data visualization platform.
141 lines (121 loc) • 4.23 kB
text/typescript
import { runInAction } from "mobx";
import { http, HttpResponse } from "msw";
import CompositeCatalogItem from "../../../../lib/Models/Catalog/CatalogItems/CompositeCatalogItem";
import GeoJsonCatalogItem from "../../../../lib/Models/Catalog/CatalogItems/GeoJsonCatalogItem";
import WebMapServiceCatalogItem from "../../../../lib/Models/Catalog/Ows/WebMapServiceCatalogItem";
import CommonStrata from "../../../../lib/Models/Definition/CommonStrata";
import updateModelFromJson from "../../../../lib/Models/Definition/updateModelFromJson";
import Terria from "../../../../lib/Models/Terria";
import { worker } from "../../../mocks/browser";
import bikeracksJson from "../../../../wwwroot/test/GeoJSON/bike_racks.geojson" with { type: "json" };
import singleMetadataUrl from "../../../../wwwroot/test/WMS/single_metadata_url.xml";
describe("CompositeCatalogItem", function () {
let terria: Terria;
let composite: CompositeCatalogItem;
beforeEach(function () {
terria = new Terria({
baseUrl: "./"
});
composite = new CompositeCatalogItem("test", terria);
worker.use(
http.get("test/GeoJSON/bike_racks.geojson", () =>
HttpResponse.json(bikeracksJson)
),
http.get("test/WMS/single_metadata_url.xml", () =>
HttpResponse.xml(singleMetadataUrl)
)
);
});
it("loads map items after members are added", async function () {
const item1 = new GeoJsonCatalogItem("item1", terria);
const item2 = new WebMapServiceCatalogItem("item2", terria);
const item3 = new WebMapServiceCatalogItem("item3", terria);
runInAction(() => {
item1.setTrait(
CommonStrata.definition,
"url",
"test/GeoJSON/bike_racks.geojson"
);
item2.setTrait(
CommonStrata.definition,
"url",
"test/WMS/single_metadata_url.xml"
);
item3.setTrait(
CommonStrata.definition,
"url",
"test/WMS/single_metadata_url.xml"
);
});
composite.add(CommonStrata.definition, item1);
composite.add(CommonStrata.definition, item2);
await composite.loadMapItems();
expect(composite.mapItems.length).toBe(2);
composite.add(CommonStrata.definition, item3);
await composite.loadMapItems();
expect(composite.mapItems.length).toBe(3);
});
it("updates from json, preserving order", function () {
const json = {
members: [
{
name: "B",
type: "geojson",
url: "test/GeoJSON/bike_racks.geojson"
},
{
name: "A",
type: "wms",
url: "test/WMS/single_metadata_url.xml"
}
]
};
updateModelFromJson(composite, CommonStrata.definition, json);
expect(composite.memberModels.length).toBe(2);
expect((composite.memberModels[0] as GeoJsonCatalogItem).name).toBe("B");
expect((composite.memberModels[1] as WebMapServiceCatalogItem).name).toBe(
"A"
);
});
it("syncs visibility to its members", function () {
const item1 = new GeoJsonCatalogItem("item1", terria);
const item2 = new WebMapServiceCatalogItem("item2", terria);
runInAction(() => {
item1.setTrait(
CommonStrata.definition,
"url",
"test/GeoJSON/bike_racks.geojson"
);
item2.setTrait(
CommonStrata.definition,
"url",
"test/WMS/single_metadata_url.xml"
);
});
composite.add(CommonStrata.definition, item1);
composite.add(CommonStrata.definition, item2);
composite.setTrait(CommonStrata.user, "show", false);
expect(item1.show).toEqual(false);
expect(item2.show).toEqual(false);
});
// it("concatenates legends", async function() {
// await composite
// .updateFromJson({
// type: "composite",
// items: [
// {
// type: "wms",
// legendUrl: "http://not.valid"
// },
// {
// type: "wms",
// legendUrl: "http://not.valid.either"
// }
// ]
// });
// expect(composite.legendUrls.slice()).toEqual([
// new LegendUrl("http://not.valid"),
// new LegendUrl("http://not.valid.either")
// ]);
// });
});