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 UserController = require('../lib/Controllers/UserController').UserController;
|
||||
const Config = require('../lib/Config');
|
||||
const triggers = require('../lib/triggers');
|
||||
const validatorFail = () => {
|
||||
throw 'you are not authorized';
|
||||
};
|
||||
@@ -1212,4 +1213,25 @@ describe('ParseLiveQuery', function () {
|
||||
object.set({ location: secondPoint });
|
||||
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();
|
||||
updatedObject._handleSaveResponse(this.response.response, this.response.status || 200);
|
||||
|
||||
this.config.database.loadSchema().then(schemaController => {
|
||||
// Notifiy LiveQueryServer if possible
|
||||
const perms = schemaController.getClassLevelPermissions(updatedObject.className);
|
||||
this.config.liveQueryController.onAfterSave(
|
||||
updatedObject.className,
|
||||
updatedObject,
|
||||
originalObject,
|
||||
perms
|
||||
);
|
||||
});
|
||||
|
||||
if (hasLiveQuery) {
|
||||
this.config.database.loadSchema().then(schemaController => {
|
||||
// Notify LiveQueryServer if possible
|
||||
const perms = schemaController.getClassLevelPermissions(updatedObject.className);
|
||||
this.config.liveQueryController.onAfterSave(
|
||||
updatedObject.className,
|
||||
updatedObject,
|
||||
originalObject,
|
||||
perms
|
||||
);
|
||||
});
|
||||
}
|
||||
if (!hasAfterSaveHook) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
// Run afterSave trigger
|
||||
return triggers
|
||||
.maybeRunTrigger(
|
||||
|
||||
Reference in New Issue
Block a user