UNPKG

terriajs

Version:

Geospatial data visualization platform.

129 lines (117 loc) 4.96 kB
import { configure, runInAction } from "mobx"; import Rectangle from "terriajs-cesium/Source/Core/Rectangle"; import UrlTemplateImageryProvider from "terriajs-cesium/Source/Scene/UrlTemplateImageryProvider"; import { ImageryParts } from "../../../../lib/ModelMixins/MappableMixin"; import Terria from "../../../../lib/Models/Terria"; import UrlTemplateImageryCatalogItem from "../../../../lib/Models/Catalog/CatalogItems/UrlTemplateImageryCatalogItem"; configure({ enforceActions: "observed", computedRequiresReaction: true }); describe("UrlTemplateImageryCatalogItem", function () { let item: UrlTemplateImageryCatalogItem; beforeEach(function () { item = new UrlTemplateImageryCatalogItem("test", new Terria()); runInAction(() => item.setTrait("definition", "url", "some-url")); }); it("has a type", function () { expect(UrlTemplateImageryCatalogItem.type).toBe( UrlTemplateImageryCatalogItem.type ); }); describe("when url has been set", function () { it("should create an imageryProvider with correct properties", function () { expect( item.imageryProvider instanceof UrlTemplateImageryProvider ).toBeTruthy(); runInAction(() => { item.setTrait("definition", "attribution", "foo bar baz"); item.setTrait("definition", "maximumLevel", 5); item.setTrait("definition", "minimumLevel", 1); item.setTrait("definition", "tileHeight", 200); item.setTrait("definition", "tileWidth", 200); item.setTrait( "definition", "pickFeaturesUrl", "some-feature-picking-url" ); item.setTrait("definition", "allowFeaturePicking", false); }); const imageryProvider = item.imageryProvider; expect(imageryProvider).toBeDefined(); if (imageryProvider !== undefined) { expect(imageryProvider.url).toEqual(item.url ?? ""); expect(imageryProvider.credit.html).toEqual(item.attribution as string); expect(imageryProvider.minimumLevel).toEqual( item.minimumLevel ?? Infinity ); expect(imageryProvider.maximumLevel).toEqual( item.maximumLevel ?? Infinity ); expect(imageryProvider.tileHeight).toEqual(item.tileHeight ?? Infinity); expect(imageryProvider.tileWidth).toEqual(item.tileWidth ?? Infinity); expect(imageryProvider.pickFeaturesUrl).toEqual( item.pickFeaturesUrl ?? "" ); expect(imageryProvider.enablePickFeatures).toEqual( item.allowFeaturePicking ); expect((imageryProvider as any)._subdomains).toEqual(item.subdomains); } }); describe("mapItem", function () { it("has the correct `alpha` value", function () { if (!ImageryParts.is(item.mapItems[0])) throw new Error("Expected MapItem to be an ImageryParts"); runInAction(() => item.setTrait("definition", "opacity", 0.42)); expect(item.mapItems[0].alpha).toBe(0.42); runInAction(() => item.setTrait("definition", "opacity", 0.9)); expect(item.mapItems[0].alpha).toBe(0.9); }); it("has the correct `show` value", function () { if (!ImageryParts.is(item.mapItems[0])) throw new Error("Expected MapItem to be an ImageryParts"); runInAction(() => item.setTrait("definition", "show", false)); expect(item.mapItems[0].show).toBe(false); runInAction(() => item.setTrait("definition", "show", true)); expect(item.mapItems[0].show).toBe(true); }); it("has the correct `clippingRectangle` value", function () { const rectangleDegrees = { west: 10, south: -15, east: 20, north: 20 }; item.setTrait("definition", "rectangle", rectangleDegrees); if (!ImageryParts.is(item.mapItems[0])) throw new Error("Expected MapItem to be an ImageryParts"); expect(item.mapItems[0].clippingRectangle).toBeDefined(); if (item.mapItems[0].clippingRectangle !== undefined) { const rectangleRadians = Rectangle.fromDegrees( rectangleDegrees.west, rectangleDegrees.south, rectangleDegrees.east, rectangleDegrees.north ); expect(item.mapItems[0].clippingRectangle.west).toBeCloseTo( rectangleRadians.west ); expect(item.mapItems[0].clippingRectangle.south).toBeCloseTo( rectangleRadians.south ); expect(item.mapItems[0].clippingRectangle.east).toBeCloseTo( rectangleRadians.east ); expect(item.mapItems[0].clippingRectangle.north).toBeCloseTo( rectangleRadians.north ); } runInAction(() => item.setTrait("definition", "clipToRectangle", false) ); expect(item.mapItems[0].clippingRectangle).toBe(undefined); }); }); }); });