UNPKG

terriajs

Version:

Geospatial data visualization platform.

336 lines (301 loc) 14.4 kB
import i18next from "i18next"; import { configure, runInAction } from "mobx"; import { http, HttpResponse } from "msw"; import ArcGisCatalogGroup from "../../../../lib/Models/Catalog/Esri/ArcGisCatalogGroup"; import ArcGisFeatureServerCatalogGroup, { FeatureServerStratum } from "../../../../lib/Models/Catalog/Esri/ArcGisFeatureServerCatalogGroup"; import ArcGisMapServerCatalogGroup, { MapServerStratum } from "../../../../lib/Models/Catalog/Esri/ArcGisMapServerCatalogGroup"; import ArcGisMapServerCatalogItem from "../../../../lib/Models/Catalog/Esri/ArcGisMapServerCatalogItem"; import CommonStrata from "../../../../lib/Models/Definition/CommonStrata"; import Terria from "../../../../lib/Models/Terria"; import { worker } from "../../../mocks/browser"; import servicesJson from "../../../../wwwroot/test/ArcGisServer/sampleserver6/services.json"; import agpJson from "../../../../wwwroot/test/ArcGisServer/sampleserver6/AGP.json"; import elevationJson from "../../../../wwwroot/test/ArcGisServer/sampleserver6/Elevation.json"; import hotspotMSJson from "../../../../wwwroot/test/ArcGisServer/sampleserver6/911CallsHotspotMS.json"; import censusMSJson from "../../../../wwwroot/test/ArcGisServer/sampleserver6/CensusMS.json"; import commercialDamageAssessmentFSJson from "../../../../wwwroot/test/ArcGisServer/sampleserver6/CommercialDamageAssessmentFS.json"; import commercialDamageAssessmentMSJson from "../../../../wwwroot/test/ArcGisServer/sampleserver6/CommercialDamageAssessmentMS.json"; import communityAddressingFSJson from "../../../../wwwroot/test/ArcGisServer/sampleserver6/CommunityAddressingFS.json"; import communityAddressingMSJson from "../../../../wwwroot/test/ArcGisServer/sampleserver6/CommunityAddressingMS.json"; import redlandsMapServerJson from "../../../../wwwroot/test/ArcGisMapServer/Redlands_Emergency_Vehicles/mapServer.json"; import redlandsFeatureServerJson from "../../../../wwwroot/test/ArcGisFeatureServer/Redlands_Emergency_Vehicles/featureServer.json"; import singleFusedMapCacheMapServerJson from "../../../../wwwroot/test/ArcGisMapServer/SingleFusedMapCache/mapserver.json"; import singleFusedMapCacheLegendJson from "../../../../wwwroot/test/ArcGisMapServer/SingleFusedMapCache/legend.json"; import singleFusedMapCacheLayersJson from "../../../../wwwroot/test/ArcGisMapServer/SingleFusedMapCache/layers.json"; configure({ enforceActions: "observed", computedRequiresReaction: true }); describe("ArcGisCatalogGroup", function () { const arcgisServerUrl = "http://example.com/arcgis/rest/services/"; const arcgisMapServerUrl = "http://example.com/arcgis/rest/services/Redlands_Emergency_Vehicles/MapServer"; const arcgisFeatureServerUrl = "http://example.com/arcgis/rest/services/Redlands_Emergency_Vehicles/FeatureServer"; let terria: Terria; let group: ArcGisCatalogGroup; beforeEach(function () { terria = new Terria({ baseUrl: "./" }); group = new ArcGisCatalogGroup("test", terria); worker.use( // Sub-folder services: AGP, Elevation (with and without trailing slash) http.get("http://example.com/arcgis/rest/services/AGP", () => HttpResponse.json(agpJson) ), http.get("http://example.com/arcgis/rest/services/AGP/", () => HttpResponse.json(agpJson) ), http.get("http://example.com/arcgis/rest/services/Elevation", () => HttpResponse.json(elevationJson) ), http.get("http://example.com/arcgis/rest/services/Elevation/", () => HttpResponse.json(elevationJson) ), // Individual MapServer/FeatureServer services (from the services listing) http.get( "http://example.com/arcgis/rest/services/911CallsHotspotMS/MapServer", () => HttpResponse.json(hotspotMSJson) ), http.get( "http://example.com/arcgis/rest/services/CensusMS/MapServer", () => HttpResponse.json(censusMSJson) ), http.get( "http://example.com/arcgis/rest/services/CommercialDamageAssessmentFS/FeatureServer", () => HttpResponse.json(commercialDamageAssessmentFSJson) ), http.get( "http://example.com/arcgis/rest/services/CommercialDamageAssessmentMS/MapServer", () => HttpResponse.json(commercialDamageAssessmentMSJson) ), http.get( "http://example.com/arcgis/rest/services/CommunityAddressingFS/FeatureServer", () => HttpResponse.json(communityAddressingFSJson) ), http.get( "http://example.com/arcgis/rest/services/CommunityAddressingMS/MapServer", () => HttpResponse.json(communityAddressingMSJson) ), // ArcGIS Server services root http.get("http://example.com/arcgis/rest/services/", () => HttpResponse.json(servicesJson) ), // Redlands MapServer http.get( "http://example.com/arcgis/rest/services/Redlands_Emergency_Vehicles/MapServer", () => HttpResponse.json(redlandsMapServerJson) ), // Redlands FeatureServer http.get( "http://example.com/arcgis/rest/services/Redlands_Emergency_Vehicles/FeatureServer", () => HttpResponse.json(redlandsFeatureServerJson) ), // SingleFusedMapCache MapServer (different host) http.get( "http://www.example.com/SingleFusedMapCache/MapServer/Layers", () => HttpResponse.json(singleFusedMapCacheLayersJson) ), http.get( "http://www.example.com/SingleFusedMapCache/MapServer/Legend", () => HttpResponse.json(singleFusedMapCacheLegendJson) ), http.get("http://www.example.com/SingleFusedMapCache/MapServer", () => HttpResponse.json(singleFusedMapCacheMapServerJson) ) ); }); it("has a type and typeName", function () { expect(group.type).toBe("esri-group"); expect(group.typeName).toBe(i18next.t("models.arcGisService.name")); }); describe("loadMembers", function () { it("properly creates members", async function () { runInAction(() => { group.setTrait(CommonStrata.definition, "url", arcgisServerUrl); }); await group.loadMembers(); expect(group.members).toBeDefined(); expect(group.members.length).toBe(8); expect(group.memberModels).toBeDefined(); expect(group.memberModels.length).toBe(8); const member0 = group.memberModels[0] as ArcGisCatalogGroup; const member1 = group.memberModels[1] as ArcGisCatalogGroup; const member2 = group.memberModels[2] as ArcGisMapServerCatalogGroup; const member3 = group.memberModels[3] as ArcGisMapServerCatalogGroup; const member4 = group.memberModels[4] as ArcGisFeatureServerCatalogGroup; const member5 = group.memberModels[5] as ArcGisMapServerCatalogGroup; const member6 = group.memberModels[6] as ArcGisFeatureServerCatalogGroup; const member7 = group.memberModels[7] as ArcGisMapServerCatalogGroup; expect(member0 instanceof ArcGisCatalogGroup).toBeTruthy(); expect(member0.name).toBe("AGP"); expect(member0.uniqueId).toBe("test/AGP"); await member0.loadMembers(); expect(member0.members).toBeDefined(); expect(member0.members.length).toBe(4); expect(member0.memberModels).toBeDefined(); expect(member0.memberModels.length).toBe(4); expect(member1 instanceof ArcGisCatalogGroup).toBeTruthy(); expect(member1.name).toBe("Elevation"); expect(member1.uniqueId).toBe("test/Elevation"); await member1.loadMembers(); expect(member1.members).toBeDefined(); expect(member1.members.length).toBe(3); expect(member1.memberModels).toBeDefined(); expect(member1.memberModels.length).toBe(3); expect(member2 instanceof ArcGisMapServerCatalogGroup).toBeTruthy(); expect(member2.name).toBe("911CallsHotspotMS"); expect(member2.uniqueId).toBe("test/911CallsHotspotMS/MapServer"); await member2.loadMembers(); expect(member2.members).toBeDefined(); expect(member2.members.length).toBe(1); expect(member2.memberModels).toBeDefined(); expect(member2.memberModels.length).toBe(1); expect(member3 instanceof ArcGisMapServerCatalogGroup).toBeTruthy(); expect(member3.name).toBe("CensusMS"); expect(member3.uniqueId).toBe("test/CensusMS/MapServer"); await member3.loadMembers(); expect(member3.members).toBeDefined(); expect(member3.members.length).toBe(4); expect(member3.memberModels).toBeDefined(); expect(member3.memberModels.length).toBe(4); expect(member4 instanceof ArcGisFeatureServerCatalogGroup).toBeTruthy(); expect(member4.name).toBe("CommercialDamageAssessmentFS"); expect(member4.uniqueId).toBe( "test/CommercialDamageAssessmentFS/FeatureServer" ); await member4.loadMembers(); expect(member4.members).toBeDefined(); expect(member4.members.length).toBe(1); expect(member4.memberModels).toBeDefined(); expect(member4.memberModels.length).toBe(1); expect(member5 instanceof ArcGisMapServerCatalogGroup).toBeTruthy(); expect(member5.name).toBe("CommercialDamageAssessmentMS"); expect(member5.uniqueId).toBe( "test/CommercialDamageAssessmentMS/MapServer" ); await member5.loadMembers(); expect(member5.members).toBeDefined(); expect(member5.members.length).toBe(1); expect(member5.memberModels).toBeDefined(); expect(member5.memberModels.length).toBe(1); expect(member6 instanceof ArcGisFeatureServerCatalogGroup).toBeTruthy(); expect(member6.name).toBe("CommunityAddressingFS"); expect(member6.uniqueId).toBe("test/CommunityAddressingFS/FeatureServer"); await member6.loadMembers(); expect(member6.members).toBeDefined(); expect(member6.members.length).toBe(1); expect(member6.memberModels).toBeDefined(); expect(member6.memberModels.length).toBe(1); expect(member7 instanceof ArcGisMapServerCatalogGroup).toBeTruthy(); expect(member7.name).toBe("CommunityAddressingMS"); expect(member7.uniqueId).toBe("test/CommunityAddressingMS/MapServer"); await member7.loadMembers(); expect(member7.members).toBeDefined(); expect(member7.members.length).toBe(1); expect(member7.memberModels).toBeDefined(); expect(member7.memberModels.length).toBe(1); }); }); describe("loading mapserver", function () { beforeEach(async function () { runInAction(() => { group.setTrait("definition", "url", arcgisMapServerUrl); }); await group.loadMetadata(); }); it("proper init", function () { const arcgisServerStratum = group.strata.get( MapServerStratum.stratumName ) as MapServerStratum | undefined; expect(arcgisServerStratum).toBeDefined(); expect(arcgisServerStratum instanceof MapServerStratum).toBeTruthy(); }); }); describe("loading featureServer of mapServer", function () { beforeEach(async function () { runInAction(() => { group.setTrait("definition", "url", arcgisFeatureServerUrl); }); await group.loadMetadata(); }); it("proper init", function () { const arcgisServerStratum = group.strata.get( FeatureServerStratum.stratumName ) as FeatureServerStratum | undefined; expect(arcgisServerStratum).toBeDefined(); expect(arcgisServerStratum instanceof FeatureServerStratum).toBeTruthy(); }); }); describe("Supports MapServer with TilesOnly single fused map cache", function () { beforeEach(async () => { runInAction(() => { group.setTrait( CommonStrata.definition, "url", "http://www.example.com/SingleFusedMapCache/MapServer" ); }); (await group.loadMembers()).throwIfError(); }); it('Creates a single item called "models.arcGisMapServerCatalogGroup.singleFusedMapCacheLayerName"', function () { expect(group.memberModels.length).toBe(1); expect( group.memberModels[0] instanceof ArcGisMapServerCatalogItem ).toBeTruthy(); const item = group.memberModels[0] as ArcGisMapServerCatalogItem; expect(item.name).toBe( "models.arcGisMapServerCatalogGroup.singleFusedMapCacheLayerName" ); expect(item.layers).toBeUndefined(); expect(item.layersArray.length).toBe(0); }); }); describe("loading ArcGIS group with token", function () { beforeEach(async function () { runInAction(() => { group.setTrait(CommonStrata.definition, "url", arcgisServerUrl); group.setTrait(CommonStrata.definition, "token", "test-token"); }); }); it("Uses token in url", async function () { worker.use( http.get("http://example.com/arcgis/rest/services/", ({ request }) => { if (new URL(request.url).searchParams.get("token") !== "test-token") return HttpResponse.error(); return HttpResponse.json(servicesJson); }) ); await group.loadMembers(); expect(group.members.length).toBe(8); }); it("Correctly passes token to members", async function () { await group.loadMembers(); expect(group.members).toBeDefined(); expect(group.members.length).toBe(8); expect(group.memberModels).toBeDefined(); expect(group.memberModels.length).toBe(8); const member0 = group.memberModels[0] as ArcGisCatalogGroup; const member1 = group.memberModels[1] as ArcGisCatalogGroup; const member2 = group.memberModels[2] as ArcGisMapServerCatalogGroup; const member3 = group.memberModels[3] as ArcGisMapServerCatalogGroup; const member4 = group.memberModels[4] as ArcGisFeatureServerCatalogGroup; const member5 = group.memberModels[5] as ArcGisMapServerCatalogGroup; const member6 = group.memberModels[6] as ArcGisFeatureServerCatalogGroup; const member7 = group.memberModels[7] as ArcGisMapServerCatalogGroup; expect(member0.token).toBe("test-token"); expect(member1.token).toBe("test-token"); expect(member2.token).toBe("test-token"); expect(member3.token).toBe("test-token"); expect(member4.token).toBe("test-token"); expect(member5.token).toBe("test-token"); expect(member6.token).toBe("test-token"); expect(member7.token).toBe("test-token"); }); }); });