diff --git a/spec/CloudCode.spec.js b/spec/CloudCode.spec.js index c02999ad51..e77b1c69a7 100644 --- a/spec/CloudCode.spec.js +++ b/spec/CloudCode.spec.js @@ -1352,6 +1352,27 @@ describe('Cloud Code', () => { }); }); + it('allow cloud to encode Parse Objects', async () => { + const user = new Parse.User(); + user.setUsername('username'); + user.setPassword('password'); + user.set('deleted', false); + await user.signUp(); + Parse.Cloud.define( + 'deleteAccount', + async req => { + expect(req.params.object instanceof Parse.Object).toBeTrue(); + req.params.object.set('deleted', true); + await req.params.object.save(null, { useMasterKey: true }); + return 'Object deleted'; + }, + { + requireMaster: true, + } + ); + await Parse.Cloud.run('deleteAccount', { object: user.toPointer() }, { useMasterKey: true }); + }); + it('beforeSave should not affect fetched pointers', done => { Parse.Cloud.beforeSave('BeforeSaveUnchanged', () => {}); diff --git a/src/Routers/FunctionsRouter.js b/src/Routers/FunctionsRouter.js index 4972453fc3..da69d54e0c 100644 --- a/src/Routers/FunctionsRouter.js +++ b/src/Routers/FunctionsRouter.js @@ -18,6 +18,12 @@ function parseObject(obj) { return Object.assign(new Date(obj.iso), obj); } else if (obj && obj.__type == 'File') { return Parse.File.fromJSON(obj); + } else if (obj && obj.__type == 'Pointer') { + return Parse.Object.fromJSON({ + __type: 'Pointer', + className: obj.className, + objectId: obj.objectId, + }); } else if (obj && typeof obj === 'object') { return parseParams(obj); } else {