beforeFind: Improve request.query object (#6237)

* beforeFind: Improve request.query object

Closes: https://github.com/parse-community/parse-server/issues/6164

* can modify exclude query
This commit is contained in:
Diamond Lewis
2019-11-23 11:38:13 -06:00
committed by GitHub
parent 7c7a8704c5
commit 2f05d819f3
2 changed files with 42 additions and 13 deletions

View File

@@ -878,7 +878,10 @@ describe('Cloud Code', () => {
url: 'https://some.url',
}),
array: ['a', 'b', 'c'],
arrayOfArray: [['a', 'b', 'c'], ['d', 'e', 'f']],
arrayOfArray: [
['a', 'b', 'c'],
['d', 'e', 'f'],
],
};
Parse.Cloud.run('params', params).then(() => {
done();
@@ -1763,8 +1766,15 @@ describe('beforeFind hooks', () => {
expect(jsonQuery.where.key).toEqual('value');
expect(jsonQuery.where.some).toEqual({ $gt: 10 });
expect(jsonQuery.include).toEqual('otherKey,otherValue');
expect(jsonQuery.excludeKeys).toBe('exclude');
expect(jsonQuery.limit).toEqual(100);
expect(jsonQuery.skip).toBe(undefined);
expect(jsonQuery.order).toBe('key');
expect(jsonQuery.keys).toBe('select');
expect(jsonQuery.readPreference).toBe('PRIMARY');
expect(jsonQuery.includeReadPreference).toBe('SECONDARY');
expect(jsonQuery.subqueryReadPreference).toBe('SECONDARY_PREFERRED');
expect(req.isGet).toEqual(false);
});
@@ -1773,6 +1783,10 @@ describe('beforeFind hooks', () => {
query.greaterThan('some', 10);
query.include('otherKey');
query.include('otherValue');
query.ascending('key');
query.select('select');
query.exclude('exclude');
query.readPreference('PRIMARY', 'SECONDARY', 'SECONDARY_PREFERRED');
query.find().then(() => {
done();
});
@@ -1824,6 +1838,25 @@ describe('beforeFind hooks', () => {
});
});
it('should use the modified exclude query', async () => {
Parse.Cloud.beforeFind('MyObject', req => {
const q = req.query;
q.exclude('number');
});
const obj = new Parse.Object('MyObject');
obj.set('number', 100);
obj.set('string', 'hello');
await obj.save();
const query = new Parse.Query('MyObject');
query.equalTo('objectId', obj.id);
const results = await query.find();
expect(results.length).toBe(1);
expect(results[0].get('number')).toBeUndefined();
expect(results[0].get('string')).toBe('hello');
});
it('should reject queries', done => {
Parse.Cloud.beforeFind('MyObject', () => {
return Promise.reject('Do not run that query');

View File

@@ -451,22 +451,14 @@ export function maybeRunQueryTrigger(
restOptions,
});
}
const json = Object.assign({}, restOptions);
json.where = restWhere;
const parseQuery = new Parse.Query(className);
if (restWhere) {
parseQuery._where = restWhere;
}
parseQuery.withJSON(json);
let count = false;
if (restOptions) {
if (restOptions.include && restOptions.include.length > 0) {
parseQuery._include = restOptions.include.split(',');
}
if (restOptions.skip) {
parseQuery._skip = restOptions.skip;
}
if (restOptions.limit) {
parseQuery._limit = restOptions.limit;
}
count = !!restOptions.count;
}
const requestObject = getRequestQueryObject(
@@ -503,6 +495,10 @@ export function maybeRunQueryTrigger(
restOptions = restOptions || {};
restOptions.include = jsonQuery.include;
}
if (jsonQuery.excludeKeys) {
restOptions = restOptions || {};
restOptions.excludeKeys = jsonQuery.excludeKeys;
}
if (jsonQuery.keys) {
restOptions = restOptions || {};
restOptions.keys = jsonQuery.keys;