Skip to content

Commit

Permalink
Merge pull request #396 from COV-GIS/fix-crud-param-names
Browse files Browse the repository at this point in the history
Fix crud param names
  • Loading branch information
jgravois authored Nov 19, 2018
2 parents 891bfb7 + 3221ea7 commit fdae3b6
Show file tree
Hide file tree
Showing 4 changed files with 184 additions and 21 deletions.
24 changes: 17 additions & 7 deletions packages/arcgis-rest-feature-service/src/add.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@ import { IFeature } from "@esri/arcgis-rest-common-types";
import {
request,
IRequestOptions,
appendCustomParams
appendCustomParams,
warn
} from "@esri/arcgis-rest-request";
import { IEditFeaturesParams, IEditFeatureResult } from "./helpers";

/**
* Add features request options. See the [REST Documentation](https://developers.arcgis.com/rest/services-reference/add-features.htm) for more information.
*
* @param url - Feature service url.
* @param adds - Array of JSON features to add.
* @param features - Array of JSON features to add.
* @param params - Query parameters to be sent to the feature service via the request.
*/
export interface IAddFeaturesRequestOptions
Expand All @@ -26,7 +27,11 @@ export interface IAddFeaturesRequestOptions
/**
* Array of JSON features to add.
*/
adds: IFeature[];
features: IFeature[];
/**
* Deprecated. Please use `features` instead.
*/
adds?: IFeature[];
}

/**
Expand All @@ -49,7 +54,7 @@ export interface IAddFeaturesResult {
*
* addFeatures({
* url,
* adds: [{
* features: [{
* geometry: { x: -120, y: 45, spatialReference: { wkid: 4326 } },
* attributes: { status: "alive" }
* }]
Expand All @@ -72,9 +77,14 @@ export function addFeatures(

appendCustomParams(requestOptions, options);

// mixin, don't overwrite
options.params.features = requestOptions.adds;
delete options.params.adds;
if (options.params.adds && options.params.adds.length) {
// mixin, don't overwrite
options.params.features = requestOptions.adds;
delete options.params.adds;
warn(
"The `adds` parameter is deprecated and will be removed in a future release. Please use `features` instead."
);
}

return request(url, options);
}
24 changes: 17 additions & 7 deletions packages/arcgis-rest-feature-service/src/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
import {
request,
IRequestOptions,
appendCustomParams
appendCustomParams,
warn
} from "@esri/arcgis-rest-request";
import {
IEditFeaturesParams,
Expand All @@ -23,7 +24,7 @@ export interface IDeleteFeaturesParams
* Delete features request options. See the [REST Documentation](https://developers.arcgis.com/rest/services-reference/delete-features.htm) for more information.
*
* @param url - Feature service url.
* @param deletes - Array of objectIds to delete.
* @param objectIds - Array of objectIds to delete.
* @param params - Query parameters to be sent to the feature service via the request.
*/
export interface IDeleteFeaturesRequestOptions
Expand All @@ -36,7 +37,11 @@ export interface IDeleteFeaturesRequestOptions
/**
* Array of objectIds to delete.
*/
deletes: number[];
objectIds: number[];
/**
* Deprecated. Please use `objectIds` instead.
*/
deletes?: number[];
}

/**
Expand All @@ -59,7 +64,7 @@ export interface IDeleteFeaturesResult {
*
* deleteFeatures({
* url,
* deletes: [1,2,3]
* objectIds: [1,2,3]
* });
* ```
*
Expand All @@ -79,9 +84,14 @@ export function deleteFeatures(

appendCustomParams(requestOptions, options);

// mixin, don't overwrite
options.params.objectIds = requestOptions.deletes;
delete options.params.deletes;
if (options.params.deletes && options.params.deletes.length) {
// mixin, don't overwrite
options.params.objectIds = requestOptions.deletes;
delete options.params.deletes;
warn(
"The `deletes` parameter is deprecated and will be removed in a future release. Please use `objectIds` instead."
);
}

return request(url, options);
}
24 changes: 17 additions & 7 deletions packages/arcgis-rest-feature-service/src/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@ import { IFeature } from "@esri/arcgis-rest-common-types";
import {
request,
IRequestOptions,
appendCustomParams
appendCustomParams,
warn
} from "@esri/arcgis-rest-request";
import { IEditFeaturesParams, IEditFeatureResult } from "./helpers";

/**
* Update features request options. See the [REST Documentation](https://developers.arcgis.com/rest/services-reference/update-features.htm) for more information.
*
* @param url - Feature service url.
* @param updates - Array of JSON features to update.
* @param features - Array of JSON features to update.
* @param params - Query parameters to be sent to the feature service via the request.
*/
export interface IUpdateFeaturesRequestOptions
Expand All @@ -26,7 +27,11 @@ export interface IUpdateFeaturesRequestOptions
/**
* Array of JSON features to update.
*/
updates: IFeature[];
features: IFeature[];
/**
* Deprecated. Please use `features` instead.
*/
updates?: IFeature[];
}

/**
Expand All @@ -49,7 +54,7 @@ export interface IUpdateFeaturesResult {
*
* updateFeatures({
* url,
* updates: [{
* features: [{
* geometry: { x: -120, y: 45, spatialReference: { wkid: 4326 } },
* attributes: { status: "alive" }
* }]
Expand All @@ -72,9 +77,14 @@ export function updateFeatures(

appendCustomParams(requestOptions, options);

// mixin, don't overwrite
options.params.features = requestOptions.updates;
delete options.params.updates;
if (options.params.updates && options.params.updates.length) {
// mixin, don't overwrite
options.params.features = requestOptions.updates;
delete options.params.updates;
warn(
"The `updates` parameter is deprecated and will be removed in a future release. Please use `features` instead."
);
}

return request(url, options);
}
133 changes: 133 additions & 0 deletions packages/arcgis-rest-feature-service/test/crud.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,130 @@ describe("feature", () => {
it("should return objectId of the added feature and a truthy success", done => {
const requestOptions = {
url: serviceUrl,
features: [
{
geometry: {
x: -9177311.62541634,
y: 4247151.205222242,
spatialReference: {
wkid: 102100,
latestWkid: 3857
}
},
attributes: {
Tree_ID: 102,
Collected: 1349395200000,
Crew: "Linden+ Forrest+ Johnny"
}
}
]
};
fetchMock.once("*", addFeaturesResponse);
addFeatures(requestOptions)
.then(response => {
expect(fetchMock.called()).toBeTruthy();
const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
expect(url).toEqual(`${requestOptions.url}/addFeatures`);
expect(options.body).toContain(
"features=" +
encodeURIComponent(
'[{"geometry":{"x":-9177311.62541634,"y":4247151.205222242,"spatialReference":{"wkid":102100,"latestWkid":3857}},"attributes":{"Tree_ID":102,"Collected":1349395200000,"Crew":"Linden+ Forrest+ Johnny"}}]'
)
);
expect(options.method).toBe("POST");
expect(response.addResults[0].objectId).toEqual(1001);
expect(response.addResults[0].success).toEqual(true);
done();
})
.catch(e => {
fail(e);
});
});

it("should return objectId of the updated feature and a truthy success", done => {
const requestOptions = {
url: serviceUrl,
features: [
{
attributes: {
OBJECTID: 1001,
Street: "NO",
Native: "YES"
}
}
],
rollbackOnFailure: false
} as IUpdateFeaturesRequestOptions;
fetchMock.once("*", updateFeaturesResponse);
updateFeatures(requestOptions)
.then(response => {
expect(fetchMock.called()).toBeTruthy();
const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
expect(url).toEqual(`${requestOptions.url}/updateFeatures`);
expect(options.method).toBe("POST");
expect(options.body).toContain(
"features=" +
encodeURIComponent(
'[{"attributes":{"OBJECTID":1001,"Street":"NO","Native":"YES"}}]'
)
);
expect(options.body).toContain("rollbackOnFailure=false");
expect(response.updateResults[0].success).toEqual(true);
done();
})
.catch(e => {
fail(e);
});
});

it("should return objectId of the deleted feature and a truthy success", done => {
const requestOptions = {
url: serviceUrl,
objectIds: [1001],
where: "1=1"
} as IDeleteFeaturesRequestOptions;
fetchMock.once("*", deleteFeaturesResponse);
deleteFeatures(requestOptions)
.then(response => {
expect(fetchMock.called()).toBeTruthy();
const [url, options]: [string, RequestInit] = fetchMock.lastCall("*");
expect(url).toEqual(`${requestOptions.url}/deleteFeatures`);
expect(options.body).toContain("objectIds=1001");
expect(options.body).toContain("where=1%3D1");
expect(options.method).toBe("POST");
expect(response.deleteResults[0].objectId).toEqual(
requestOptions.objectIds[0]
);
expect(response.deleteResults[0].success).toEqual(true);
done();
})
.catch(e => {
fail(e);
});
});

// tests for depreciated params
// remove when `adds`, `updates` and `deletes` params removed
it("should return objectId of the added feature and a truthy success", done => {
const requestOptions = {
url: serviceUrl,
features: [
{
geometry: {
x: -9177311.62541634,
y: 4247151.205222242,
spatialReference: {
wkid: 102100,
latestWkid: 3857
}
},
attributes: {
Tree_ID: 102,
Collected: 1349395200000,
Crew: "Linden+ Forrest+ Johnny"
}
}
], // for linting
adds: [
{
geometry: {
Expand Down Expand Up @@ -69,6 +193,15 @@ describe("feature", () => {
it("should return objectId of the updated feature and a truthy success", done => {
const requestOptions = {
url: serviceUrl,
features: [
{
attributes: {
OBJECTID: 1001,
Street: "NO",
Native: "YES"
}
}
], // for linting
updates: [
{
attributes: {
Expand Down

0 comments on commit fdae3b6

Please sign in to comment.