Fix beforeQuery trigger when getting objects through GET API (#3862)
This commit is contained in:
committed by
Florent Vilmart
parent
a0d1a3517f
commit
422723fa31
@@ -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', () => {
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user