import { GraphQLString , GraphQLInt , GraphQLFloat , GraphQLBoolean , GraphQLID , GraphQLNonNull , GraphQLList , GraphQLScalarType , } from 'graphql' ; import * as t from 'babel-types' ; import { createTypeAnnotationFromGraphQLTypeFunction } from '../helpers' ; const typeAnnotationFromGraphQLType = createTypeAnnotationFromGraphQLTypeFunction ( { passthroughCustomScalars : false , } ) ; describe ( 'Flow typeAnnotationFromGraphQLType' , ( ) => { test ( 'String' , ( ) => { expect ( typeAnnotationFromGraphQLType ( GraphQLString ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . stringTypeAnnotation ( ) ) ) ; } ) ; test ( 'Int' , ( ) => { expect ( typeAnnotationFromGraphQLType ( GraphQLInt ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . numberTypeAnnotation ( ) ) ) ; } ) ; test ( 'Float' , ( ) => { expect ( typeAnnotationFromGraphQLType ( GraphQLFloat ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . numberTypeAnnotation ( ) ) ) ; } ) ; test ( 'Boolean' , ( ) => { expect ( typeAnnotationFromGraphQLType ( GraphQLBoolean ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . booleanTypeAnnotation ( ) ) ) ; } ) ; test ( 'ID' , ( ) => { expect ( typeAnnotationFromGraphQLType ( GraphQLID ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . stringTypeAnnotation ( ) ) ) ; } ) ; test ( 'String!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( GraphQLString ) ) ) . toMatchObject ( t . stringTypeAnnotation ( ) ) ; } ) ; test ( 'Int!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( GraphQLInt ) ) ) . toMatchObject ( t . numberTypeAnnotation ( ) ) ; } ) ; test ( 'Float!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( GraphQLFloat ) ) ) . toMatchObject ( t . numberTypeAnnotation ( ) ) ; } ) ; test ( 'Boolean!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( GraphQLBoolean ) ) ) . toMatchObject ( t . booleanTypeAnnotation ( ) ) ; } ) ; test ( 'ID!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( GraphQLID ) ) ) . toMatchObject ( t . stringTypeAnnotation ( ) ) ; } ) ; test ( '[String]' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLList ( GraphQLString ) ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . stringTypeAnnotation ( ) ) ) ) ) ; } ) ; test ( '[Int]' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLList ( GraphQLInt ) ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . numberTypeAnnotation ( ) ) ) ) ) ; } ) ; test ( '[Float]' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLList ( GraphQLFloat ) ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . numberTypeAnnotation ( ) ) ) ) ) ; } ) ; test ( '[Boolean]' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLList ( GraphQLBoolean ) ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . booleanTypeAnnotation ( ) ) ) ) ) ; } ) ; test ( '[ID]' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLList ( GraphQLID ) ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . stringTypeAnnotation ( ) ) ) ) ) ; } ) ; test ( '[String]!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( new GraphQLList ( GraphQLString ) ) ) ) . toMatchObject ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . stringTypeAnnotation ( ) ) ) ) ; } ) ; test ( '[Int]!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( new GraphQLList ( GraphQLInt ) ) ) ) . toMatchObject ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . numberTypeAnnotation ( ) ) ) ) ; } ) ; test ( '[Float]!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( new GraphQLList ( GraphQLFloat ) ) ) ) . toMatchObject ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . numberTypeAnnotation ( ) ) ) ) ; } ) ; test ( '[Boolean]!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( new GraphQLList ( GraphQLBoolean ) ) ) ) . toMatchObject ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . booleanTypeAnnotation ( ) ) ) ) ; } ) ; test ( '[ID]!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( new GraphQLList ( GraphQLID ) ) ) ) . toMatchObject ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . stringTypeAnnotation ( ) ) ) ) ; } ) ; test ( '[String!]' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLList ( new GraphQLNonNull ( GraphQLString ) ) ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . stringTypeAnnotation ( ) ) ) ) ; } ) ; test ( '[Int!]' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLList ( new GraphQLNonNull ( GraphQLInt ) ) ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . numberTypeAnnotation ( ) ) ) ) ; } ) ; test ( '[Float!]' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLList ( new GraphQLNonNull ( GraphQLFloat ) ) ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . numberTypeAnnotation ( ) ) ) ) ; } ) ; test ( '[Boolean!]' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLList ( new GraphQLNonNull ( GraphQLBoolean ) ) ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . booleanTypeAnnotation ( ) ) ) ) ; } ) ; test ( '[ID!]' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLList ( new GraphQLNonNull ( GraphQLID ) ) ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . stringTypeAnnotation ( ) ) ) ) ; } ) ; test ( '[String!]!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( new GraphQLList ( new GraphQLNonNull ( GraphQLString ) ) ) ) ) . toMatchObject ( t . arrayTypeAnnotation ( t . stringTypeAnnotation ( ) ) ) ; } ) ; test ( '[Int!]!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( new GraphQLList ( new GraphQLNonNull ( GraphQLInt ) ) ) ) ) . toMatchObject ( t . arrayTypeAnnotation ( t . numberTypeAnnotation ( ) ) ) ; } ) ; test ( '[Float!]!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( new GraphQLList ( new GraphQLNonNull ( GraphQLFloat ) ) ) ) ) . toMatchObject ( t . arrayTypeAnnotation ( t . numberTypeAnnotation ( ) ) ) ; } ) ; test ( '[Boolean!]!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( new GraphQLList ( new GraphQLNonNull ( GraphQLBoolean ) ) ) ) ) . toMatchObject ( t . arrayTypeAnnotation ( t . booleanTypeAnnotation ( ) ) ) ; } ) ; test ( '[ID!]!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( new GraphQLList ( new GraphQLNonNull ( GraphQLID ) ) ) ) ) . toMatchObject ( t . arrayTypeAnnotation ( t . stringTypeAnnotation ( ) ) ) ; } ) ; test ( '[[String]]' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLList ( new GraphQLList ( GraphQLString ) ) ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . stringTypeAnnotation ( ) ) ) ) ) ) ) ; } ) ; test ( '[[String]]!' , ( ) => { expect ( typeAnnotationFromGraphQLType ( new GraphQLNonNull ( new GraphQLList ( new GraphQLList ( GraphQLString ) ) ) ) ) . toMatchObject ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . arrayTypeAnnotation ( t . nullableTypeAnnotation ( t . stringTypeAnnotation ( ) ) ) ) ) ) ; } ) ; test ( 'Custom Scalar' , ( ) => { const OddType = new GraphQLScalarType ( { name : 'Odd' , serialize ( value ) { return value % 2 === 1 ? value : null ; } , } ) ; expect ( typeAnnotationFromGraphQLType ( OddType ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . genericTypeAnnotation ( t . identifier ( 'Odd' ) ) ) ) ; } ) ; } ) ; describe ( 'passthrough custom scalars' , ( ) => { let getTypeAnnotation ; beforeAll ( ( ) => { getTypeAnnotation = createTypeAnnotationFromGraphQLTypeFunction ( { passthroughCustomScalars : true , } ) ; } ) ; test ( 'Custom Scalar' , ( ) => { const OddType = new GraphQLScalarType ( { name : 'Odd' , serialize ( value ) { return value % 2 === 1 ? value : null ; } , } ) ; expect ( getTypeAnnotation ( OddType ) ) . toMatchObject ( t . nullableTypeAnnotation ( t . anyTypeAnnotation ( ) ) ) ; } ) ; } ) ;