spec/graphql/schema/printer_spec.rb in graphql-1.8.11 vs spec/graphql/schema/printer_spec.rb in graphql-1.8.12

- old
+ new

@@ -138,164 +138,238 @@ expected = <<SCHEMA schema { query: Root } -# Marks an element of a GraphQL schema as no longer supported. +""" +Marks an element of a GraphQL schema as no longer supported. +""" directive @deprecated( - # Explains why this element was deprecated, usually also including a suggestion - # for how to access supported similar data. Formatted in - # [Markdown](https://daringfireball.net/projects/markdown/). + """ + Explains why this element was deprecated, usually also including a suggestion + for how to access supported similar data. Formatted in + [Markdown](https://daringfireball.net/projects/markdown/). + """ reason: String = "No longer supported" ) on FIELD_DEFINITION | ENUM_VALUE -# Directs the executor to include this field or fragment only when the `if` argument is true. +""" +Directs the executor to include this field or fragment only when the `if` argument is true. +""" directive @include( - # Included when true. + """ + Included when true. + """ if: Boolean! ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT -# Directs the executor to skip this field or fragment when the `if` argument is true. +""" +Directs the executor to skip this field or fragment when the `if` argument is true. +""" directive @skip( - # Skipped when true. + """ + Skipped when true. + """ if: Boolean! ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT -# A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document. -# -# In some cases, you need to provide options to alter GraphQL's execution behavior -# in ways field arguments will not suffice, such as conditionally including or -# skipping a field. Directives provide this by describing additional information -# to the executor. +""" +A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document. + +In some cases, you need to provide options to alter GraphQL's execution behavior +in ways field arguments will not suffice, such as conditionally including or +skipping a field. Directives provide this by describing additional information +to the executor. +""" type __Directive { args: [__InputValue!]! description: String locations: [__DirectiveLocation!]! name: String! onField: Boolean! @deprecated(reason: "Use `locations`.") onFragment: Boolean! @deprecated(reason: "Use `locations`.") onOperation: Boolean! @deprecated(reason: "Use `locations`.") } -# A Directive can be adjacent to many parts of the GraphQL language, a -# __DirectiveLocation describes one such possible adjacencies. +""" +A Directive can be adjacent to many parts of the GraphQL language, a +__DirectiveLocation describes one such possible adjacencies. +""" enum __DirectiveLocation { - # Location adjacent to an argument definition. + """ + Location adjacent to an argument definition. + """ ARGUMENT_DEFINITION - # Location adjacent to an enum definition. + """ + Location adjacent to an enum definition. + """ ENUM - # Location adjacent to an enum value definition. + """ + Location adjacent to an enum value definition. + """ ENUM_VALUE - # Location adjacent to a field. + """ + Location adjacent to a field. + """ FIELD - # Location adjacent to a field definition. + """ + Location adjacent to a field definition. + """ FIELD_DEFINITION - # Location adjacent to a fragment definition. + """ + Location adjacent to a fragment definition. + """ FRAGMENT_DEFINITION - # Location adjacent to a fragment spread. + """ + Location adjacent to a fragment spread. + """ FRAGMENT_SPREAD - # Location adjacent to an inline fragment. + """ + Location adjacent to an inline fragment. + """ INLINE_FRAGMENT - # Location adjacent to an input object field definition. + """ + Location adjacent to an input object field definition. + """ INPUT_FIELD_DEFINITION - # Location adjacent to an input object type definition. + """ + Location adjacent to an input object type definition. + """ INPUT_OBJECT - # Location adjacent to an interface definition. + """ + Location adjacent to an interface definition. + """ INTERFACE - # Location adjacent to a mutation operation. + """ + Location adjacent to a mutation operation. + """ MUTATION - # Location adjacent to an object type definition. + """ + Location adjacent to an object type definition. + """ OBJECT - # Location adjacent to a query operation. + """ + Location adjacent to a query operation. + """ QUERY - # Location adjacent to a scalar definition. + """ + Location adjacent to a scalar definition. + """ SCALAR - # Location adjacent to a schema definition. + """ + Location adjacent to a schema definition. + """ SCHEMA - # Location adjacent to a subscription operation. + """ + Location adjacent to a subscription operation. + """ SUBSCRIPTION - # Location adjacent to a union definition. + """ + Location adjacent to a union definition. + """ UNION } -# One possible value for a given Enum. Enum values are unique values, not a -# placeholder for a string or numeric value. However an Enum value is returned in -# a JSON response as a string. +""" +One possible value for a given Enum. Enum values are unique values, not a +placeholder for a string or numeric value. However an Enum value is returned in +a JSON response as a string. +""" type __EnumValue { deprecationReason: String description: String isDeprecated: Boolean! name: String! } -# Object and Interface types are described by a list of Fields, each of which has -# a name, potentially a list of arguments, and a return type. +""" +Object and Interface types are described by a list of Fields, each of which has +a name, potentially a list of arguments, and a return type. +""" type __Field { args: [__InputValue!]! deprecationReason: String description: String isDeprecated: Boolean! name: String! type: __Type! } -# Arguments provided to Fields or Directives and the input fields of an -# InputObject are represented as Input Values which describe their type and -# optionally a default value. +""" +Arguments provided to Fields or Directives and the input fields of an +InputObject are represented as Input Values which describe their type and +optionally a default value. +""" type __InputValue { - # A GraphQL-formatted string representing the default value for this input value. + """ + A GraphQL-formatted string representing the default value for this input value. + """ defaultValue: String description: String name: String! type: __Type! } -# A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all -# available types and directives on the server, as well as the entry points for -# query, mutation, and subscription operations. +""" +A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all +available types and directives on the server, as well as the entry points for +query, mutation, and subscription operations. +""" type __Schema { - # A list of all directives supported by this server. + """ + A list of all directives supported by this server. + """ directives: [__Directive!]! - # If this server supports mutation, the type that mutation operations will be rooted at. + """ + If this server supports mutation, the type that mutation operations will be rooted at. + """ mutationType: __Type - # The type that query operations will be rooted at. + """ + The type that query operations will be rooted at. + """ queryType: __Type! - # If this server support subscription, the type that subscription operations will be rooted at. + """ + If this server support subscription, the type that subscription operations will be rooted at. + """ subscriptionType: __Type - # A list of all types supported by this server. + """ + A list of all types supported by this server. + """ types: [__Type!]! } -# The fundamental unit of any GraphQL Schema is the type. There are many kinds of -# types in GraphQL as represented by the `__TypeKind` enum. -# -# Depending on the kind of a type, certain fields describe information about that -# type. Scalar types provide no information beyond a name and description, while -# Enum types provide their values. Object and Interface types provide the fields -# they describe. Abstract types, Union and Interface, provide the Object types -# possible at runtime. List and NonNull types compose other types. +""" +The fundamental unit of any GraphQL Schema is the type. There are many kinds of +types in GraphQL as represented by the `__TypeKind` enum. + +Depending on the kind of a type, certain fields describe information about that +type. Scalar types provide no information beyond a name and description, while +Enum types provide their values. Object and Interface types provide the fields +they describe. Abstract types, Union and Interface, provide the Object types +possible at runtime. List and NonNull types compose other types. +""" type __Type { description: String enumValues(includeDeprecated: Boolean = false): [__EnumValue!] fields(includeDeprecated: Boolean = false): [__Field!] inputFields: [__InputValue!] @@ -304,34 +378,52 @@ name: String ofType: __Type possibleTypes: [__Type!] } -# An enum describing what kind of type a given `__Type` is. +""" +An enum describing what kind of type a given `__Type` is. +""" enum __TypeKind { - # Indicates this type is an enum. `enumValues` is a valid field. + """ + Indicates this type is an enum. `enumValues` is a valid field. + """ ENUM - # Indicates this type is an input object. `inputFields` is a valid field. + """ + Indicates this type is an input object. `inputFields` is a valid field. + """ INPUT_OBJECT - # Indicates this type is an interface. `fields` and `possibleTypes` are valid fields. + """ + Indicates this type is an interface. `fields` and `possibleTypes` are valid fields. + """ INTERFACE - # Indicates this type is a list. `ofType` is a valid field. + """ + Indicates this type is a list. `ofType` is a valid field. + """ LIST - # Indicates this type is a non-null. `ofType` is a valid field. + """ + Indicates this type is a non-null. `ofType` is a valid field. + """ NON_NULL - # Indicates this type is an object. `fields` and `interfaces` are valid fields. + """ + Indicates this type is an object. `fields` and `interfaces` are valid fields. + """ OBJECT - # Indicates this type is a scalar. + """ + Indicates this type is a scalar. + """ SCALAR - # Indicates this type is a union. `possibleTypes` is a valid field. + """ + Indicates this type is a union. `possibleTypes` is a valid field. + """ UNION } SCHEMA assert_equal expected.chomp, GraphQL::Schema::Printer.print_introspection_schema end @@ -395,27 +487,37 @@ BAZ @deprecated(reason: "Use \\\"BAR\\\" instead.\\n\\nIt's the replacement for this value.\\n") FOO WOZ @deprecated } -# A blog comment +""" +A blog comment +""" type Comment implements Node { id: ID! } -# Autogenerated input type of CreatePost +""" +Autogenerated input type of CreatePost +""" input CreatePostInput { body: String! - # A unique identifier for the client performing the mutation. + """ + A unique identifier for the client performing the mutation. + """ clientMutationId: String title: String! } -# Autogenerated return type of CreatePost +""" +Autogenerated return type of CreatePost +""" type CreatePostPayload { - # A unique identifier for the client performing the mutation. + """ + A unique identifier for the client performing the mutation. + """ clientMutationId: String post: Post } type Image { @@ -423,47 +525,63 @@ id: ID! name: String! width: Int! } -# Media objects +""" +Media objects +""" union Media = Audio | Image type Mutation { - # Create a blog post + """ + Create a blog post + """ createPost(input: CreatePostInput!): CreatePostPayload } interface Node { id: ID! } -# A blog post +""" +A blog post +""" type Post { body: String! comments: [Comment!] comments_count: Int! @deprecated(reason: "Use \\\"comments\\\".") id: ID! title: String! } -# The query root of this schema +""" +The query root of this schema +""" type Query { post( - # Post ID + """ + Post ID + """ id: ID! varied: Varied = {id: "123", int: 234, float: 2.3, enum: FOO, sub: [{string: "str"}]} variedWithNulls: Varied = {id: null, int: null, float: null, enum: null, sub: null} ): Post } -# Test +""" +Test +""" input Sub { - # Something + """ + Something + """ int: Int - # Something + """ + Something + """ string: String } type Subscription { post(id: ID!): Post @@ -551,55 +669,75 @@ enum Choice { BAR FOO } -# A blog comment +""" +A blog comment +""" type Comment implements Node { id: ID! } -# Autogenerated input type of CreatePost +""" +Autogenerated input type of CreatePost +""" input CreatePostInput { body: String! - # A unique identifier for the client performing the mutation. + """ + A unique identifier for the client performing the mutation. + """ clientMutationId: String title: String! } -# Autogenerated return type of CreatePost +""" +Autogenerated return type of CreatePost +""" type CreatePostPayload { - # A unique identifier for the client performing the mutation. + """ + A unique identifier for the client performing the mutation. + """ clientMutationId: String post: Post } -# Media objects +""" +Media objects +""" union Media = Audio type Mutation { - # Create a blog post + """ + Create a blog post + """ createPost(input: CreatePostInput!): CreatePostPayload } interface Node { id: ID! } -# A blog post +""" +A blog post +""" type Post { body: String! comments: [Comment!] id: ID! title: String! } -# The query root of this schema +""" +The query root of this schema +""" type Query { post( - # Post ID + """ + Post ID + """ id: ID! ): Post } type Subscription { @@ -616,11 +754,13 @@ end describe "#print_type" do it "returns the type schema as a string" do expected = <<SCHEMA -# A blog post +""" +A blog post +""" type Post { body: String! comments: [Comment!] comments_count: Int! @deprecated(reason: "Use \\\"comments\\\".") id: ID! @@ -630,16 +770,22 @@ assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema).print_type(schema.types['Post']) end it "can print non-object types" do expected = <<SCHEMA -# Test +""" +Test +""" input Sub { - # Something + """ + Something + """ int: Int - # Something + """ + Something + """ string: String } SCHEMA assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema).print_type(schema.types['Sub']) end @@ -667,10 +813,12 @@ schema = GraphQL::Schema.define do query query_root end expected = <<SCHEMA -# The query root of this schema +""" +The query root of this schema +""" type Query { example(input: SomeType = "Howdy"): SomeType } SCHEMA