Skip to content

Commit afd0515

Browse files
authored
fix: Cloud Code Trigger afterSave executes even if not set (#8520)
1 parent 4187a97 commit afd0515

File tree

2 files changed

+37
-11
lines changed

2 files changed

+37
-11
lines changed

spec/ParseLiveQuery.spec.js

+22
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
const Auth = require('../lib/Auth');
33
const UserController = require('../lib/Controllers/UserController').UserController;
44
const Config = require('../lib/Config');
5+
const triggers = require('../lib/triggers');
56
const validatorFail = () => {
67
throw 'you are not authorized';
78
};
@@ -1212,4 +1213,25 @@ describe('ParseLiveQuery', function () {
12121213
object.set({ location: secondPoint });
12131214
await object.save();
12141215
});
1216+
1217+
it('prevent afterSave trigger if not exists', async () => {
1218+
await reconfigureServer({
1219+
liveQuery: {
1220+
classNames: ['TestObject'],
1221+
},
1222+
startLiveQueryServer: true,
1223+
verbose: false,
1224+
silent: true,
1225+
});
1226+
spyOn(triggers, 'maybeRunTrigger').and.callThrough();
1227+
const object1 = new TestObject();
1228+
const object2 = new TestObject();
1229+
const object3 = new TestObject();
1230+
await Parse.Object.saveAll([object1, object2, object3]);
1231+
1232+
expect(triggers.maybeRunTrigger).toHaveBeenCalledTimes(0);
1233+
expect(object1.id).toBeDefined();
1234+
expect(object2.id).toBeDefined();
1235+
expect(object3.id).toBeDefined();
1236+
});
12151237
});

src/RestWrite.js

+15-11
Original file line numberDiff line numberDiff line change
@@ -1577,17 +1577,21 @@ RestWrite.prototype.runAfterSaveTrigger = function () {
15771577
const { originalObject, updatedObject } = this.buildParseObjects();
15781578
updatedObject._handleSaveResponse(this.response.response, this.response.status || 200);
15791579

1580-
this.config.database.loadSchema().then(schemaController => {
1581-
// Notifiy LiveQueryServer if possible
1582-
const perms = schemaController.getClassLevelPermissions(updatedObject.className);
1583-
this.config.liveQueryController.onAfterSave(
1584-
updatedObject.className,
1585-
updatedObject,
1586-
originalObject,
1587-
perms
1588-
);
1589-
});
1590-
1580+
if (hasLiveQuery) {
1581+
this.config.database.loadSchema().then(schemaController => {
1582+
// Notify LiveQueryServer if possible
1583+
const perms = schemaController.getClassLevelPermissions(updatedObject.className);
1584+
this.config.liveQueryController.onAfterSave(
1585+
updatedObject.className,
1586+
updatedObject,
1587+
originalObject,
1588+
perms
1589+
);
1590+
});
1591+
}
1592+
if (!hasAfterSaveHook) {
1593+
return Promise.resolve();
1594+
}
15911595
// Run afterSave trigger
15921596
return triggers
15931597
.maybeRunTrigger(

0 commit comments

Comments
 (0)