UNPKG

terriajs

Version:

Geospatial data visualization platform.

143 lines (120 loc) 4.84 kB
import { configure, runInAction } from "mobx"; import { http, HttpResponse } from "msw"; import Terria from "../../../../lib/Models/Terria"; import ArcGisFeatureServerCatalogGroup from "../../../../lib/Models/Catalog/Esri/ArcGisFeatureServerCatalogGroup"; import CommonStrata from "../../../../lib/Models/Definition/CommonStrata"; import i18next from "i18next"; import ArcGisFeatureServerCatalogItem from "../../../../lib/Models/Catalog/Esri/ArcGisFeatureServerCatalogItem"; import { worker } from "../../../mocks/browser"; import featureServerJson from "../../../../wwwroot/test/ArcGisFeatureServer/Redlands_Emergency_Vehicles/featureServer.json"; configure({ enforceActions: "observed", computedRequiresReaction: true }); describe("ArcGisFeatureServerCatalogGroup", function () { const featureServerUrl = "http://example.com/arcgis/rest/services/Redlands_Emergency_Vehicles/FeatureServer"; let terria: Terria; let group: ArcGisFeatureServerCatalogGroup; beforeEach(function () { terria = new Terria({ baseUrl: "./" }); group = new ArcGisFeatureServerCatalogGroup("test", terria); worker.use( http.get( "http://example.com/arcgis/rest/services/Redlands_Emergency_Vehicles/FeatureServer", () => HttpResponse.json(featureServerJson) ) ); }); it("has a type and typeName", function () { expect(group.type).toBe("esri-featureServer-group"); expect(group.typeName).toBe( i18next.t("models.arcGisFeatureServerCatalogGroup.name") ); }); describe("after loading metadata", function () { beforeEach(async function () { runInAction(() => { group.setTrait("definition", "url", featureServerUrl); }); await group.loadMetadata(); }); it("defines info", function () { const serviceDescription = i18next.t( "models.arcGisFeatureServerCatalogGroup.serviceDescription" ); const dataDescription = i18next.t( "models.arcGisFeatureServerCatalogGroup.dataDescription" ); const copyrightText = i18next.t( "models.arcGisFeatureServerCatalogGroup.copyrightText" ); expect(group.info.map(({ name }) => name)).toEqual([ serviceDescription, dataDescription, copyrightText ]); expect(group.info.map(({ content }) => content)).toEqual([ "Vehicle Service Description", "Vehicle Description", "Vehicle Copyright" ]); }); }); describe("loadMembers", function () { it("properly creates members", async function () { runInAction(() => { group.setTrait(CommonStrata.definition, "url", featureServerUrl); }); await group.loadMembers(); expect(group.members).toBeDefined(); expect(group.members.length).toBe(3); const member0 = group.memberModels[0] as ArcGisFeatureServerCatalogItem; const member1 = group.memberModels[1] as ArcGisFeatureServerCatalogItem; const member2 = group.memberModels[2] as ArcGisFeatureServerCatalogItem; expect(member0.name).toBe("Ambulances"); expect(member0.url).toBe(featureServerUrl + "/0"); expect(member1.name).toBe("Police"); expect(member1.url).toBe(featureServerUrl + "/1"); expect(member2.name).toBe("Fire"); expect(member2.url).toBe(featureServerUrl + "/123"); }); }); describe("Supports FeatureServer with token", function () { beforeEach(async function () { runInAction(() => { group.setTrait(CommonStrata.definition, "url", featureServerUrl); group.setTrait(CommonStrata.definition, "token", "test-token"); }); }); it("Uses token in url", async function () { worker.use( http.get( "http://example.com/arcgis/rest/services/Redlands_Emergency_Vehicles/FeatureServer", ({ request }) => { if (new URL(request.url).searchParams.get("token") !== "test-token") return HttpResponse.error(); return HttpResponse.json(featureServerJson); } ) ); await group.loadMembers(); expect(group.members.length).toBe(3); }); it("Correctly passes token to members", async function () { await group.loadMembers(); expect(group.members).toBeDefined(); expect(group.members.length).toBe(3); expect(group.memberModels).toBeDefined(); expect(group.memberModels.length).toBe(3); const member0 = group.memberModels[0] as ArcGisFeatureServerCatalogItem; const member1 = group.memberModels[1] as ArcGisFeatureServerCatalogItem; const member2 = group.memberModels[2] as ArcGisFeatureServerCatalogItem; expect(member0.token).toBe("test-token"); expect(member1.token).toBe("test-token"); expect(member2.token).toBe("test-token"); }); }); });