fix: Cloud Code Trigger afterSave executes even if not set (#8520)
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
const Auth = require('../lib/Auth');
|
const Auth = require('../lib/Auth');
|
||||||
const UserController = require('../lib/Controllers/UserController').UserController;
|
const UserController = require('../lib/Controllers/UserController').UserController;
|
||||||
const Config = require('../lib/Config');
|
const Config = require('../lib/Config');
|
||||||
|
const triggers = require('../lib/triggers');
|
||||||
const validatorFail = () => {
|
const validatorFail = () => {
|
||||||
throw 'you are not authorized';
|
throw 'you are not authorized';
|
||||||
};
|
};
|
||||||
@@ -1212,4 +1213,25 @@ describe('ParseLiveQuery', function () {
|
|||||||
object.set({ location: secondPoint });
|
object.set({ location: secondPoint });
|
||||||
await object.save();
|
await object.save();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('prevent afterSave trigger if not exists', async () => {
|
||||||
|
await reconfigureServer({
|
||||||
|
liveQuery: {
|
||||||
|
classNames: ['TestObject'],
|
||||||
|
},
|
||||||
|
startLiveQueryServer: true,
|
||||||
|
verbose: false,
|
||||||
|
silent: true,
|
||||||
|
});
|
||||||
|
spyOn(triggers, 'maybeRunTrigger').and.callThrough();
|
||||||
|
const object1 = new TestObject();
|
||||||
|
const object2 = new TestObject();
|
||||||
|
const object3 = new TestObject();
|
||||||
|
await Parse.Object.saveAll([object1, object2, object3]);
|
||||||
|
|
||||||
|
expect(triggers.maybeRunTrigger).toHaveBeenCalledTimes(0);
|
||||||
|
expect(object1.id).toBeDefined();
|
||||||
|
expect(object2.id).toBeDefined();
|
||||||
|
expect(object3.id).toBeDefined();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1577,17 +1577,21 @@ RestWrite.prototype.runAfterSaveTrigger = function () {
|
|||||||
const { originalObject, updatedObject } = this.buildParseObjects();
|
const { originalObject, updatedObject } = this.buildParseObjects();
|
||||||
updatedObject._handleSaveResponse(this.response.response, this.response.status || 200);
|
updatedObject._handleSaveResponse(this.response.response, this.response.status || 200);
|
||||||
|
|
||||||
this.config.database.loadSchema().then(schemaController => {
|
if (hasLiveQuery) {
|
||||||
// Notifiy LiveQueryServer if possible
|
this.config.database.loadSchema().then(schemaController => {
|
||||||
const perms = schemaController.getClassLevelPermissions(updatedObject.className);
|
// Notify LiveQueryServer if possible
|
||||||
this.config.liveQueryController.onAfterSave(
|
const perms = schemaController.getClassLevelPermissions(updatedObject.className);
|
||||||
updatedObject.className,
|
this.config.liveQueryController.onAfterSave(
|
||||||
updatedObject,
|
updatedObject.className,
|
||||||
originalObject,
|
updatedObject,
|
||||||
perms
|
originalObject,
|
||||||
);
|
perms
|
||||||
});
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (!hasAfterSaveHook) {
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
// Run afterSave trigger
|
// Run afterSave trigger
|
||||||
return triggers
|
return triggers
|
||||||
.maybeRunTrigger(
|
.maybeRunTrigger(
|
||||||
|
|||||||
Reference in New Issue
Block a user