From fe60a999e5dee24ebbace7d5ed31c5934f2f8636 Mon Sep 17 00:00:00 2001 From: nodkz Date: Thu, 26 Jul 2018 16:15:51 +0600 Subject: [PATCH] feat(Resolver): make `addFilterArg` asynchronous ```js someResolver.addFilterArg({ name: 'isActive', type: 'Boolean!', description: 'Active status filter', query: async (query, value, resolveParams) => { const checkPermissions = await Promise.resolve('accessGranted'); if (checkPermissions) { query.isActive = value; } }, }); ``` Closes #31 --- src/Resolver.js | 4 ++-- src/__tests__/Resolver-test.js | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Resolver.js b/src/Resolver.js index d7674d86..67418ac2 100644 --- a/src/Resolver.js +++ b/src/Resolver.js @@ -448,13 +448,13 @@ export class Resolver { const resolveNext = resolver.getResolve(); const query = opts.query; if (query && isFunction(query)) { - resolver.setResolve(resolveParams => { + resolver.setResolve(async resolveParams => { const value = objectPath.get(resolveParams, ['args', 'filter', opts.name]); if (value !== null && value !== undefined) { if (!resolveParams.rawQuery) { resolveParams.rawQuery = {}; // eslint-disable-line } - query(resolveParams.rawQuery, value, resolveParams); + await query(resolveParams.rawQuery, value, resolveParams); } return resolveNext(resolveParams); }); diff --git a/src/__tests__/Resolver-test.js b/src/__tests__/Resolver-test.js index 69ae37e7..9ca50ac1 100644 --- a/src/__tests__/Resolver-test.js +++ b/src/__tests__/Resolver-test.js @@ -548,7 +548,7 @@ describe('Resolver', () => { expect(ageType.ofType).toBe(GraphQLInt); }); - it('should prepare resolveParams.rawQuery when `resolve` called', () => { + it('should prepare resolveParams.rawQuery when `resolve` called', async () => { let rpSnap; const resolve = resolver.resolve; resolver.resolve = rp => { @@ -571,13 +571,14 @@ describe('Resolver', () => { name: 'isActive', type: 'Boolean!', description: 'Active status filter', - query: (query, value, resolveParams) => { + query: async (query, value, resolveParams) => { + query.checkPermissions = await Promise.resolve('accessGranted'); // eslint-disable-line no-param-reassign query.isActive = value; // eslint-disable-line no-param-reassign }, filterTypeNameFallback: 'FilterOtherUniqueNameInput', }); - newResolver.resolve({ + await newResolver.resolve({ args: { filter: { age: 15, isActive: false } }, someKey: 16, }); @@ -586,6 +587,7 @@ describe('Resolver', () => { age: { $gt: 15 }, isActive: false, someKey: 16, + checkPermissions: 'accessGranted', }); });