fix: Cloud Code Trigger afterSave executes even if not set (#8520)

This commit is contained in:
Diamond Lewis
2023-05-11 19:39:54 -05:00
committed by GitHub
parent 4187a973cc
commit afd0515e20
2 changed files with 37 additions and 11 deletions

View File

@@ -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();
});
}); });

View File

@@ -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(