Skip to content

Commit b60bdf1

Browse files
【fix】ICL-1420 iClient 删除要素时ids数组过长,提示删除成功但是数据没有被删掉 reviewed by luoxiao
1 parent 1b7bd31 commit b60bdf1

File tree

4 files changed

+144
-6
lines changed

4 files changed

+144
-6
lines changed

src/common/iServer/EditFeaturesService.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {Util} from '../commontypes/Util';
55
import {EditType} from '../REST';
66
import {CommonServiceBase} from './CommonServiceBase';
77
import {EditFeaturesParameters} from './EditFeaturesParameters';
8+
import { FetchRequest } from '../util/FetchRequest';
89

910
/**
1011
* @class EditFeaturesService
@@ -90,9 +91,16 @@ export class EditFeaturesService extends CommonServiceBase {
9091
jsonParameters = EditFeaturesParameters.toJsonParameters(params);
9192
if (editType === EditType.DELETE) {
9293
ids = Util.toJSON(params.IDs);
93-
me.url = Util.urlAppend(me.url, Util.getParameterString({ids}));
94-
method = "DELETE";
9594
jsonParameters = ids;
95+
var urlWithIds = Util.urlAppend(me.url, Util.getParameterString({ids}))
96+
if(FetchRequest.urlIsLong(urlWithIds)) {
97+
me.url = Util.urlAppend(me.url, Util.getParameterString({_method: 'DELETE'}));
98+
method = "POST";
99+
} else{
100+
me.url = urlWithIds;
101+
method = "DELETE";
102+
}
103+
96104
} else if (editType === EditType.UPDATE) {
97105
method = "PUT";
98106
} else {

src/common/util/FetchRequest.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ export var FetchRequest = {
369369
if (!this.urlIsLong(url)) {
370370
return this._fetch(url, params, options, type);
371371
} else {
372-
return this._postSimulatie(type, url.substring(0, url.indexOf('?') - 1), params, options);
372+
return this._postSimulatie(type, url.substring(0, url.indexOf('?')), Util.getParameters(url), options);
373373
}
374374
},
375375
/**
@@ -394,7 +394,7 @@ export var FetchRequest = {
394394
return RequestJSONPPromise.DELETE(config);
395395
}
396396
if (this.urlIsLong(url)) {
397-
return this._postSimulatie(type, url.substring(0, url.indexOf('?') - 1), params, options);
397+
return this._postSimulatie(type, url.substring(0, url.indexOf('?')), Util.getParameters(url), options);
398398
}
399399
return this._fetch(url, params, options, type);
400400
},

test/common/iServer/EditFeaturesServiceSpec.js

Lines changed: 100 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,6 @@ describe('EditFeaturesService', () => {
154154

155155
// 删除要素
156156
it('successEvent:deleteFeature', (done) => {
157-
var deleteFailedEventArgsSystem = null, deleteSuccessEventArgsSystem = null;
158157
var deleteFeaturesFailed = (deleteFailedEventArgsSystem) => {
159158
expect(deleteFailedEventArgsSystem).toBeNull();
160159
};
@@ -200,9 +199,108 @@ describe('EditFeaturesService', () => {
200199
deleteFeaturesService.processAsync(deleteFeaturesParams);
201200
});
202201

202+
// 删除要素-url超过长度转post
203+
it('successEvent:deleteFeature-longurl', (done) => {
204+
var ids = []
205+
for(var i =0; i<500; i++){
206+
ids.push(i)
207+
}
208+
var deleteFeaturesFailed = (deleteFailedEventArgsSystem) => {
209+
expect(deleteFailedEventArgsSystem).toBeNull();
210+
};
211+
var deleteFeaturesCompleted = (deleteSuccessEventArgsSystem) => {
212+
try {
213+
expect(deleteSuccessEventArgsSystem.type).toBe("processCompleted");
214+
var id = JSON.stringify(ids);
215+
expect(deleteSuccessEventArgsSystem.object.options.data).toBe(id);
216+
expect(deleteSuccessEventArgsSystem.object.options.method).toBe("POST");
217+
expect(deleteSuccessEventArgsSystem.result.succeed).toBeTruthy();
218+
deleteFeaturesService.destroy();
219+
deleteFeaturesParams.destroy();
220+
done();
221+
} catch (exception) {
222+
expect(false).toBeTruthy();
223+
console.log("deleteFeatures案例失败" + exception.name + ":" + exception.message);
224+
deleteFeaturesService.destroy();
225+
deleteFeaturesParams.destroy();
226+
done();
227+
}
228+
};
229+
var deleteFeaturesOptions = {
230+
eventListeners: {
231+
'processCompleted': deleteFeaturesCompleted,
232+
'processFailed': deleteFeaturesFailed
233+
}
234+
};
235+
var deleteFeaturesParams = new EditFeaturesParameters({
236+
dataSourceName: "Jingjin",
237+
dataSetName: "Landuse_R",
238+
IDs: ids,
239+
editType: EditType.DELETE
240+
});
241+
var deleteFeaturesService = new EditFeaturesService(editServiceURL, deleteFeaturesOptions);
242+
spyOn(FetchRequest, 'commit').and.callFake((method, testUrl, params, options) => {
243+
expect(method).toBe("POST");
244+
expect(testUrl).toBe(editServiceURL + "/features?_method=DELETE");
245+
expect(JSON.parse(params).length).toBe(500);
246+
expect(options).not.toBeNull();
247+
return Promise.resolve(new Response(`{"succeed":true}`));
248+
});
249+
deleteFeaturesService.processAsync(deleteFeaturesParams);
250+
});
251+
// 删除要素-url超过长度且原本带有参数
252+
it('successEvent:deleteFeature-longurl-withParms', (done) => {
253+
var ids = []
254+
for(var i =0; i<1000; i++){
255+
ids.push(i)
256+
}
257+
var editServiceURL2 = editServiceURL + "?token=test&key=123"
258+
var deleteFeaturesFailed = (deleteFailedEventArgsSystem) => {
259+
expect(deleteFailedEventArgsSystem).toBeNull();
260+
};
261+
var deleteFeaturesCompleted = (deleteSuccessEventArgsSystem) => {
262+
try {
263+
expect(deleteSuccessEventArgsSystem.type).toBe("processCompleted");
264+
var id = JSON.stringify(ids);
265+
expect(deleteSuccessEventArgsSystem.object.options.data).toBe(id);
266+
expect(deleteSuccessEventArgsSystem.object.options.method).toBe("POST");
267+
expect(deleteSuccessEventArgsSystem.result.succeed).toBeTruthy();
268+
deleteFeaturesService.destroy();
269+
deleteFeaturesParams.destroy();
270+
done();
271+
} catch (exception) {
272+
expect(false).toBeTruthy();
273+
console.log("deleteFeatures案例失败" + exception.name + ":" + exception.message);
274+
deleteFeaturesService.destroy();
275+
deleteFeaturesParams.destroy();
276+
done();
277+
}
278+
};
279+
var deleteFeaturesOptions = {
280+
eventListeners: {
281+
'processCompleted': deleteFeaturesCompleted,
282+
'processFailed': deleteFeaturesFailed
283+
}
284+
};
285+
var deleteFeaturesParams = new EditFeaturesParameters({
286+
dataSourceName: "Jingjin",
287+
dataSetName: "Landuse_R",
288+
IDs: ids,
289+
editType: EditType.DELETE
290+
});
291+
var deleteFeaturesService = new EditFeaturesService(editServiceURL2, deleteFeaturesOptions);
292+
spyOn(FetchRequest, 'commit').and.callFake((method, testUrl, params, options) => {
293+
expect(method).toBe("POST");
294+
expect(testUrl).toBe( editServiceURL + "/features?token=test&key=123&_method=DELETE");
295+
expect(JSON.parse(params).length).toBe(1000);
296+
expect(options).not.toBeNull();
297+
return Promise.resolve(new Response(`{"succeed":true}`));
298+
});
299+
deleteFeaturesService.processAsync(deleteFeaturesParams);
300+
});
301+
203302
// 失败事件
204303
it('failEvent:addFeatures_noParameters', (done) => {
205-
var noParamsFailedEventArgsSystem = null, noParamsSuccessEventArgsSystem = null;
206304
var noParamsFailed = (noParamsFailedEventArgsSystem) => {
207305
try {
208306

test/common/util/FetchRequestSpec.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,38 @@ describe('FetchRequest', () => {
115115
timeout: 45000
116116
});
117117
});
118+
it('delete_urllong', () => {
119+
var ids = []
120+
for(var i = 0;i <500; i++){
121+
ids.push(i)
122+
}
123+
var url = 'http://test.supermap.io/examples/leaflet/editor.html#addressMatchService';
124+
var params = {
125+
ids: ids
126+
};
127+
setCORS(true);
128+
spyOn(FetchRequest, '_fetch').and.callFake((url) => {
129+
expect(url).not.toContain('499');
130+
});
131+
FetchRequest.delete(url, params);
132+
expect(FetchRequest._fetch.calls.count()).toBe(1);
133+
});
134+
it('Get_urllong', () => {
135+
var ids = []
136+
for(var i = 0;i <500; i++){
137+
ids.push(i)
138+
}
139+
var url = 'http://test.supermap.io/examples/leaflet/editor.html#addressMatchService';
140+
var params = {
141+
ids: ids
142+
};
143+
setCORS(true);
144+
spyOn(FetchRequest, '_fetch').and.callFake((url) => {
145+
expect(url).not.toContain('499');
146+
});
147+
FetchRequest.get(url, params);
148+
expect(FetchRequest._fetch.calls.count()).toBe(1);
149+
});
118150
afterAll(() => {
119151
RequestJSONPPromise.limitLength = defaultval;
120152
setCORS(defaltCors);

0 commit comments

Comments
 (0)