terriajs
Version:
Geospatial data visualization platform.
257 lines (227 loc) • 10.4 kB
text/typescript
import i18next from "i18next";
import { runInAction } from "mobx";
import { http, HttpResponse } from "msw";
import CkanItemReference from "../../../../lib/Models/Catalog/Ckan/CkanItemReference";
import WebMapServiceCatalogItem from "../../../../lib/Models/Catalog/Ows/WebMapServiceCatalogItem";
import Terria from "../../../../lib/Models/Terria";
import WebMapServiceCatalogGroup from "../../../../lib/Models/Catalog/Ows/WebMapServiceCatalogGroup";
import { worker } from "../../../mocks/browser";
import taxationStatisticsPackage from "../../../../wwwroot/test/CKAN/taxation-statistics-package.json";
import taxationStatisticsWmsResource from "../../../../wwwroot/test/CKAN/taxation-statistics-wms-resource.json";
import vicWmsLayerResource from "../../../../wwwroot/test/CKAN/vic-wms-layer-resource.json";
import wmsNoLayerResource from "../../../../wwwroot/test/CKAN/wms-no-layer-resource.json";
describe("CkanItemReference", function () {
let terria: Terria;
let ckanItemReference: CkanItemReference;
let ckanItemTarget: any;
beforeEach(function () {
terria = new Terria({
baseUrl: "./"
});
ckanItemReference = new CkanItemReference("test", terria);
worker.use(
http.get(
"https://example.com/api/3/action/package_show",
({ request }) => {
const url = new URL(request.url);
if (url.searchParams.get("id") !== "tax-stats-package")
throw new Error(`Unexpected query params: ${url.search}`);
return HttpResponse.json(taxationStatisticsPackage);
}
),
http.get(
"https://example.com/api/3/action/resource_show",
({ request }) => {
const url = new URL(request.url);
const id = url.searchParams.get("id");
if (id === "tax-stats-wms-resource")
return HttpResponse.json(taxationStatisticsWmsResource);
if (id === "wms-no-layers-resource")
return HttpResponse.json(wmsNoLayerResource);
if (id === "vic-wms-resource")
return HttpResponse.json(vicWmsLayerResource);
throw new Error(`Unexpected resource id: ${id}`);
}
),
http.all("*", () => {
return new HttpResponse(null, { status: 404 });
})
);
});
it("has a type and typeName", function () {
expect(ckanItemReference.type).toBe("ckan-item");
expect(ckanItemReference.typeName).toBe(i18next.t("models.ckan.name"));
});
describe("Can load an item by datasetId - ", function () {
beforeEach(async function () {
runInAction(() => {
ckanItemReference.setTrait("definition", "url", "https://example.com");
ckanItemReference.setTrait("definition", "name", "Taxation Statistics");
ckanItemReference.setTrait(
"definition",
"datasetId",
"tax-stats-package"
);
});
(await ckanItemReference.loadReference()).throwIfError();
ckanItemTarget = ckanItemReference.target;
});
it("properly creates item", function () {
// when creating a single item directly name is retained from the definition stratum
expect(ckanItemTarget.name).toBe("Taxation Statistics");
expect(ckanItemReference._ckanResource).toBeDefined();
expect(ckanItemReference._ckanDataset).toBeDefined();
expect(ckanItemReference._ckanCatalogGroup).toBe(undefined);
expect(ckanItemTarget).toBeDefined();
expect(ckanItemTarget instanceof WebMapServiceCatalogItem).toBe(true);
expect(ckanItemTarget.url).toBe(
"http://data.gov.au/geoserver/taxation-statistics-2011-12/wms?request=GetCapabilities"
);
expect(ckanItemTarget.rectangle.west).toBe(96.816941408);
expect(ckanItemTarget.rectangle.south).toBe(-43.598215003);
expect(ckanItemTarget.rectangle.east).toBe(159.109219008);
expect(ckanItemTarget.rectangle.north).toBe(-9.142175977);
const licenceInfo = ckanItemTarget.info.filter(
(i: any) => i.name === i18next.t("models.ckan.licence")
)[0];
expect(licenceInfo.content).toBe(
"[Creative Commons Attribution 3.0 Australia](http://creativecommons.org/licenses/by/3.0/au/)"
);
const contactInfo = ckanItemTarget.info.filter(
(i: any) => i.name === i18next.t("models.ckan.contact_point")
)[0];
expect(contactInfo.content).toBe("taxstats@ato.gov.au");
const datasetInfo = ckanItemTarget.info.filter(
(i: any) => i.name === i18next.t("models.ckan.datasetDescription")
)[0];
expect(datasetInfo.content).toBe(
"Taxation statistics: an overview of the income and tax status of Australian individuals, companies, partnerships, trusts and funds for 2011-12. "
);
const authorInfo = ckanItemTarget.info.filter(
(i: any) => i.name === i18next.t("models.ckan.author")
)[0];
expect(authorInfo.content).toBe("Australian Taxation Office");
const createdInfo = ckanItemTarget.info.filter(
(i: any) => i.name === i18next.t("models.ckan.metadata_created")
)[0];
expect(createdInfo.content).toBe("2014-04-24");
const modifiedInfo = ckanItemTarget.info.filter(
(i: any) => i.name === i18next.t("models.ckan.metadata_modified")
)[0];
expect(modifiedInfo.content).toBe("2015-08-25");
const updateInfo = ckanItemTarget.info.filter(
(i: any) => i.name === i18next.t("models.ckan.update_freq")
)[0];
expect(updateInfo.content).toBe("daily");
const custodianInfo = ckanItemTarget.info.filter(
(i: any) => i.name === i18next.t("models.ckan.datasetCustodian")
)[0];
expect(custodianInfo.content).toBe("Australian Taxation Office");
});
});
describe("Can load an item by resourceId - ", function () {
beforeEach(function () {
runInAction(() => {
ckanItemReference.setTrait("definition", "url", "https://example.com");
ckanItemReference.setTrait("definition", "name", "Taxation Statistics");
});
});
it("properly creates item", async function () {
ckanItemReference.setTrait(
"definition",
"resourceId",
"tax-stats-wms-resource"
);
await ckanItemReference.loadReference();
ckanItemTarget = ckanItemReference.target;
expect(ckanItemReference._ckanResource).toBeDefined();
expect(ckanItemReference._ckanDataset).toBe(undefined);
expect(ckanItemReference._ckanCatalogGroup).toBe(undefined);
// when creating a single item directly name is retained from the definition stratum
expect(ckanItemTarget.name).toBe("Taxation Statistics");
expect(ckanItemTarget).toBeDefined();
expect(ckanItemTarget instanceof WebMapServiceCatalogItem).toBe(true);
expect(ckanItemTarget.url).toBe(
"http://data.gov.au/geoserver/taxation-statistics-2011-12/wms?request=GetCapabilities"
);
expect(ckanItemTarget.rectangle.west).toBe(undefined);
expect(ckanItemTarget.info.length).toBe(0);
expect(ckanItemTarget.layers).toBe(
"95d9e550_8b36_4273_8df7_2b76c140e73a"
);
});
it("creates WMS group instead of WMS item if no LAYERS", async function () {
ckanItemReference.setTrait(
"definition",
"resourceId",
"wms-no-layers-resource"
);
await ckanItemReference.loadReference();
ckanItemTarget = ckanItemReference.target;
expect(ckanItemReference._ckanResource).toBeDefined();
expect(ckanItemReference._ckanDataset).toBe(undefined);
expect(ckanItemReference._ckanCatalogGroup).toBe(undefined);
// when creating a single item directly name is retained from the definition stratum
expect(ckanItemTarget.name).toBe("Taxation Statistics");
expect(ckanItemTarget).toBeDefined();
expect(ckanItemTarget instanceof WebMapServiceCatalogGroup).toBe(true);
expect(ckanItemTarget.url).toBe(
"http://data.gov.au/geoserver/taxation-statistics-2011-12/wms?request=GetCapabilities"
);
expect(ckanItemTarget.info.length).toBe(0);
});
});
describe("Can load a different item by resourceId - ", function () {
beforeEach(async function () {
runInAction(() => {
ckanItemReference.setTrait("definition", "url", "https://example.com");
ckanItemReference.setTrait(
"definition",
"name",
"EPA Victoria Environmental Audit Reports"
);
ckanItemReference.setTrait(
"definition",
"resourceId",
"vic-wms-resource"
);
});
await ckanItemReference.loadReference();
ckanItemTarget = ckanItemReference.target;
});
it("uses LAYERS from url query string for WMS item", function () {
expect(ckanItemReference._ckanResource).toBeDefined();
expect(ckanItemReference._ckanDataset).toBe(undefined);
expect(ckanItemReference._ckanCatalogGroup).toBe(undefined);
// when creating a single item directly name is retained from the definition stratum
expect(ckanItemTarget.name).toBe(
"EPA Victoria Environmental Audit Reports"
);
expect(ckanItemTarget).toBeDefined();
if (!(ckanItemTarget instanceof WebMapServiceCatalogItem))
throw new Error(
"Expected ckanItemTarget to be a WebMapServiceCatalogItem"
);
expect(ckanItemTarget.url).toBe(
"http://services.land.vic.gov.au/catalogue/publicproxy/guest/dv_geoserver/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&WIDTH=512&HEIGHT=512&LAYERS=ENVIRONPROTECT_ENVIRO_AUDIT_LOC_POINT&STYLES=&FORMAT=image%2Fpng&SRS=EPSG%3A4283&BBOX=141%2C-39%2C150%2C-34"
);
expect(ckanItemTarget.rectangle.west).toBe(undefined);
expect(ckanItemTarget.info.length).toBe(0);
expect(ckanItemTarget.layers).toBe(
"ENVIRONPROTECT_ENVIRO_AUDIT_LOC_POINT"
);
});
});
describe("Rejected if there is no datasetId or resourceId - ", function () {
beforeEach(async function () {
runInAction(() => {
ckanItemReference.setTrait("definition", "url", "https://example.com");
ckanItemReference.setTrait("definition", "name", "Taxation Statistics");
});
await ckanItemReference.loadReference();
});
it("No target can be created", function () {
expect(ckanItemReference.target).toBe(undefined);
});
});
});