diff --git a/spec/ParseAPI.spec.js b/spec/ParseAPI.spec.js index 42ac34918c..2412ac5eaa 100644 --- a/spec/ParseAPI.spec.js +++ b/spec/ParseAPI.spec.js @@ -967,6 +967,23 @@ describe('miscellaneous', function() { }); }); + it('beforeSave change propagates through the save response', (done) => { + Parse.Cloud.beforeSave('ChangingObject', function(request, response) { + request.object.set('foo', 'baz'); + response.success(); + }); + let obj = new Parse.Object('ChangingObject'); + obj.save({ foo: 'bar' }).then((objAgain) => { + expect(objAgain.get('foo')).toEqual('baz'); + Parse.Cloud._removeHook("Triggers", "beforeSave", "ChangingObject"); + done(); + }, (e) => { + Parse.Cloud._removeHook("Triggers", "beforeSave", "ChangingObject"); + fail('Should not have failed to save.'); + done(); + }); + }); + it('dedupes an installation properly and returns updatedAt', (done) => { let headers = { 'Content-Type': 'application/json', diff --git a/src/RestWrite.js b/src/RestWrite.js index d42f2f4524..72eda1fce0 100644 --- a/src/RestWrite.js +++ b/src/RestWrite.js @@ -164,6 +164,7 @@ RestWrite.prototype.runBeforeTrigger = function() { }).then((response) => { if (response && response.object) { this.data = response.object; + this.storage['changedByTrigger'] = true; // We should delete the objectId for an update write if (this.query && this.query.objectId) { delete this.data.objectId @@ -806,6 +807,9 @@ RestWrite.prototype.runDatabaseOperation = function() { objectId: this.data.objectId, createdAt: this.data.createdAt }; + if (this.storage['changedByTrigger']) { + Object.assign(resp, this.data); + } if (this.storage['token']) { resp.sessionToken = this.storage['token']; }