Skip to content

Commit b778b31

Browse files
committed
Flatten custom operations in request.object in afterSave hooks.
1 parent d8d3743 commit b778b31

File tree

2 files changed

+48
-6
lines changed

2 files changed

+48
-6
lines changed

spec/ParseAPI.spec.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,46 @@ describe('miscellaneous', function() {
692692
});
693693
});
694694

695+
it('afterSave flattens custom operations', done => {
696+
var triggerTime = 0;
697+
// Register a mock beforeSave hook
698+
Parse.Cloud.afterSave('GameScore', function(req, res) {
699+
let object = req.object;
700+
expect(object instanceof Parse.Object).toBeTruthy();
701+
let originalObject = req.original;
702+
if (triggerTime == 0) {
703+
// Create
704+
expect(object.get('yolo')).toEqual(1);
705+
} else if (triggerTime == 1) {
706+
// Update
707+
expect(object.get('yolo')).toEqual(2);
708+
// Check the originalObject
709+
expect(originalObject.get('yolo')).toEqual(1);
710+
} else {
711+
res.error();
712+
}
713+
triggerTime++;
714+
res.success();
715+
});
716+
717+
var obj = new Parse.Object('GameScore');
718+
obj.increment('yolo', 1);
719+
obj.save().then(() => {
720+
obj.increment('yolo', 1);
721+
return obj.save();
722+
}).then(() => {
723+
// Make sure the checking has been triggered
724+
expect(triggerTime).toBe(2);
725+
// Clear mock afterSave
726+
Parse.Cloud._removeHook("Triggers", "afterSave", "GameScore");
727+
done();
728+
}, error => {
729+
console.error(error);
730+
fail(error);
731+
done();
732+
});
733+
});
734+
695735
it('test cloud function error handling', (done) => {
696736
// Register a function which will fail
697737
Parse.Cloud.define('willFail', (req, res) => {

src/RestWrite.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -821,17 +821,19 @@ RestWrite.prototype.runAfterTrigger = function() {
821821
extraData.objectId = this.query.objectId;
822822
}
823823

824-
// Build the inflated object, different from beforeSave, originalData is not empty
825-
// since developers can change data in the beforeSave.
826-
var inflatedObject = triggers.inflate(extraData, this.originalData);
827-
inflatedObject._finishFetch(this.data);
828824
// Build the original object, we only do this for a update write.
829-
var originalObject;
825+
let originalObject;
830826
if (this.query && this.query.objectId) {
831827
originalObject = triggers.inflate(extraData, this.originalData);
832828
}
833829

834-
triggers.maybeRunTrigger(triggers.Types.afterSave, this.auth, inflatedObject, originalObject, this.config.applicationId);
830+
// Build the inflated object, different from beforeSave, originalData is not empty
831+
// since developers can change data in the beforeSave.
832+
let updatedObject = triggers.inflate(extraData, this.originalData);
833+
updatedObject.set(Parse._decode(undefined, this.data));
834+
updatedObject._handleSaveResponse(this.response.response, this.response.status || 200);
835+
836+
triggers.maybeRunTrigger(triggers.Types.afterSave, this.auth, updatedObject, originalObject, this.config.applicationId);
835837
};
836838

837839
// A helper to figure out what location this operation happens at.

0 commit comments

Comments
 (0)