Fix beforeQuery trigger when getting objects through GET API (#3862)

This commit is contained in:
Antonio Davi Macedo Coelho de Castro
2017-06-21 09:24:51 -03:00
committed by Florent Vilmart
parent a0d1a3517f
commit 422723fa31
3 changed files with 43 additions and 6 deletions

View File

@@ -1211,6 +1211,7 @@ describe('beforeFind hooks', () => {
expect(jsonQuery.include).toEqual('otherKey,otherValue'); expect(jsonQuery.include).toEqual('otherKey,otherValue');
expect(jsonQuery.limit).toEqual(100); expect(jsonQuery.limit).toEqual(100);
expect(jsonQuery.skip).toBe(undefined); expect(jsonQuery.skip).toBe(undefined);
expect(req.isGet).toEqual(false);
}); });
const query = new Parse.Query('MyObject'); const query = new Parse.Query('MyObject');
@@ -1305,6 +1306,34 @@ describe('beforeFind hooks', () => {
done(); done();
}); });
}); });
it('should add beforeFind trigger using get API',(done) => {
const hook = {
method: function(req) {
expect(req.isGet).toEqual(true);
return Promise.resolve();
}
};
spyOn(hook, 'method').and.callThrough();
Parse.Cloud.beforeFind('MyObject', hook.method);
const obj = new Parse.Object('MyObject');
obj.set('secretField', 'SSID');
obj.save().then(function() {
rp({
method: 'GET',
uri: 'http://localhost:8378/1/classes/MyObject/' + obj.id,
headers: {
'X-Parse-Application-Id': 'test',
'X-Parse-REST-API-Key': 'rest'
},
json: true,
}).then(body => {
expect(body.secretField).toEqual('SSID');
expect(hook.method).toHaveBeenCalled();
done();
});
});
});
}); });
describe('afterFind hooks', () => { describe('afterFind hooks', () => {

View File

@@ -37,9 +37,14 @@ function find(config, auth, className, restWhere, restOptions, clientSDK) {
// get is just like find but only queries an objectId. // get is just like find but only queries an objectId.
const get = (config, auth, className, objectId, restOptions, clientSDK) => { const get = (config, auth, className, objectId, restOptions, clientSDK) => {
var restWhere = { objectId };
enforceRoleSecurity('get', className, auth); enforceRoleSecurity('get', className, auth);
const query = new RestQuery(config, auth, className, { objectId }, restOptions, clientSDK); return triggers.maybeRunQueryTrigger(triggers.Types.beforeFind, className, restWhere, restOptions, config, auth, true).then((result) => {
return query.execute(); restWhere = result.restWhere || restWhere;
restOptions = result.restOptions || restOptions;
const query = new RestQuery(config, auth, className, restWhere, restOptions, clientSDK);
return query.execute();
});
} }
// Returns a promise that doesn't resolve to any useful value. // Returns a promise that doesn't resolve to any useful value.

View File

@@ -155,13 +155,16 @@ export function getRequestObject(triggerType, auth, parseObject, originalParseOb
return request; return request;
} }
export function getRequestQueryObject(triggerType, auth, query, count, config) { export function getRequestQueryObject(triggerType, auth, query, count, config, isGet) {
isGet = !!isGet;
var request = { var request = {
triggerName: triggerType, triggerName: triggerType,
query, query,
master: false, master: false,
count, count,
log: config.loggerController log: config.loggerController,
isGet
}; };
if (!auth) { if (!auth) {
@@ -286,7 +289,7 @@ export function maybeRunAfterFindTrigger(triggerType, auth, className, objects,
}); });
} }
export function maybeRunQueryTrigger(triggerType, className, restWhere, restOptions, config, auth) { export function maybeRunQueryTrigger(triggerType, className, restWhere, restOptions, config, auth, isGet) {
const trigger = getTrigger(className, triggerType, config.applicationId); const trigger = getTrigger(className, triggerType, config.applicationId);
if (!trigger) { if (!trigger) {
return Promise.resolve({ return Promise.resolve({
@@ -312,7 +315,7 @@ export function maybeRunQueryTrigger(triggerType, className, restWhere, restOpti
} }
count = !!restOptions.count; count = !!restOptions.count;
} }
const requestObject = getRequestQueryObject(triggerType, auth, parseQuery, count, config); const requestObject = getRequestQueryObject(triggerType, auth, parseQuery, count, config, isGet);
return Promise.resolve().then(() => { return Promise.resolve().then(() => {
return trigger(requestObject); return trigger(requestObject);
}).then((result) => { }).then((result) => {