spec/graphql/language/generation_spec.rb in graphql-1.8.0.pre2 vs spec/graphql/language/generation_spec.rb in graphql-1.8.0.pre3
- old
+ new
@@ -1,201 +1,36 @@
# frozen_string_literal: true
require "spec_helper"
describe GraphQL::Language::Generation do
- let(:document) { GraphQL::Language::Parser.parse(query_string) }
- let(:query_string) {%|
- query getStuff($someVar: Int = 1, $anotherVar: [String!], $skipNested: Boolean! = false) @skip(if: false) {
- myField: someField(someArg: $someVar, ok: 1.4) @skip(if: $anotherVar) @thing(or: "Whatever")
- anotherField(someArg: [1, 2, 3]) {
- nestedField
- ...moreNestedFields @skip(if: $skipNested)
- }
- ... on OtherType @include(unless: false) {
- field(arg: [{key: "value", anotherKey: 0.9, anotherAnotherKey: WHATEVER}])
- anotherField
- }
- ... {
- id
- }
+ describe "#to_query_tring" do
+ let(:document) {
+ GraphQL.parse('type Query { a: String! }')
}
- fragment moreNestedFields on NestedType @or(something: "ok") {
- anotherNestedField
- }
- |}
-
- describe ".generate" do
- it "generates query string" do
- assert_equal query_string.gsub(/^ /, "").strip, document.to_query_string
+ class CustomPrinter < GraphQL::Language::Printer
+ def print_field_definition(print_field_definition)
+ "<Field Hidden>"
+ end
end
- describe "inputs" do
- let(:query_string) {%|
- query {
- field(null_value: null, null_in_array: [1, null, 3], int: 3, float: 4.7e-24, bool: false, string: "☀︎🏆\\n escaped \\" unicode ¶ /", enum: ENUM_NAME, array: [7, 8, 9], object: {a: [1, 2, 3], b: {c: "4"}}, unicode_bom: "\xef\xbb\xbfquery")
- }
- |}
+ it "accepts a custom printer" do
+ expected = <<-SCHEMA
+type Query {
+ a: String!
+}
+ SCHEMA
- it "generate" do
- assert_equal query_string.gsub(/^ /, "").strip, document.to_query_string
- end
+ assert_equal expected.chomp, GraphQL::Language::Generation.generate(document)
end
- describe "schema" do
- describe "schema with convention names for root types" do
- let(:query_string) {<<-schema
- schema {
- query: Query
- mutation: Mutation
- subscription: Subscription
- }
- schema
- }
+ it "accepts a custom printer" do
+ expected = <<-SCHEMA
+type Query {
+ <Field Hidden>
+}
+ SCHEMA
- it 'omits schema definition' do
- refute document.to_query_string =~ /schema/
- end
- end
-
- describe "schema with custom query root name" do
- let(:query_string) {<<-schema
- schema {
- query: MyQuery
- mutation: Mutation
- subscription: Subscription
- }
- schema
- }
-
- it 'includes schema definition' do
- assert_equal query_string.gsub(/^ /, "").strip, document.to_query_string
- end
- end
-
- describe "schema with custom mutation root name" do
- let(:query_string) {<<-schema
- schema {
- query: Query
- mutation: MyMutation
- subscription: Subscription
- }
- schema
- }
-
- it 'includes schema definition' do
- assert_equal query_string.gsub(/^ /, "").strip, document.to_query_string
- end
- end
-
- describe "schema with custom subscription root name" do
- let(:query_string) {<<-schema
- schema {
- query: Query
- mutation: Mutation
- subscription: MySubscription
- }
- schema
- }
-
- it 'includes schema definition' do
- assert_equal query_string.gsub(/^ /, "").strip, document.to_query_string
- end
- end
-
- describe "full featured schema" do
- # From: https://github.com/graphql/graphql-js/blob/bc96406ab44453a120da25a0bd6e2b0237119ddf/src/language/__tests__/schema-kitchen-sink.graphql
- let(:query_string) {<<-schema
- schema {
- query: QueryType
- mutation: MutationType
- }
-
- # Union description
- union AnnotatedUnion @onUnion = A | B
-
- type Foo implements Bar {
- one: Type
- two(argument: InputType!): Type
- three(argument: InputType, other: String): Int
- four(argument: String = "string"): String
- five(argument: [String] = ["string", "string"]): String
- six(argument: InputType = {key: "value"}): Type
- seven(argument: String = null): Type
- }
-
- # Scalar description
- scalar CustomScalar
-
- type AnnotatedObject @onObject(arg: "value") {
- annotatedField(arg: Type = "default" @onArg): Type @onField
- }
-
- interface Bar {
- one: Type
- four(argument: String = "string"): String
- }
-
- # Enum description
- enum Site {
- # Enum value description
- DESKTOP
- MOBILE
- }
-
- interface AnnotatedInterface @onInterface {
- annotatedField(arg: Type @onArg): Type @onField
- }
-
- union Feed = Story | Article | Advert
-
- # Input description
- input InputType {
- key: String!
- answer: Int = 42
- }
-
- union AnnotatedUnion @onUnion = A | B
-
- scalar CustomScalar
-
- # Directive description
- directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
-
- scalar AnnotatedScalar @onScalar
-
- enum Site {
- DESKTOP
- MOBILE
- }
-
- enum AnnotatedEnum @onEnum {
- ANNOTATED_VALUE @onEnumValue
- OTHER_VALUE
- }
-
- input InputType {
- key: String!
- answer: Int = 42
- }
-
- input AnnotatedInput @onInputObjectType {
- annotatedField: Type @onField
- }
-
- directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
-
- directive @include(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
- schema
- }
-
- it "generate" do
- assert_equal query_string.gsub(/^ /, "").strip, document.to_query_string
- end
-
- it "doesn't mutate the document" do
- assert_equal document.to_query_string, document.to_query_string
- end
- end
+ assert_equal expected.chomp, GraphQL::Language::Generation.generate(document, printer: CustomPrinter.new)
end
end
end