graphql 1.7.14 → 1.8.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. checksums.yaml +5 -5
  2. data/lib/generators/graphql/function_generator.rb +1 -1
  3. data/lib/generators/graphql/loader_generator.rb +1 -1
  4. data/lib/generators/graphql/mutation_generator.rb +1 -6
  5. data/lib/generators/graphql/templates/function.erb +2 -2
  6. data/lib/generators/graphql/templates/loader.erb +2 -2
  7. data/lib/graphql.rb +2 -0
  8. data/lib/graphql/argument.rb +0 -1
  9. data/lib/graphql/backwards_compatibility.rb +2 -3
  10. data/lib/graphql/base_type.rb +18 -16
  11. data/lib/graphql/compatibility/query_parser_specification.rb +0 -117
  12. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -14
  13. data/lib/graphql/define/assign_object_field.rb +5 -12
  14. data/lib/graphql/deprecated_dsl.rb +28 -0
  15. data/lib/graphql/directive.rb +0 -1
  16. data/lib/graphql/enum_type.rb +1 -3
  17. data/lib/graphql/execution.rb +0 -1
  18. data/lib/graphql/execution/multiplex.rb +29 -12
  19. data/lib/graphql/field.rb +5 -20
  20. data/lib/graphql/function.rb +12 -0
  21. data/lib/graphql/input_object_type.rb +1 -3
  22. data/lib/graphql/internal_representation/node.rb +14 -26
  23. data/lib/graphql/internal_representation/visit.rb +6 -3
  24. data/lib/graphql/introspection/arguments_field.rb +0 -1
  25. data/lib/graphql/introspection/enum_values_field.rb +0 -1
  26. data/lib/graphql/introspection/fields_field.rb +0 -1
  27. data/lib/graphql/introspection/input_fields_field.rb +0 -1
  28. data/lib/graphql/introspection/interfaces_field.rb +0 -1
  29. data/lib/graphql/introspection/of_type_field.rb +0 -1
  30. data/lib/graphql/introspection/possible_types_field.rb +0 -1
  31. data/lib/graphql/introspection/schema_field.rb +0 -1
  32. data/lib/graphql/introspection/type_by_name_field.rb +0 -1
  33. data/lib/graphql/introspection/typename_field.rb +0 -1
  34. data/lib/graphql/language.rb +0 -3
  35. data/lib/graphql/language/generation.rb +182 -3
  36. data/lib/graphql/language/lexer.rb +69 -144
  37. data/lib/graphql/language/lexer.rl +4 -15
  38. data/lib/graphql/language/nodes.rb +76 -136
  39. data/lib/graphql/language/parser.rb +621 -668
  40. data/lib/graphql/language/parser.y +11 -17
  41. data/lib/graphql/language/token.rb +3 -10
  42. data/lib/graphql/object_type.rb +6 -1
  43. data/lib/graphql/query.rb +13 -8
  44. data/lib/graphql/query/arguments.rb +33 -48
  45. data/lib/graphql/query/context.rb +1 -0
  46. data/lib/graphql/query/literal_input.rb +1 -4
  47. data/lib/graphql/relay/connection_resolve.rb +3 -0
  48. data/lib/graphql/relay/global_id_resolve.rb +5 -1
  49. data/lib/graphql/relay/relation_connection.rb +19 -14
  50. data/lib/graphql/schema.rb +219 -12
  51. data/lib/graphql/schema/argument.rb +33 -0
  52. data/lib/graphql/schema/build_from_definition.rb +18 -64
  53. data/lib/graphql/schema/enum.rb +76 -0
  54. data/lib/graphql/schema/field.rb +127 -0
  55. data/lib/graphql/schema/field/dynamic_resolve.rb +63 -0
  56. data/lib/graphql/schema/field/unwrapped_resolve.rb +20 -0
  57. data/lib/graphql/schema/input_object.rb +61 -0
  58. data/lib/graphql/schema/interface.rb +32 -0
  59. data/lib/graphql/schema/loader.rb +2 -2
  60. data/lib/graphql/schema/member.rb +97 -0
  61. data/lib/graphql/schema/member/build_type.rb +106 -0
  62. data/lib/graphql/schema/member/has_fields.rb +56 -0
  63. data/lib/graphql/schema/member/instrumentation.rb +113 -0
  64. data/lib/graphql/schema/member/list_type_proxy.rb +21 -0
  65. data/lib/graphql/schema/member/non_null_type_proxy.rb +21 -0
  66. data/lib/graphql/schema/object.rb +65 -0
  67. data/lib/graphql/schema/printer.rb +266 -33
  68. data/lib/graphql/schema/scalar.rb +25 -0
  69. data/lib/graphql/schema/traversal.rb +26 -17
  70. data/lib/graphql/schema/union.rb +48 -0
  71. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +1 -5
  72. data/lib/graphql/static_validation/rules/fields_will_merge.rb +8 -15
  73. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +1 -11
  74. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +5 -7
  75. data/lib/graphql/tracing.rb +0 -1
  76. data/lib/graphql/tracing/platform_tracing.rb +7 -20
  77. data/lib/graphql/tracing/scout_tracing.rb +2 -2
  78. data/lib/graphql/unresolved_type_error.rb +2 -3
  79. data/lib/graphql/version.rb +1 -1
  80. data/readme.md +1 -1
  81. data/spec/dummy/app/channels/graphql_channel.rb +1 -22
  82. data/spec/dummy/log/development.log +0 -239
  83. data/spec/dummy/log/test.log +0 -204
  84. data/spec/dummy/test/system/action_cable_subscription_test.rb +0 -4
  85. data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
  86. data/spec/generators/graphql/function_generator_spec.rb +0 -26
  87. data/spec/generators/graphql/loader_generator_spec.rb +0 -24
  88. data/spec/graphql/analysis/max_query_complexity_spec.rb +3 -3
  89. data/spec/graphql/analysis/max_query_depth_spec.rb +3 -3
  90. data/spec/graphql/backtrace_spec.rb +0 -10
  91. data/spec/graphql/base_type_spec.rb +5 -19
  92. data/spec/graphql/boolean_type_spec.rb +3 -3
  93. data/spec/graphql/directive_spec.rb +1 -3
  94. data/spec/graphql/enum_type_spec.rb +5 -18
  95. data/spec/graphql/execution/execute_spec.rb +1 -1
  96. data/spec/graphql/execution/multiplex_spec.rb +2 -2
  97. data/spec/graphql/float_type_spec.rb +2 -2
  98. data/spec/graphql/id_type_spec.rb +1 -1
  99. data/spec/graphql/input_object_type_spec.rb +2 -15
  100. data/spec/graphql/int_type_spec.rb +2 -2
  101. data/spec/graphql/internal_representation/rewrite_spec.rb +2 -2
  102. data/spec/graphql/introspection/schema_type_spec.rb +0 -1
  103. data/spec/graphql/language/generation_spec.rb +186 -21
  104. data/spec/graphql/language/lexer_spec.rb +1 -21
  105. data/spec/graphql/language/nodes_spec.rb +12 -21
  106. data/spec/graphql/language/parser_spec.rb +1 -1
  107. data/spec/graphql/query/arguments_spec.rb +15 -37
  108. data/spec/graphql/query/serial_execution/value_resolution_spec.rb +2 -2
  109. data/spec/graphql/query/variables_spec.rb +1 -1
  110. data/spec/graphql/query_spec.rb +5 -31
  111. data/spec/graphql/rake_task_spec.rb +1 -3
  112. data/spec/graphql/relay/base_connection_spec.rb +1 -1
  113. data/spec/graphql/relay/connection_instrumentation_spec.rb +2 -2
  114. data/spec/graphql/relay/connection_resolve_spec.rb +1 -1
  115. data/spec/graphql/relay/connection_type_spec.rb +1 -1
  116. data/spec/graphql/relay/mutation_spec.rb +3 -3
  117. data/spec/graphql/relay/relation_connection_spec.rb +1 -65
  118. data/spec/graphql/schema/build_from_definition_spec.rb +4 -86
  119. data/spec/graphql/schema/enum_spec.rb +60 -0
  120. data/spec/graphql/schema/field_spec.rb +14 -0
  121. data/spec/graphql/schema/input_object_spec.rb +43 -0
  122. data/spec/graphql/schema/interface_spec.rb +98 -0
  123. data/spec/graphql/schema/object_spec.rb +119 -0
  124. data/spec/graphql/schema/printer_spec.rb +15 -92
  125. data/spec/graphql/schema/scalar_spec.rb +40 -0
  126. data/spec/graphql/schema/union_spec.rb +35 -0
  127. data/spec/graphql/schema/validation_spec.rb +1 -1
  128. data/spec/graphql/schema/warden_spec.rb +11 -11
  129. data/spec/graphql/schema_spec.rb +25 -23
  130. data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +2 -10
  131. data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +2 -2
  132. data/spec/graphql/string_type_spec.rb +3 -3
  133. data/spec/graphql/subscriptions_spec.rb +1 -1
  134. data/spec/graphql/tracing/platform_tracing_spec.rb +1 -60
  135. data/spec/support/dummy/schema.rb +25 -39
  136. data/spec/support/jazz.rb +334 -0
  137. data/spec/support/lazy_helpers.rb +21 -23
  138. data/spec/support/star_wars/data.rb +7 -6
  139. data/spec/support/star_wars/schema.rb +109 -142
  140. metadata +39 -33
  141. data/lib/graphql/execution/instrumentation.rb +0 -82
  142. data/lib/graphql/language/block_string.rb +0 -47
  143. data/lib/graphql/language/document_from_schema_definition.rb +0 -277
  144. data/lib/graphql/language/printer.rb +0 -351
  145. data/lib/graphql/tracing/data_dog_tracing.rb +0 -49
  146. data/spec/graphql/execution/instrumentation_spec.rb +0 -165
  147. data/spec/graphql/language/block_string_spec.rb +0 -70
  148. data/spec/graphql/language/document_from_schema_definition_spec.rb +0 -770
  149. data/spec/graphql/language/printer_spec.rb +0 -203
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe GraphQL::Schema::Field do
5
+ describe "graphql definition" do
6
+ let(:object_class) { Jazz::Query }
7
+ let(:field) { object_class.fields.find { |f| f.name == "find" } }
8
+
9
+ it "uses the argument class" do
10
+ arg_defn = field.graphql_definition.arguments.values.first
11
+ assert_equal :ok, arg_defn.metadata[:custom]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe GraphQL::Schema::InputObject do
5
+ let(:input_object) { Jazz::EnsembleInput }
6
+ describe "type info" do
7
+ it "has it" do
8
+ assert_equal "EnsembleInput", input_object.graphql_name
9
+ assert_equal nil, input_object.description
10
+ assert_equal 1, input_object.arguments.size
11
+ end
12
+ end
13
+
14
+ describe ".to_graphql" do
15
+ it "assigns itself as the arguments_class" do
16
+ assert_equal input_object, input_object.to_graphql.arguments_class
17
+ end
18
+ end
19
+
20
+ describe "in queries" do
21
+ it "is passed to the field method" do
22
+ query_str = <<-GRAPHQL
23
+ {
24
+ inspectInput(input: {
25
+ stringValue: "ABC",
26
+ legacyInput: { intValue: 4 },
27
+ nestedInput: { stringValue: "xyz"}
28
+ })
29
+ }
30
+ GRAPHQL
31
+
32
+ res = Jazz::Schema.execute(query_str, context: { message: "hi" })
33
+ expected_info = [
34
+ "Jazz::InspectableInput",
35
+ "hi, ABC, 4, (hi, xyz, -, (-))",
36
+ "ABC",
37
+ "ABC",
38
+ "ABC",
39
+ ]
40
+ assert_equal expected_info, res["data"]["inspectInput"]
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe GraphQL::Schema::Interface do
5
+ let(:interface) { Jazz::GloballyIdentifiableType }
6
+
7
+ describe "type info" do
8
+ it "tells its type info" do
9
+ assert_equal "GloballyIdentifiable", interface.graphql_name
10
+ assert_equal 2, interface.fields.size
11
+ end
12
+
13
+ class NewInterface1 < Jazz::GloballyIdentifiableType
14
+ end
15
+
16
+ class NewInterface2 < Jazz::GloballyIdentifiableType
17
+ module Implementation
18
+ def new_method
19
+ end
20
+ end
21
+ end
22
+
23
+ it "can override Implementation" do
24
+
25
+ new_object_1 = Class.new(GraphQL::Schema::Object) do
26
+ implements NewInterface1
27
+ end
28
+
29
+ assert_equal 2, new_object_1.fields.size
30
+ assert new_object_1.method_defined?(:id)
31
+
32
+ new_object_2 = Class.new(GraphQL::Schema::Object) do
33
+ implements NewInterface2
34
+ end
35
+
36
+ assert_equal 2, new_object_2.fields.size
37
+ # It got the new method
38
+ assert new_object_2.method_defined?(:new_method)
39
+ # But not the old method
40
+ refute new_object_2.method_defined?(:id)
41
+ end
42
+ end
43
+
44
+ describe ".to_graphql" do
45
+ it "creates an InterfaceType" do
46
+ interface_type = interface.to_graphql
47
+ assert_equal "GloballyIdentifiable", interface_type.name
48
+ field = interface_type.all_fields.first
49
+ assert_equal "id", field.name
50
+ assert_equal GraphQL::ID_TYPE.to_non_null_type, field.type
51
+ assert_equal "A unique identifier for this object", field.description
52
+ end
53
+ end
54
+
55
+ describe "in queries" do
56
+ it "works" do
57
+ query_str = <<-GRAPHQL
58
+ {
59
+ piano: find(id: "Instrument/Piano") {
60
+ id
61
+ upcasedId
62
+ ... on Instrument {
63
+ family
64
+ }
65
+ }
66
+ }
67
+ GRAPHQL
68
+
69
+ res = Jazz::Schema.execute(query_str)
70
+ expected_piano = {
71
+ "id" => "Instrument/Piano",
72
+ "upcasedId" => "INSTRUMENT/PIANO",
73
+ "family" => "KEYS",
74
+ }
75
+ assert_equal(expected_piano, res["data"]["piano"])
76
+ end
77
+
78
+ it "applies custom field attributes" do
79
+ query_str = <<-GRAPHQL
80
+ {
81
+ find(id: "Ensemble/Bela Fleck and the Flecktones") {
82
+ upcasedId
83
+ ... on Ensemble {
84
+ name
85
+ }
86
+ }
87
+ }
88
+ GRAPHQL
89
+
90
+ res = Jazz::Schema.execute(query_str)
91
+ expected_data = {
92
+ "upcasedId" => "ENSEMBLE/BELA FLECK AND THE FLECKTONES",
93
+ "name" => "Bela Fleck and the Flecktones"
94
+ }
95
+ assert_equal(expected_data, res["data"]["find"])
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe GraphQL::Schema::Object do
5
+ describe "class attributes" do
6
+ let(:object_class) { Jazz::Ensemble }
7
+ it "tells type data" do
8
+ assert_equal "Ensemble", object_class.graphql_name
9
+ assert_equal "A group of musicians playing together", object_class.description
10
+ assert_equal 5, object_class.fields.size
11
+ assert_equal 2, object_class.interfaces.size
12
+ # Compatibility methods are delegated to the underlying BaseType
13
+ assert object_class.respond_to?(:connection_type)
14
+ end
15
+
16
+ it "inherits fields and interfaces" do
17
+ new_object_class = Class.new(object_class) do
18
+ field :newField, String, null: true
19
+ field :name, String, "The new description", null: true
20
+ end
21
+
22
+ # one more than the parent class
23
+ assert_equal 6, new_object_class.fields.size
24
+ # inherited interfaces are present
25
+ assert_equal 2, new_object_class.interfaces.size
26
+ # The new field is present
27
+ assert new_object_class.fields.find { |f| f.name == "newField" }
28
+ # The overridden field is present:
29
+ name_field = new_object_class.fields.find { |f| f.name == "name" }
30
+ assert_equal "The new description", name_field.description
31
+ end
32
+ end
33
+
34
+ describe ".to_graphql_type" do
35
+ let(:obj_type) { Jazz::Ensemble.to_graphql }
36
+ it "returns a matching GraphQL::ObjectType" do
37
+ assert_equal "Ensemble", obj_type.name
38
+ assert_equal "A group of musicians playing together", obj_type.description
39
+ assert_equal 5, obj_type.all_fields.size
40
+
41
+ name_field = obj_type.all_fields[2]
42
+ assert_equal "name", name_field.name
43
+ assert_equal GraphQL::STRING_TYPE.to_non_null_type, name_field.type
44
+ assert_equal nil, name_field.description
45
+ end
46
+
47
+ it "has a custom implementation" do
48
+ assert_equal obj_type.metadata[:config], :configged
49
+ end
50
+
51
+ it "uses the custom field class" do
52
+ query_str = <<-GRAPHQL
53
+ {
54
+ ensembles { upcaseName }
55
+ }
56
+ GRAPHQL
57
+
58
+ res = Jazz::Schema.execute(query_str)
59
+ assert_equal ["BELA FLECK AND THE FLECKTONES"], res["data"]["ensembles"].map { |e| e["upcaseName"] }
60
+ end
61
+ end
62
+
63
+
64
+ describe "in queries" do
65
+ after {
66
+ Jazz::Models.reset
67
+ }
68
+
69
+ it "returns data" do
70
+ query_str = <<-GRAPHQL
71
+ {
72
+ ensembles { name }
73
+ instruments { name }
74
+ }
75
+ GRAPHQL
76
+ res = Jazz::Schema.execute(query_str)
77
+ assert_equal [{"name" => "Bela Fleck and the Flecktones"}], res["data"]["ensembles"]
78
+ assert_equal({"name" => "Banjo"}, res["data"]["instruments"].first)
79
+ end
80
+
81
+ it "does mutations" do
82
+ mutation_str = <<-GRAPHQL
83
+ mutation AddEnsemble($name: String!) {
84
+ addEnsemble(input: { name: $name }) {
85
+ id
86
+ }
87
+ }
88
+ GRAPHQL
89
+
90
+ query_str = <<-GRAPHQL
91
+ query($id: ID!) {
92
+ find(id: $id) {
93
+ ... on Ensemble {
94
+ name
95
+ }
96
+ }
97
+ }
98
+ GRAPHQL
99
+
100
+ res = Jazz::Schema.execute(mutation_str, variables: { "name" => "Miles Davis Quartet" })
101
+ new_id = res["data"]["addEnsemble"]["id"]
102
+
103
+ res2 = Jazz::Schema.execute(query_str, variables: { "id" => new_id })
104
+ assert_equal "Miles Davis Quartet", res2["data"]["find"]["name"]
105
+ end
106
+
107
+ it "initializes root wrappers once" do
108
+ query_str = " { oid1: objectId oid2: objectId }"
109
+ res = Jazz::Schema.execute(query_str)
110
+ assert_equal res["data"]["oid1"], res["data"]["oid2"]
111
+ end
112
+
113
+ it "skips fields properly" do
114
+ query_str = "{ find(id: \"MagicalSkipId\") { __typename } }"
115
+ res = Jazz::Schema.execute(query_str)
116
+ assert_equal({"data" => nil }, res.to_h)
117
+ end
118
+ end
119
+ end
@@ -14,11 +14,7 @@ describe GraphQL::Schema::Printer do
14
14
 
15
15
  value "FOO", value: :foo
16
16
  value "BAR", value: :bar
17
- value "BAZ", deprecation_reason: <<-REASON
18
- Use "BAR" instead.
19
-
20
- It's the replacement for this value.
21
- REASON
17
+ value "BAZ", deprecation_reason: 'Use "BAR".'
22
18
  value "WOZ", deprecation_reason: GraphQL::Directive::DEFAULT_DEPRECATION_REASON
23
19
  end
24
20
 
@@ -140,14 +136,6 @@ schema {
140
136
  query: Root
141
137
  }
142
138
 
143
- # Marks an element of a GraphQL schema as no longer supported.
144
- directive @deprecated(
145
- # Explains why this element was deprecated, usually also including a suggestion
146
- # for how to access supported similar data. Formatted in
147
- # [Markdown](https://daringfireball.net/projects/markdown/).
148
- reason: String = "No longer supported"
149
- ) on FIELD_DEFINITION | ENUM_VALUE
150
-
151
139
  # Directs the executor to include this field or fragment only when the `if` argument is true.
152
140
  directive @include(
153
141
  # Included when true.
@@ -160,6 +148,14 @@ directive @skip(
160
148
  if: Boolean!
161
149
  ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
162
150
 
151
+ # Marks an element of a GraphQL schema as no longer supported.
152
+ directive @deprecated(
153
+ # Explains why this element was deprecated, usually also including a suggestion
154
+ # for how to access supported similar data. Formatted in
155
+ # [Markdown](https://daringfireball.net/projects/markdown/).
156
+ reason: String = "No longer supported"
157
+ ) on FIELD_DEFINITION | ENUM_VALUE
158
+
163
159
  # A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
164
160
  #
165
161
  # In some cases, you need to provide options to alter GraphQL's execution behavior
@@ -349,6 +345,7 @@ schema {
349
345
  subscription: Subscription
350
346
  }
351
347
  SCHEMA
348
+
352
349
  assert_match expected, GraphQL::Schema::Printer.print_schema(custom_schema)
353
350
  end
354
351
 
@@ -356,6 +353,7 @@ SCHEMA
356
353
  custom_mutation = schema.mutation.redefine(name: "MyMutationRoot")
357
354
  custom_schema = schema.redefine(mutation: custom_mutation)
358
355
 
356
+
359
357
  expected = <<SCHEMA
360
358
  schema {
361
359
  query: Query
@@ -392,7 +390,7 @@ type Audio {
392
390
 
393
391
  enum Choice {
394
392
  BAR
395
- BAZ @deprecated(reason: "Use \\\"BAR\\\" instead.\\n\\nIt's the replacement for this value.\\n")
393
+ BAZ @deprecated(reason: "Use \\\"BAR\\\".")
396
394
  FOO
397
395
  WOZ @deprecated
398
396
  }
@@ -491,6 +489,7 @@ enum Choice {
491
489
  }
492
490
 
493
491
  type Subscription {
492
+
494
493
  }
495
494
 
496
495
  input Varied {
@@ -510,9 +509,7 @@ SCHEMA
510
509
  when GraphQL::Argument
511
510
  member.name != "id"
512
511
  else
513
- if member.respond_to?(:deprecation_reason)
514
- member.deprecation_reason.nil?
515
- end
512
+ member.deprecation_reason.nil?
516
513
  end
517
514
  }
518
515
 
@@ -603,86 +600,12 @@ SCHEMA
603
600
  type Post {
604
601
  body: String!
605
602
  comments: [Comment!]
606
- comments_count: Int! @deprecated(reason: "Use \\\"comments\\\".")
603
+ comments_count: Int! @deprecated(reason: \"Use \\\"comments\\\".\")
607
604
  id: ID!
608
605
  title: String!
609
606
  }
610
607
  SCHEMA
611
608
  assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema).print_type(schema.types['Post'])
612
609
  end
613
-
614
- it "can print arguments that use non-standard Ruby objects as default values" do
615
- backing_object = Struct.new(:value)
616
-
617
- scalar_type = GraphQL::ScalarType.define do
618
- name "SomeType"
619
- coerce_input ->(value, ctx) { backing_object.new(value) }
620
- coerce_result ->(obj, ctx) { obj.value }
621
- end
622
-
623
- query_root = GraphQL::ObjectType.define do
624
- name "Query"
625
- description "The query root of this schema"
626
-
627
- field :example do
628
- type scalar_type
629
- argument :input, scalar_type, default_value: backing_object.new("Howdy")
630
- resolve ->(obj, args, ctx) { args[:input] }
631
- end
632
- end
633
-
634
- schema = GraphQL::Schema.define do
635
- query query_root
636
- end
637
-
638
- expected = <<SCHEMA
639
- # The query root of this schema
640
- type Query {
641
- example(input: SomeType = "Howdy"): SomeType
642
- }
643
- SCHEMA
644
-
645
- assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema).print_type(query_root)
646
- end
647
- end
648
-
649
- describe "#print_directive" do
650
- it "prints the deprecation reason in a single line escaped string including line breaks" do
651
- expected = <<SCHEMA
652
- enum Choice {
653
- BAR
654
- BAZ @deprecated(reason: "Use \\\"BAR\\\" instead.\\n\\nIt's the replacement for this value.\\n")
655
- FOO
656
- WOZ @deprecated
657
- }
658
-
659
- type Subscription {
660
- }
661
-
662
- input Varied {
663
- bool: Boolean
664
- enum: Choice = FOO
665
- float: Float
666
- int: Int
667
- }
668
- SCHEMA
669
-
670
- only_filter = ->(member, ctx) {
671
- case member
672
- when GraphQL::ScalarType
673
- true
674
- when GraphQL::BaseType
675
- ctx[:names].include?(member.name)
676
- when GraphQL::Argument
677
- member.name != "id"
678
- else
679
- true
680
- end
681
- }
682
-
683
- context = { names: ["Varied", "Choice", "Subscription"] }
684
-
685
- assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema, context: context, only: only_filter).print_schema
686
- end
687
610
  end
688
611
  end