Skip to content

Commit

Permalink
feat(Added): "where" filter to portal download requests
Browse files Browse the repository at this point in the history
AFFECTS PACKAGES:
@esri/hub-downloads
  • Loading branch information
rgwozdz committed Aug 26, 2020
1 parent 31c6ae0 commit 0737df6
Show file tree
Hide file tree
Showing 4 changed files with 141 additions and 73 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export interface IPortalDatasetExportRequestParams {
authentication: any;
title?: string;
spatialRefId?: string;
where?: string;
}

/**
Expand Down Expand Up @@ -40,9 +41,9 @@ export function portalRequestDatasetExport(
}

function composeExportParameters(params: any) {
const { datasetId, spatialRefId } = params;
const { datasetId, spatialRefId, where } = params;
const layerId = datasetId.split("_")[1] || 0;
const layers = [{ id: Number(layerId) }];
const layers = [{ id: Number(layerId), where }];
return spatialRefId
? {
layers,
Expand Down
25 changes: 17 additions & 8 deletions packages/downloads/src/request-dataset-export.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { UserSession } from '@esri/arcgis-rest-auth';
import { hubRequestDatasetExport } from './hub/hub-request-dataset-export';
import { portalRequestDatasetExport } from './portal/portal-request-dataset-export';
import { UserSession } from "@esri/arcgis-rest-auth";
import { hubRequestDatasetExport } from "./hub/hub-request-dataset-export";
import { portalRequestDatasetExport } from "./portal/portal-request-dataset-export";
import { DownloadFormat } from "./download-format";

export interface IDatasetExportRequestParams {
Expand All @@ -16,7 +16,7 @@ export interface IDatasetExportRequestParams {
spatialRefId?: string;
/* A geometry envelope for filtering the data. Applicable to Hub API exports only. */
geometry?: string;
/* A SQL-style WHERE filter for attribute values. Applicable to Hub API exports only. */
/* A SQL-style WHERE filter for attribute values. */
where?: string;
/* Required Portal downloads only. */
authentication?: UserSession;
Expand All @@ -41,7 +41,9 @@ export interface IDatasetExportResult {
* Request an export of a dataset to a particular file format.
* @param params - parameters defining a dataset export job
*/
export function requestDatasetExport (params: IDatasetExportRequestParams): Promise<IDatasetExportResult> {
export function requestDatasetExport(
params: IDatasetExportRequestParams
): Promise<IDatasetExportResult> {
const {
host,
datasetId,
Expand All @@ -54,8 +56,15 @@ export function requestDatasetExport (params: IDatasetExportRequestParams): Prom
authentication
} = params;

if (target === 'portal') {
return portalRequestDatasetExport({ datasetId, format, title, authentication, spatialRefId });
if (target === "portal") {
return portalRequestDatasetExport({
datasetId,
format,
title,
authentication,
spatialRefId,
where
});
}

return hubRequestDatasetExport({
Expand All @@ -66,4 +75,4 @@ export function requestDatasetExport (params: IDatasetExportRequestParams): Prom
geometry,
where
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ describe("portalRequestDatasetExport", () => {
{
id: "abcdef0123456789abcdef0123456789",
exportFormat: "CSV",
exportParameters: { layers: [Object({ id: 0 })] },
exportParameters: { layers: [Object({ id: 0, where: undefined })] },
title: "test-export",
authentication
}
Expand Down Expand Up @@ -68,7 +68,7 @@ describe("portalRequestDatasetExport", () => {
{
id: "abcdef0123456789abcdef0123456789",
exportFormat: "CSV",
exportParameters: { layers: [Object({ id: 0 })] },
exportParameters: { layers: [Object({ id: 0, where: undefined })] },
title: "test-export",
authentication
}
Expand Down Expand Up @@ -108,7 +108,7 @@ describe("portalRequestDatasetExport", () => {
{
id: "abcdef0123456789abcdef0123456789",
exportFormat: "CSV",
exportParameters: { layers: [Object({ id: 0 })] },
exportParameters: { layers: [Object({ id: 0, where: undefined })] },
title: "test-export",
authentication
}
Expand Down Expand Up @@ -150,7 +150,52 @@ describe("portalRequestDatasetExport", () => {
id: "abcdef0123456789abcdef0123456789",
exportFormat: "CSV",
exportParameters: {
layers: [Object({ id: 0 })],
layers: [Object({ id: 0, where: undefined })],
targetSR: { wkid: 4326 }
},
title: "test-export",
authentication
}
]);
expect(result).toBeDefined();
expect(result.downloadId).toEqual("abcdef");
expect(result.jobId).toEqual("job-id");
expect(result.size).toEqual(1000);
expect(typeof result.exportCreated === "number").toEqual(true);
} catch (err) {
expect(err).toBeUndefined();
} finally {
done();
}
});

it("succeeds, uses where", async done => {
try {
spyOn(portal, "exportItem").and.returnValue(
new Promise((resolve, reject) => {
resolve({
size: 1000,
jobId: "job-id",
exportItemId: "abcdef"
});
})
);

const result = await portalRequestDatasetExport({
datasetId: "abcdef0123456789abcdef0123456789_0",
format: "CSV",
authentication,
spatialRefId: "4326",
title: "test-export",
where: "1=1"
});
expect(portal.exportItem).toHaveBeenCalledTimes(1);
expect((portal.exportItem as any).calls.first().args).toEqual([
{
id: "abcdef0123456789abcdef0123456789",
exportFormat: "CSV",
exportParameters: {
layers: [Object({ id: 0, where: "1=1" })],
targetSR: { wkid: 4326 }
},
title: "test-export",
Expand Down
131 changes: 72 additions & 59 deletions packages/downloads/test/request-dataset-export.test.ts
Original file line number Diff line number Diff line change
@@ -1,93 +1,106 @@

import { UserSession } from '@esri/arcgis-rest-auth';
import { UserSession } from "@esri/arcgis-rest-auth";
import { requestDatasetExport } from "../src/request-dataset-export";
import * as hubExport from '../src/hub/hub-request-dataset-export';
import * as portalExport from '../src/portal/portal-request-dataset-export'
import * as hubExport from "../src/hub/hub-request-dataset-export";
import * as portalExport from "../src/portal/portal-request-dataset-export";

describe("requestDownloadMetadata", () => {
it('handle hub export', async done => {
it("handle hub export", async done => {
try {
spyOn(hubExport, 'hubRequestDatasetExport').and.returnValue(
spyOn(hubExport, "hubRequestDatasetExport").and.returnValue(
new Promise((resolve, reject) => {
resolve({
downloadId: 'abcdef0123456789abcdef0123456789_0:CSV:4326:undefined:undefined'
});
}))
resolve({
downloadId:
"abcdef0123456789abcdef0123456789_0:CSV:4326:undefined:undefined"
});
})
);

const result = await requestDatasetExport({
host: 'http://hub.com/',
datasetId: 'abcdef0123456789abcdef0123456789_0',
spatialRefId: '4326',
format: 'CSV'
host: "http://hub.com/",
datasetId: "abcdef0123456789abcdef0123456789_0",
spatialRefId: "4326",
format: "CSV"
});

expect(hubExport.hubRequestDatasetExport).toHaveBeenCalledTimes(1)
expect((hubExport.hubRequestDatasetExport as any).calls.first().args).toEqual([{
host: 'http://hub.com/',
datasetId: 'abcdef0123456789abcdef0123456789_0',
format: 'CSV',
spatialRefId: '4326',
geometry: undefined,
where: undefined
}])
expect(hubExport.hubRequestDatasetExport).toHaveBeenCalledTimes(1);
expect(
(hubExport.hubRequestDatasetExport as any).calls.first().args
).toEqual([
{
host: "http://hub.com/",
datasetId: "abcdef0123456789abcdef0123456789_0",
format: "CSV",
spatialRefId: "4326",
geometry: undefined,
where: undefined
}
]);

expect(result).toEqual({
downloadId: 'abcdef0123456789abcdef0123456789_0:CSV:4326:undefined:undefined'
})
downloadId:
"abcdef0123456789abcdef0123456789_0:CSV:4326:undefined:undefined"
});
} catch (err) {
expect(err).toBeUndefined();
} finally {
done();
}
});

it('handle portal export', async done => {
it("handle portal export", async done => {
try {
spyOn(portalExport, 'portalRequestDatasetExport').and.returnValue(
spyOn(portalExport, "portalRequestDatasetExport").and.returnValue(
new Promise((resolve, reject) => {
resolve({
size: 1000,
jobId: 'job-id',
downloadId: 'abcdef',
exportCreated: Date.now()
});
}))
resolve({
size: 1000,
jobId: "job-id",
downloadId: "abcdef",
exportCreated: Date.now()
});
})
);

const authentication = new UserSession({
username: 'portal-user',
portal: 'http://portal.com/sharing/rest',
token: '123',
})
authentication.getToken = () => new Promise((resolve) => {
resolve('123')
})

username: "portal-user",
portal: "http://portal.com/sharing/rest",
token: "123"
});
authentication.getToken = () =>
new Promise(resolve => {
resolve("123");
});

const result = await requestDatasetExport({
datasetId: 'abcdef0123456789abcdef0123456789_0',
format: 'CSV',
datasetId: "abcdef0123456789abcdef0123456789_0",
format: "CSV",
authentication,
title: 'test-export',
target: 'portal',
spatialRefId: '2227'
title: "test-export",
target: "portal",
spatialRefId: "2227"
});

expect(portalExport.portalRequestDatasetExport).toHaveBeenCalledTimes(1)
expect((portalExport.portalRequestDatasetExport as any).calls.first().args).toEqual([{
datasetId: 'abcdef0123456789abcdef0123456789_0',
format: 'CSV',
title: 'test-export',
authentication,
spatialRefId: '2227'
}])
expect(portalExport.portalRequestDatasetExport).toHaveBeenCalledTimes(1);
expect(
(portalExport.portalRequestDatasetExport as any).calls.first().args
).toEqual([
{
datasetId: "abcdef0123456789abcdef0123456789_0",
format: "CSV",
title: "test-export",
authentication,
spatialRefId: "2227",
where: undefined
}
]);
expect(result).toBeDefined();
expect(result.downloadId).toEqual('abcdef');
expect(result.jobId).toEqual('job-id');
expect(result.downloadId).toEqual("abcdef");
expect(result.jobId).toEqual("job-id");
expect(result.size).toEqual(1000);
expect(typeof result.exportCreated === 'number').toEqual(true)
expect(typeof result.exportCreated === "number").toEqual(true);
} catch (err) {
expect(err).toBeUndefined();
} finally {
done();
}
});
});
});

0 comments on commit 0737df6

Please sign in to comment.