From 2ba30c59e945a66864a1dce35f521327b47a4f6a Mon Sep 17 00:00:00 2001 From: M0Bruno Date: Mon, 15 Jul 2019 13:23:47 +0200 Subject: [PATCH 1/4] make possible to alter response using the after save trigger like for after find --- spec/RestQuery.spec.js | 24 ++++++++++++++++++++++++ src/RestWrite.js | 9 +++++++++ src/triggers.js | 10 ++++++++++ 3 files changed, 43 insertions(+) diff --git a/spec/RestQuery.spec.js b/spec/RestQuery.spec.js index 66af50c8b7..5aff21cfef 100644 --- a/spec/RestQuery.spec.js +++ b/spec/RestQuery.spec.js @@ -419,4 +419,28 @@ describe('RestQuery.each', () => { expect(resultsOne.length).toBe(1); expect(resultsTwo.length).toBe(1); }); + + it('test afterSave response object is return', done => { + Parse.Cloud.afterSave('TestObject2', function(req) { + const jsonObject = req.object.toJSON(); + delete jsonObject.todelete; + jsonObject.toadd = true; + + req.object = { + toJSON: () => jsonObject, + equals: () => false, + }; + + return req.object; + }); + + rest + .create(config, nobody, 'TestObject2', { todelete: true, tokeep: true }) + .then(response => { + expect(response.response.toadd).toBeTruthy(); + expect(response.response.tokeep).toBeTruthy(); + expect(response.response.todelete).toBeUndefined(); + done(); + }); + }); }); diff --git a/src/RestWrite.js b/src/RestWrite.js index 3fea6043de..8c0c358be5 100644 --- a/src/RestWrite.js +++ b/src/RestWrite.js @@ -1578,6 +1578,15 @@ RestWrite.prototype.runAfterSaveTrigger = function() { this.config, this.context ) + .then(result => { + if ( + result && + result.constructor === Object && + Object.keys(result).length !== 0 + ) { + 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 c0a94c5edd..235c59fd4f 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.toJSON === 'function' && + request.triggerName === Types.afterSave + ) { + return resolve(response.toJSON()); + } + if (request.triggerName === Types.afterSave) { + return resolve(); + } response = {}; if (request.triggerName === Types.beforeSave) { response['object'] = request.object._getSaveJSON(); From e81c3f8279bfc904efdd1660bfce6e5ce0b3f345 Mon Sep 17 00:00:00 2001 From: M0Bruno Date: Thu, 18 Jul 2019 12:04:55 +0200 Subject: [PATCH 2/4] code clearing to follow same object checking --- src/RestWrite.js | 6 +----- src/triggers.js | 5 +++-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/RestWrite.js b/src/RestWrite.js index 8c0c358be5..84ac5110f2 100644 --- a/src/RestWrite.js +++ b/src/RestWrite.js @@ -1579,11 +1579,7 @@ RestWrite.prototype.runAfterSaveTrigger = function() { this.context ) .then(result => { - if ( - result && - result.constructor === Object && - Object.keys(result).length !== 0 - ) { + if (result && typeof result === 'object') { this.response.response = result; } }) diff --git a/src/triggers.js b/src/triggers.js index 235c59fd4f..24ae392bf5 100644 --- a/src/triggers.js +++ b/src/triggers.js @@ -268,10 +268,11 @@ export function getResponseObject(request, resolve, reject) { } if ( response && - typeof response.toJSON === 'function' && + typeof response === 'object' && request.triggerName === Types.afterSave ) { - return resolve(response.toJSON()); + console.log('test'); + return resolve(response); } if (request.triggerName === Types.afterSave) { return resolve(); From 1c68c6be47e60b2761029781d8f010bef664d9f4 Mon Sep 17 00:00:00 2001 From: M0Bruno Date: Thu, 18 Jul 2019 14:07:45 +0200 Subject: [PATCH 3/4] remove console log debug --- src/triggers.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/triggers.js b/src/triggers.js index 24ae392bf5..f2917ce6fd 100644 --- a/src/triggers.js +++ b/src/triggers.js @@ -271,7 +271,6 @@ export function getResponseObject(request, resolve, reject) { typeof response === 'object' && request.triggerName === Types.afterSave ) { - console.log('test'); return resolve(response); } if (request.triggerName === Types.afterSave) { From f782a8f5d6dbf1226bfeb3e8042cc5f3b0a5ce79 Mon Sep 17 00:00:00 2001 From: M0Bruno Date: Thu, 25 Jul 2019 16:03:52 +0200 Subject: [PATCH 4/4] fix test unit --- spec/RestQuery.spec.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/spec/RestQuery.spec.js b/spec/RestQuery.spec.js index 5aff21cfef..412394df21 100644 --- a/spec/RestQuery.spec.js +++ b/spec/RestQuery.spec.js @@ -421,17 +421,18 @@ describe('RestQuery.each', () => { }); 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; - req.object = { - toJSON: () => jsonObject, - equals: () => false, - }; - - return req.object; + return jsonObject; }); rest @@ -439,6 +440,8 @@ describe('RestQuery.each', () => { .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(); });