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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy