From a666aedeeec3ddd0a5125b7024e28d2e7190fd2c Mon Sep 17 00:00:00 2001 From: yaacovCR Date: Mon, 26 Aug 2019 02:29:11 -0400 Subject: [PATCH] fix(transforms): support custom scalar input variables on root fields when transforming. Fixes #18. --- src/stitching/resolvers.ts | 2 +- src/test/testTransforms.ts | 66 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/src/stitching/resolvers.ts b/src/stitching/resolvers.ts index 784387fb33b..3363ca6d30c 100644 --- a/src/stitching/resolvers.ts +++ b/src/stitching/resolvers.ts @@ -111,7 +111,7 @@ function createProxyingResolver( schema: schema as GraphQLSchema, operation, fieldName, - args: {}, + args, context, info, transforms, diff --git a/src/test/testTransforms.ts b/src/test/testTransforms.ts index 8378959c996..0dba395c698 100644 --- a/src/test/testTransforms.ts +++ b/src/test/testTransforms.ts @@ -4,6 +4,7 @@ import { expect } from 'chai'; import { GraphQLSchema, GraphQLNamedType, + GraphQLScalarType, graphql, Kind, SelectionSetNode, @@ -28,6 +29,71 @@ import { } from '../transforms'; describe('transforms', () => { + describe('base transform function', () => { + let schema: GraphQLSchema; + let scalarTest = ` + scalar TestScalar + type TestingScalar { + value: TestScalar + } + + type Query { + testingScalar(input: TestScalar): TestingScalar + } + `; + + let scalarSchema: GraphQLSchema; + + scalarSchema = makeExecutableSchema({ + typeDefs: scalarTest, + resolvers: { + TestScalar: new GraphQLScalarType({ + name: 'TestScalar', + description: undefined, + serialize: value => (value as string).slice(1), + parseValue: value => `_${value}`, + parseLiteral: (ast: any) => `_${ast.value}`, + }), + Query: { + testingScalar(parent, args) { + return { + value: args.input[0] === '_' ? args.input : null + }; + }, + }, + }, + }); + + before(() => { + schema = transformSchema(scalarSchema, []); + }); + it('should work', async () => { + const result = await graphql( + schema, + ` + query($input: TestScalar) { + testingScalar(input: $input) { + value + } + } + `, + {}, + {}, + { + input: 'test', + }, + ); + + expect(result).to.deep.equal({ + data: { + testingScalar: { + value: 'test', + }, + }, + }); + }); + }); + describe('rename type', () => { let schema: GraphQLSchema; before(() => {