From 3c8eb5f06df2d56c62c06d795a8553af6c0fcda1 Mon Sep 17 00:00:00 2001 From: Arthur Cinader Date: Wed, 30 Nov 2016 13:14:22 -0800 Subject: [PATCH] Allow select (keys) to be altered in triggers Inspect the keys when a query is returned from a trigger and respect the new value. --- spec/CloudCode.spec.js | 51 +++++++++++++++++++++++++++++++++++------- src/triggers.js | 4 ++++ 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/spec/CloudCode.spec.js b/spec/CloudCode.spec.js index 90a351b6d9..c840fe9e97 100644 --- a/spec/CloudCode.spec.js +++ b/spec/CloudCode.spec.js @@ -712,7 +712,7 @@ describe('Cloud Code', () => { done(); }); }); - + it('beforeSave change propagates through the afterSave #1931', (done) => { Parse.Cloud.beforeSave('ChangingObject', function(request, response) { request.object.unset('file'); @@ -1044,7 +1044,7 @@ describe('Cloud Code', () => { res.success(); }); }).not.toThrow(); - + rp.post({ url: 'http://localhost:8378/1/jobs/myJob', headers: { @@ -1065,7 +1065,7 @@ describe('Cloud Code', () => { res.success(); }); }).not.toThrow(); - + rp.post({ url: 'http://localhost:8378/1/jobs/myJob', headers: { @@ -1094,7 +1094,7 @@ describe('Cloud Code', () => { done(); }); }).not.toThrow(); - + rp.post({ url: 'http://localhost:8378/1/jobs/myJob', headers: { @@ -1121,7 +1121,7 @@ describe('Cloud Code', () => { done(); }); }).not.toThrow(); - + rp.post({ url: `http://${Parse.applicationId}:${Parse.masterKey}@localhost:8378/1/jobs/myJob`, }).then(() => { @@ -1152,7 +1152,7 @@ describe('Cloud Code', () => { done(); }); }); - + rp.post({ url: 'http://localhost:8378/1/jobs/myJob', headers: { @@ -1179,7 +1179,7 @@ describe('Cloud Code', () => { done(); }); }); - + rp.post({ url: 'http://localhost:8378/1/jobs/myJob', headers: { @@ -1434,5 +1434,40 @@ describe('afterFind hooks', () => { }); }); -}); + it('should alter select', (done) => { + Parse.Cloud.beforeFind('MyObject', (req) => { + req.query.select('white'); + return req.query; + }); + + const obj0 = new Parse.Object('MyObject') + .set('white', true) + .set('black', true); + obj0.save() + .then(() => { + new Parse.Query('MyObject') + .first() + .then(result => { + expect(result.get('white')).toBe(true); + expect(result.get('black')).toBe(undefined); + done(); + }); + }); + }); + it('should not alter select', (done) => { + const obj0 = new Parse.Object('MyObject') + .set('white', true) + .set('black', true); + obj0.save() + .then(() => { + new Parse.Query('MyObject') + .first() + .then(result => { + expect(result.get('white')).toBe(true); + expect(result.get('black')).toBe(true); + done(); + }); + }); + }); +}); diff --git a/src/triggers.js b/src/triggers.js index c46df20fb0..8befdac22c 100644 --- a/src/triggers.js +++ b/src/triggers.js @@ -333,6 +333,10 @@ export function maybeRunQueryTrigger(triggerType, className, restWhere, restOpti restOptions = restOptions || {}; restOptions.include = jsonQuery.include; } + if (jsonQuery.keys) { + restOptions = restOptions || {}; + restOptions.keys = jsonQuery.keys; + } return { restWhere, restOptions