From 50f1e8eb776c12993fb5819bbcaed6f218ec095a Mon Sep 17 00:00:00 2001 From: BrunoMaurice <93928@supinfo.com> Date: Thu, 25 Jul 2019 18:31:18 +0200 Subject: [PATCH] Make possible to alter response using the after save trigger (#5814) * make possible to alter response using the after save trigger like for after find * code clearing to follow same object checking * remove console log debug * fix test unit --- spec/RestQuery.spec.js | 27 +++++++++++++++++++++++++++ src/RestWrite.js | 5 +++++ src/triggers.js | 10 ++++++++++ 3 files changed, 42 insertions(+) diff --git a/spec/RestQuery.spec.js b/spec/RestQuery.spec.js index 66af50c8..412394df 100644 --- a/spec/RestQuery.spec.js +++ b/spec/RestQuery.spec.js @@ -419,4 +419,31 @@ describe('RestQuery.each', () => { expect(resultsOne.length).toBe(1); expect(resultsTwo.length).toBe(1); }); + + it('test afterSave response object is return', done => { + Parse.Cloud.beforeSave('TestObject2', function(req) { + req.object.set('tobeaddbefore', true); + req.object.set('tobeaddbeforeandremoveafter', true); + }); + + Parse.Cloud.afterSave('TestObject2', function(req) { + const jsonObject = req.object.toJSON(); + delete jsonObject.todelete; + delete jsonObject.tobeaddbeforeandremoveafter; + jsonObject.toadd = true; + + return jsonObject; + }); + + rest + .create(config, nobody, 'TestObject2', { todelete: true, tokeep: true }) + .then(response => { + expect(response.response.toadd).toBeTruthy(); + expect(response.response.tokeep).toBeTruthy(); + expect(response.response.tobeaddbefore).toBeTruthy(); + expect(response.response.tobeaddbeforeandremoveafter).toBeUndefined(); + expect(response.response.todelete).toBeUndefined(); + done(); + }); + }); }); diff --git a/src/RestWrite.js b/src/RestWrite.js index 3fea6043..84ac5110 100644 --- a/src/RestWrite.js +++ b/src/RestWrite.js @@ -1578,6 +1578,11 @@ RestWrite.prototype.runAfterSaveTrigger = function() { this.config, this.context ) + .then(result => { + if (result && typeof result === 'object') { + this.response.response = result; + } + }) .catch(function(err) { logger.warn('afterSave caught an error', err); }); diff --git a/src/triggers.js b/src/triggers.js index c0a94c5e..f2917ce6 100644 --- a/src/triggers.js +++ b/src/triggers.js @@ -266,6 +266,16 @@ export function getResponseObject(request, resolve, reject) { ) { return resolve(response); } + if ( + response && + typeof response === 'object' && + request.triggerName === Types.afterSave + ) { + return resolve(response); + } + if (request.triggerName === Types.afterSave) { + return resolve(); + } response = {}; if (request.triggerName === Types.beforeSave) { response['object'] = request.object._getSaveJSON();