From 20699bb64e941af33882b12cf6d93e09f3a06de5 Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Sun, 31 Mar 2019 19:28:53 +0300 Subject: [PATCH] buildSchema/extendSchema: test standard scalars Background: https://github.com/graphql/graphql-js/commit/183ff32bee4bc23eb23657f79f414c2400ecb06a#r32971387 --- .../__tests__/buildASTSchema-test.js | 25 ++++++++++ src/utilities/__tests__/extendSchema-test.js | 46 +++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/src/utilities/__tests__/buildASTSchema-test.js b/src/utilities/__tests__/buildASTSchema-test.js index d9d4357892..f8df76bb0a 100644 --- a/src/utilities/__tests__/buildASTSchema-test.js +++ b/src/utilities/__tests__/buildASTSchema-test.js @@ -25,6 +25,11 @@ import { assertScalarType, graphqlSync, validateSchema, + GraphQLID, + GraphQLInt, + GraphQLFloat, + GraphQLString, + GraphQLBoolean, GraphQLSkipDirective, GraphQLIncludeDirective, GraphQLDeprecatedDirective, @@ -94,6 +99,26 @@ describe('Schema Builder', () => { } `; expect(cycleSDL(sdl)).to.equal(sdl); + + const schema = buildSchema(sdl); + // Built-ins are used + expect(schema.getType('Int')).to.equal(GraphQLInt); + expect(schema.getType('Float')).to.equal(GraphQLFloat); + expect(schema.getType('String')).to.equal(GraphQLString); + expect(schema.getType('Boolean')).to.equal(GraphQLBoolean); + expect(schema.getType('ID')).to.equal(GraphQLID); + }); + + it('include standard type only if it is used', () => { + const schema = buildSchema(` + type Query { + str: String + } + `); + + expect(schema.getType('Int')).to.equal(undefined); + expect(schema.getType('Float')).to.equal(undefined); + expect(schema.getType('ID')).to.equal(undefined); }); it('With directives', () => { diff --git a/src/utilities/__tests__/extendSchema-test.js b/src/utilities/__tests__/extendSchema-test.js index 11b2de8e7d..c66a14403b 100644 --- a/src/utilities/__tests__/extendSchema-test.js +++ b/src/utilities/__tests__/extendSchema-test.js @@ -11,6 +11,7 @@ import { describe, it } from 'mocha'; import { expect } from 'chai'; import dedent from '../../jsutils/dedent'; import invariant from '../../jsutils/invariant'; +import { buildSchema } from '../buildASTSchema'; import { extendSchema } from '../extendSchema'; import { parse, print, DirectiveLocation } from '../../language'; import { printSchema } from '../schemaPrinter'; @@ -30,7 +31,10 @@ import { GraphQLInterfaceType, GraphQLUnionType, GraphQLID, + GraphQLInt, + GraphQLFloat, GraphQLString, + GraphQLBoolean, GraphQLEnumType, GraphQLInputObjectType, GraphQLNonNull, @@ -266,6 +270,48 @@ describe('extendSchema', () => { expect(queryType.getFields().foo).to.include({ type: fooType }); }); + it('extends objects with standard type fields', () => { + const schema = buildSchema(` + type Query { + str: String + } + `); + + expect(schema.getType('Int')).to.equal(undefined); + expect(schema.getType('Float')).to.equal(undefined); + expect(schema.getType('String')).to.equal(GraphQLString); + expect(schema.getType('Boolean')).to.equal(GraphQLBoolean); + expect(schema.getType('ID')).to.equal(undefined); + + const extendAST = parse(` + extend type Query { + bool: Boolean + } + `); + const extendedSchema = extendSchema(schema, extendAST); + + expect(extendedSchema.getType('Int')).to.equal(undefined); + expect(extendedSchema.getType('Float')).to.equal(undefined); + expect(extendedSchema.getType('String')).to.equal(GraphQLString); + expect(extendedSchema.getType('Boolean')).to.equal(GraphQLBoolean); + expect(extendedSchema.getType('ID')).to.equal(undefined); + + const extendTwiceAST = parse(` + extend type Query { + int: Int + float: Float + id: ID + } + `); + const extendedTwiceSchema = extendSchema(schema, extendTwiceAST); + + expect(extendedTwiceSchema.getType('Int')).to.equal(GraphQLInt); + expect(extendedTwiceSchema.getType('Float')).to.equal(GraphQLFloat); + expect(extendedTwiceSchema.getType('String')).to.equal(GraphQLString); + expect(extendedTwiceSchema.getType('Boolean')).to.equal(GraphQLBoolean); + expect(extendedTwiceSchema.getType('ID')).to.equal(GraphQLID); + }); + it('extends enums by adding new values', () => { const extendedSchema = extendTestSchema(` extend enum SomeEnum {