diff --git a/spec/CloudCode.spec.js b/spec/CloudCode.spec.js index 38db14b6..a1250bbe 100644 --- a/spec/CloudCode.spec.js +++ b/spec/CloudCode.spec.js @@ -1200,6 +1200,61 @@ describe('Cloud Code', () => { }); }); +describe('beforeSave hooks', () => { + it('should have request headers', (done) => { + Parse.Cloud.beforeSave('MyObject', (req, res) => { + expect(req.headers).toBeDefined(); + res.success(); + }); + + const MyObject = Parse.Object.extend('MyObject'); + const myObject = new MyObject(); + myObject.save().then(() => done()); + }); +}); + +describe('afterSave hooks', () => { + it('should have request headers', (done) => { + Parse.Cloud.afterSave('MyObject', (req) => { + expect(req.headers).toBeDefined(); + }); + + const MyObject = Parse.Object.extend('MyObject'); + const myObject = new MyObject(); + myObject.save() + .then(() => done()); + }); +}); + +describe('beforeDelete hooks', () => { + it('should have request headers', (done) => { + Parse.Cloud.beforeDelete('MyObject', (req, res) => { + expect(req.headers).toBeDefined(); + res.success(); + }); + + const MyObject = Parse.Object.extend('MyObject'); + const myObject = new MyObject(); + myObject.save() + .then(myObj => myObj.destroy()) + .then(() => done()); + }); +}); + +describe('afterDelete hooks', () => { + it('should have request headers', (done) => { + Parse.Cloud.afterDelete('MyObject', (req) => { + expect(req.headers).toBeDefined(); + }); + + const MyObject = Parse.Object.extend('MyObject'); + const myObject = new MyObject(); + myObject.save() + .then(myObj => myObj.destroy()) + .then(() => done()); + }); +}); + describe('beforeFind hooks', () => { it('should add beforeFind trigger', (done) => { Parse.Cloud.beforeFind('MyObject', (req) => { @@ -1334,6 +1389,26 @@ describe('beforeFind hooks', () => { }); }); }); + + it('should have request headers', (done) => { + Parse.Cloud.beforeFind('MyObject', (req) => { + expect(req.headers).toBeDefined(); + }); + + const MyObject = Parse.Object.extend('MyObject'); + const myObject = new MyObject(); + myObject.save() + .then((myObj) => { + const query = new Parse.Query('MyObject'); + query.equalTo('objectId', myObj.id); + return Promise.all([ + query.get(myObj.id), + query.first(), + query.find(), + ]); + }) + .then(() => done()); + }); }); describe('afterFind hooks', () => { @@ -1531,4 +1606,25 @@ describe('afterFind hooks', () => { done(); }); }); + + it('should have request headers', (done) => { + Parse.Cloud.afterFind('MyObject', (req, res) => { + expect(req.headers).toBeDefined(); + res.success(); + }); + + const MyObject = Parse.Object.extend('MyObject'); + const myObject = new MyObject(); + myObject.save() + .then((myObj) => { + const query = new Parse.Query('MyObject'); + query.equalTo('objectId', myObj.id); + return Promise.all([ + query.get(myObj.id), + query.first(), + query.find(), + ]); + }) + .then(() => done()); + }); }); diff --git a/src/middlewares.js b/src/middlewares.js index 209f3d3f..7e9e0920 100644 --- a/src/middlewares.js +++ b/src/middlewares.js @@ -108,6 +108,7 @@ export function handleParseHeaders(req, res, next) { info.app = AppCache.get(info.appId); req.config = new Config(info.appId, mount); + req.config.headers = req.headers || {}; req.info = info; var isMaster = (info.masterKey === req.config.masterKey); diff --git a/src/triggers.js b/src/triggers.js index 411c2c97..21b8c3a0 100644 --- a/src/triggers.js +++ b/src/triggers.js @@ -133,7 +133,8 @@ export function getRequestObject(triggerType, auth, parseObject, originalParseOb triggerName: triggerType, object: parseObject, master: false, - log: config.loggerController + log: config.loggerController, + headers: config.headers, }; if (originalParseObject) { @@ -164,7 +165,8 @@ export function getRequestQueryObject(triggerType, auth, query, count, config, i master: false, count, log: config.loggerController, - isGet + isGet, + headers: config.headers, }; if (!auth) {