From 035fcd2615b226e58e62ce120772477ae29b20af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Kaiser?= Date: Wed, 3 Feb 2016 21:21:30 +0000 Subject: [PATCH 1/2] Added test for proper handling of trying to call a non-existing Cloud Function --- spec/ParseAPI.spec.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/spec/ParseAPI.spec.js b/spec/ParseAPI.spec.js index 662e28eda7..c75d2ce364 100644 --- a/spec/ParseAPI.spec.js +++ b/spec/ParseAPI.spec.js @@ -648,4 +648,15 @@ describe('miscellaneous', function() { }); }); + it('fails on invalid function', done => { + Parse.Cloud.run('somethingThatDoesDefinitelyNotExist').then((s) => { + fail('This should have never suceeded'); + done(); + }, (e) => { + expect(e.code).toEqual(Parse.Error.SCRIPT_FAILED); + expect(e.message).toEqual('Invalid function.'); + done(); + }); + }); + }); From ce1de0a5efb63011cf57b075ae235f587fe8fff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Kaiser?= Date: Wed, 17 Feb 2016 20:43:09 +0000 Subject: [PATCH 2/2] Cloud Function validation now uses the complete request instead of just the request parameters --- spec/ParseAPI.spec.js | 10 +++++----- src/functions.js | 17 ++++++++--------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/spec/ParseAPI.spec.js b/spec/ParseAPI.spec.js index 893b1210b2..52c17fbfed 100644 --- a/spec/ParseAPI.spec.js +++ b/spec/ParseAPI.spec.js @@ -587,7 +587,7 @@ describe('miscellaneous', function() { done(); }); }); - + it('test cloud function query parameters', (done) => { Parse.Cloud.define('echoParams', (req, res) => { res.success(req.params); @@ -621,8 +621,8 @@ describe('miscellaneous', function() { // Register a function with validation Parse.Cloud.define('functionWithParameterValidation', (req, res) => { res.success('works'); - }, (params) => { - return params.success === 100; + }, (request) => { + return request.params.success === 100; }); Parse.Cloud.run('functionWithParameterValidation', {"success":100}).then((s) => { @@ -638,8 +638,8 @@ describe('miscellaneous', function() { // Register a function with validation Parse.Cloud.define('functionWithParameterValidationFailure', (req, res) => { res.success('noway'); - }, (params) => { - return params.success === 100; + }, (request) => { + return request.params.success === 100; }); Parse.Cloud.run('functionWithParameterValidationFailure', {"success":500}).then((s) => { diff --git a/src/functions.js b/src/functions.js index c787a814f4..8e88aa0358 100644 --- a/src/functions.js +++ b/src/functions.js @@ -10,10 +10,15 @@ var router = new PromiseRouter(); function handleCloudFunction(req) { if (Parse.Cloud.Functions[req.params.functionName]) { - const params = Object.assign({}, req.body, req.query); - + var request = { + params: Object.assign({}, req.body, req.query), + master: req.auth && req.auth.isMaster, + user: req.auth && req.auth.user, + installationId: req.info.installationId + }; + if (Parse.Cloud.Validators[req.params.functionName]) { - var result = Parse.Cloud.Validators[req.params.functionName](params); + var result = Parse.Cloud.Validators[req.params.functionName](request); if (!result) { throw new Parse.Error(Parse.Error.SCRIPT_FAILED, 'Validation failed.'); } @@ -21,12 +26,6 @@ function handleCloudFunction(req) { return new Promise(function (resolve, reject) { var response = createResponseObject(resolve, reject); - var request = { - params: params, - master: req.auth && req.auth.isMaster, - user: req.auth && req.auth.user, - installationId: req.info.installationId - }; Parse.Cloud.Functions[req.params.functionName](request, response); }); } else {