Pass request.query to afterFind (#6960)

* Initial Commit

* Update triggers.js
This commit is contained in:
dblythy
2020-10-22 13:40:40 +11:00
committed by GitHub
parent 78b59fb26b
commit c68d05512f
3 changed files with 61 additions and 20 deletions

View File

@@ -2018,6 +2018,37 @@ describe('beforeFind hooks', () => {
}); });
describe('afterFind hooks', () => { describe('afterFind hooks', () => {
it('should add afterFind trigger', done => {
Parse.Cloud.afterFind('MyObject', req => {
const q = req.query;
expect(q instanceof Parse.Query).toBe(true);
const jsonQuery = q.toJSON();
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');
});
const query = new Parse.Query('MyObject');
query.equalTo('key', 'value');
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();
});
});
it('should add afterFind trigger using get', done => { it('should add afterFind trigger using get', done => {
Parse.Cloud.afterFind('MyObject', req => { Parse.Cloud.afterFind('MyObject', req => {
for (let i = 0; i < req.objects.length; i++) { for (let i = 0; i < req.objects.length; i++) {

View File

@@ -794,6 +794,11 @@ RestQuery.prototype.runAfterFindTrigger = function() {
if (this.findOptions.pipeline || this.findOptions.distinct) { if (this.findOptions.pipeline || this.findOptions.distinct) {
return Promise.resolve(); return Promise.resolve();
} }
const json = Object.assign({}, this.restOptions);
json.where = this.restWhere;
const parseQuery = new Parse.Query(this.className);
parseQuery.withJSON(json);
// Run afterFind trigger and set the new results // Run afterFind trigger and set the new results
return triggers return triggers
.maybeRunAfterFindTrigger( .maybeRunAfterFindTrigger(
@@ -801,7 +806,8 @@ RestQuery.prototype.runAfterFindTrigger = function() {
this.auth, this.auth,
this.className, this.className,
this.response.results, this.response.results,
this.config this.config,
parseQuery
) )
.then(results => { .then(results => {
// Ensure we properly set the className back // Ensure we properly set the className back

View File

@@ -416,7 +416,8 @@ export function maybeRunAfterFindTrigger(
auth, auth,
className, className,
objects, objects,
config config,
query
) { ) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const trigger = getTrigger(className, triggerType, config.applicationId); const trigger = getTrigger(className, triggerType, config.applicationId);
@@ -424,6 +425,9 @@ export function maybeRunAfterFindTrigger(
return resolve(); return resolve();
} }
const request = getRequestObject(triggerType, auth, null, null, config); const request = getRequestObject(triggerType, auth, null, null, config);
if (query) {
request.query = query;
}
const { success, error } = getResponseObject( const { success, error } = getResponseObject(
request, request,
object => { object => {