graphql 1.13.24 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of graphql might be problematic. Click here for more details.

Files changed (195) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/analysis/ast/query_complexity.rb +1 -1
  3. data/lib/graphql/analysis/ast/query_depth.rb +0 -1
  4. data/lib/graphql/analysis/ast/visitor.rb +1 -1
  5. data/lib/graphql/analysis/ast.rb +0 -10
  6. data/lib/graphql/analysis.rb +0 -7
  7. data/lib/graphql/backtrace/table.rb +0 -18
  8. data/lib/graphql/backtrace/tracer.rb +1 -2
  9. data/lib/graphql/backtrace.rb +2 -8
  10. data/lib/graphql/dig.rb +1 -1
  11. data/lib/graphql/execution/errors.rb +1 -9
  12. data/lib/graphql/execution/interpreter/runtime.rb +6 -13
  13. data/lib/graphql/execution/interpreter.rb +0 -22
  14. data/lib/graphql/execution/lazy.rb +1 -1
  15. data/lib/graphql/execution/lookahead.rb +6 -13
  16. data/lib/graphql/execution/multiplex.rb +50 -107
  17. data/lib/graphql/execution.rb +11 -3
  18. data/lib/graphql/introspection/directive_type.rb +2 -2
  19. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  20. data/lib/graphql/introspection/entry_points.rb +2 -15
  21. data/lib/graphql/introspection/field_type.rb +1 -1
  22. data/lib/graphql/introspection/schema_type.rb +2 -2
  23. data/lib/graphql/introspection/type_type.rb +5 -5
  24. data/lib/graphql/language/document_from_schema_definition.rb +0 -17
  25. data/lib/graphql/language/nodes.rb +0 -3
  26. data/lib/graphql/pagination/connections.rb +2 -28
  27. data/lib/graphql/query/context.rb +1 -185
  28. data/lib/graphql/query/input_validation_result.rb +0 -9
  29. data/lib/graphql/query/literal_input.rb +8 -13
  30. data/lib/graphql/query/validation_pipeline.rb +6 -34
  31. data/lib/graphql/query/variable_validation_error.rb +2 -2
  32. data/lib/graphql/query/variables.rb +8 -31
  33. data/lib/graphql/query.rb +5 -34
  34. data/lib/graphql/railtie.rb +0 -104
  35. data/lib/graphql/relay/range_add.rb +0 -4
  36. data/lib/graphql/relay.rb +0 -15
  37. data/lib/graphql/schema/addition.rb +1 -8
  38. data/lib/graphql/schema/argument.rb +6 -28
  39. data/lib/graphql/schema/build_from_definition.rb +7 -9
  40. data/lib/graphql/schema/directive.rb +1 -22
  41. data/lib/graphql/schema/enum.rb +3 -19
  42. data/lib/graphql/schema/enum_value.rb +1 -23
  43. data/lib/graphql/schema/field.rb +22 -221
  44. data/lib/graphql/schema/input_object.rb +17 -65
  45. data/lib/graphql/schema/interface.rb +1 -30
  46. data/lib/graphql/schema/introspection_system.rb +3 -8
  47. data/lib/graphql/schema/late_bound_type.rb +2 -2
  48. data/lib/graphql/schema/list.rb +3 -24
  49. data/lib/graphql/schema/loader.rb +0 -1
  50. data/lib/graphql/schema/member/base_dsl_methods.rb +1 -6
  51. data/lib/graphql/schema/member/build_type.rb +4 -6
  52. data/lib/graphql/schema/member/has_arguments.rb +16 -20
  53. data/lib/graphql/schema/member/has_fields.rb +3 -3
  54. data/lib/graphql/schema/member/has_interfaces.rb +1 -13
  55. data/lib/graphql/schema/member/validates_input.rb +2 -2
  56. data/lib/graphql/schema/member.rb +0 -6
  57. data/lib/graphql/schema/mutation.rb +0 -9
  58. data/lib/graphql/schema/non_null.rb +3 -9
  59. data/lib/graphql/schema/object.rb +0 -40
  60. data/lib/graphql/schema/relay_classic_mutation.rb +17 -28
  61. data/lib/graphql/schema/scalar.rb +1 -16
  62. data/lib/graphql/schema/union.rb +0 -16
  63. data/lib/graphql/schema/warden.rb +3 -12
  64. data/lib/graphql/schema/wrapper.rb +0 -5
  65. data/lib/graphql/schema.rb +106 -945
  66. data/lib/graphql/static_validation/base_visitor.rb +4 -21
  67. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +12 -12
  68. data/lib/graphql/static_validation/validator.rb +2 -24
  69. data/lib/graphql/static_validation.rb +0 -2
  70. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +38 -1
  71. data/lib/graphql/subscriptions/event.rb +1 -1
  72. data/lib/graphql/subscriptions/instrumentation.rb +0 -51
  73. data/lib/graphql/subscriptions.rb +4 -13
  74. data/lib/graphql/tracing/data_dog_tracing.rb +16 -20
  75. data/lib/graphql/tracing/platform_tracing.rb +4 -32
  76. data/lib/graphql/tracing.rb +0 -1
  77. data/lib/graphql/types/relay/connection_behaviors.rb +2 -6
  78. data/lib/graphql/types/relay/default_relay.rb +0 -10
  79. data/lib/graphql/types/relay/node_behaviors.rb +5 -1
  80. data/lib/graphql/types/relay.rb +0 -2
  81. data/lib/graphql/types/string.rb +1 -1
  82. data/lib/graphql/version.rb +1 -1
  83. data/lib/graphql.rb +1 -66
  84. metadata +28 -164
  85. data/lib/graphql/analysis/analyze_query.rb +0 -98
  86. data/lib/graphql/analysis/field_usage.rb +0 -45
  87. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  88. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  89. data/lib/graphql/analysis/query_complexity.rb +0 -88
  90. data/lib/graphql/analysis/query_depth.rb +0 -43
  91. data/lib/graphql/analysis/reducer_state.rb +0 -48
  92. data/lib/graphql/argument.rb +0 -131
  93. data/lib/graphql/authorization.rb +0 -82
  94. data/lib/graphql/backtrace/legacy_tracer.rb +0 -56
  95. data/lib/graphql/backwards_compatibility.rb +0 -61
  96. data/lib/graphql/base_type.rb +0 -232
  97. data/lib/graphql/boolean_type.rb +0 -2
  98. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  99. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  100. data/lib/graphql/compatibility/execution_specification.rb +0 -436
  101. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  102. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -215
  103. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -87
  104. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  105. data/lib/graphql/compatibility/query_parser_specification.rb +0 -266
  106. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -682
  107. data/lib/graphql/compatibility.rb +0 -5
  108. data/lib/graphql/define/assign_argument.rb +0 -12
  109. data/lib/graphql/define/assign_connection.rb +0 -13
  110. data/lib/graphql/define/assign_enum_value.rb +0 -18
  111. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  112. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  113. data/lib/graphql/define/assign_object_field.rb +0 -42
  114. data/lib/graphql/define/defined_object_proxy.rb +0 -53
  115. data/lib/graphql/define/instance_definable.rb +0 -255
  116. data/lib/graphql/define/no_definition_error.rb +0 -7
  117. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  118. data/lib/graphql/define/type_definer.rb +0 -31
  119. data/lib/graphql/define.rb +0 -31
  120. data/lib/graphql/deprecated_dsl.rb +0 -55
  121. data/lib/graphql/directive/deprecated_directive.rb +0 -2
  122. data/lib/graphql/directive/include_directive.rb +0 -2
  123. data/lib/graphql/directive/skip_directive.rb +0 -2
  124. data/lib/graphql/directive.rb +0 -107
  125. data/lib/graphql/enum_type.rb +0 -133
  126. data/lib/graphql/execution/execute.rb +0 -333
  127. data/lib/graphql/execution/flatten.rb +0 -40
  128. data/lib/graphql/execution/typecast.rb +0 -50
  129. data/lib/graphql/field/resolve.rb +0 -59
  130. data/lib/graphql/field.rb +0 -226
  131. data/lib/graphql/float_type.rb +0 -2
  132. data/lib/graphql/function.rb +0 -128
  133. data/lib/graphql/id_type.rb +0 -2
  134. data/lib/graphql/input_object_type.rb +0 -138
  135. data/lib/graphql/int_type.rb +0 -2
  136. data/lib/graphql/interface_type.rb +0 -72
  137. data/lib/graphql/internal_representation/document.rb +0 -27
  138. data/lib/graphql/internal_representation/node.rb +0 -206
  139. data/lib/graphql/internal_representation/print.rb +0 -51
  140. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  141. data/lib/graphql/internal_representation/scope.rb +0 -88
  142. data/lib/graphql/internal_representation/visit.rb +0 -36
  143. data/lib/graphql/internal_representation.rb +0 -7
  144. data/lib/graphql/list_type.rb +0 -80
  145. data/lib/graphql/non_null_type.rb +0 -71
  146. data/lib/graphql/object_type.rb +0 -130
  147. data/lib/graphql/query/arguments.rb +0 -189
  148. data/lib/graphql/query/arguments_cache.rb +0 -24
  149. data/lib/graphql/query/executor.rb +0 -52
  150. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  151. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  152. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  153. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  154. data/lib/graphql/query/serial_execution.rb +0 -40
  155. data/lib/graphql/relay/array_connection.rb +0 -83
  156. data/lib/graphql/relay/base_connection.rb +0 -189
  157. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  158. data/lib/graphql/relay/connection_resolve.rb +0 -43
  159. data/lib/graphql/relay/connection_type.rb +0 -54
  160. data/lib/graphql/relay/edge.rb +0 -27
  161. data/lib/graphql/relay/edge_type.rb +0 -19
  162. data/lib/graphql/relay/edges_instrumentation.rb +0 -39
  163. data/lib/graphql/relay/global_id_resolve.rb +0 -17
  164. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  165. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  166. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  167. data/lib/graphql/relay/mutation/result.rb +0 -38
  168. data/lib/graphql/relay/mutation.rb +0 -106
  169. data/lib/graphql/relay/node.rb +0 -39
  170. data/lib/graphql/relay/page_info.rb +0 -7
  171. data/lib/graphql/relay/relation_connection.rb +0 -188
  172. data/lib/graphql/relay/type_extensions.rb +0 -32
  173. data/lib/graphql/scalar_type.rb +0 -91
  174. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  175. data/lib/graphql/schema/default_parse_error.rb +0 -10
  176. data/lib/graphql/schema/default_type_error.rb +0 -17
  177. data/lib/graphql/schema/member/accepts_definition.rb +0 -164
  178. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -58
  179. data/lib/graphql/schema/member/instrumentation.rb +0 -131
  180. data/lib/graphql/schema/middleware_chain.rb +0 -82
  181. data/lib/graphql/schema/possible_types.rb +0 -44
  182. data/lib/graphql/schema/rescue_middleware.rb +0 -60
  183. data/lib/graphql/schema/timeout_middleware.rb +0 -88
  184. data/lib/graphql/schema/traversal.rb +0 -228
  185. data/lib/graphql/schema/validation.rb +0 -313
  186. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  187. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  188. data/lib/graphql/string_type.rb +0 -2
  189. data/lib/graphql/subscriptions/subscription_root.rb +0 -76
  190. data/lib/graphql/tracing/skylight_tracing.rb +0 -70
  191. data/lib/graphql/types/relay/node_field.rb +0 -24
  192. data/lib/graphql/types/relay/nodes_field.rb +0 -43
  193. data/lib/graphql/union_type.rb +0 -115
  194. data/lib/graphql/upgrader/member.rb +0 -937
  195. data/lib/graphql/upgrader/schema.rb +0 -38
@@ -1,682 +0,0 @@
1
- # frozen_string_literal: true
2
- module GraphQL
3
- module Compatibility
4
- # This asserts that a given parse function turns a string into
5
- # the proper tree of {{GraphQL::Language::Nodes}}.
6
- module SchemaParserSpecification
7
- # @yieldparam query_string [String] A query string to parse
8
- # @yieldreturn [GraphQL::Language::Nodes::Document]
9
- # @return [Class<Minitest::Test>] A test suite for this parse function
10
- def self.build_suite(&block)
11
- GraphQL::Deprecation.warn "#{self} will be removed from GraphQL-Ruby 2.0. There is no replacement, please open an issue on GitHub if you need support."
12
-
13
- Class.new(Minitest::Test) do
14
- @@parse_fn = block
15
-
16
- def parse(query_string)
17
- @@parse_fn.call(query_string)
18
- end
19
-
20
- def test_it_parses_object_types
21
- document = parse('
22
- # This is what
23
- # somebody said about something
24
- type Comment implements Node @deprecated(reason: "No longer supported") {
25
- id: ID!
26
- }
27
- ')
28
-
29
- type = document.definitions.first
30
- assert_equal GraphQL::Language::Nodes::ObjectTypeDefinition, type.class
31
- assert_equal 'Comment', type.name
32
- assert_equal "This is what\nsomebody said about something", type.description
33
- assert_equal ['Node'], type.interfaces.map(&:name)
34
- assert_equal ['id'], type.fields.map(&:name)
35
- assert_equal [], type.fields[0].arguments
36
- assert_equal 'ID', type.fields[0].type.of_type.name
37
- assert_equal 1, type.directives.length
38
-
39
- deprecated_directive = type.directives[0]
40
- assert_equal 'deprecated', deprecated_directive.name
41
- assert_equal 'reason', deprecated_directive.arguments[0].name
42
- assert_equal 'No longer supported', deprecated_directive.arguments[0].value
43
- end
44
-
45
- def test_it_parses_scalars
46
- document = parse('scalar DateTime')
47
-
48
- type = document.definitions.first
49
- assert_equal GraphQL::Language::Nodes::ScalarTypeDefinition, type.class
50
- assert_equal 'DateTime', type.name
51
- end
52
-
53
- def test_it_parses_enum_types
54
- document = parse('
55
- enum DogCommand {
56
- # Good dog
57
- SIT
58
- DOWN @deprecated(reason: "No longer supported")
59
- HEEL
60
- }
61
- ')
62
-
63
- type = document.definitions.first
64
- assert_equal GraphQL::Language::Nodes::EnumTypeDefinition, type.class
65
- assert_equal 'DogCommand', type.name
66
- assert_equal 3, type.values.length
67
-
68
- assert_equal 'SIT', type.values[0].name
69
- assert_equal [], type.values[0].directives
70
- assert_equal "Good dog", type.values[0].description
71
-
72
- assert_equal 'DOWN', type.values[1].name
73
- assert_equal 1, type.values[1].directives.length
74
- deprecated_directive = type.values[1].directives[0]
75
- assert_equal 'deprecated', deprecated_directive.name
76
- assert_equal 'reason', deprecated_directive.arguments[0].name
77
- assert_equal 'No longer supported', deprecated_directive.arguments[0].value
78
-
79
- assert_equal 'HEEL', type.values[2].name
80
- assert_equal [], type.values[2].directives
81
- end
82
-
83
- def test_it_parses_union_types
84
- document = parse(
85
- "union BagOfThings = \n" \
86
- "A |\n" \
87
- "B |\n" \
88
- "C"
89
- )
90
-
91
- union = document.definitions.first
92
-
93
- assert_equal GraphQL::Language::Nodes::UnionTypeDefinition, union.class
94
- assert_equal 'BagOfThings', union.name
95
- assert_equal 3, union.types.length
96
- assert_equal [1, 1], union.position
97
-
98
- assert_equal GraphQL::Language::Nodes::TypeName, union.types[0].class
99
- assert_equal 'A', union.types[0].name
100
- assert_equal [2, 1], union.types[0].position
101
-
102
- assert_equal GraphQL::Language::Nodes::TypeName, union.types[1].class
103
- assert_equal 'B', union.types[1].name
104
- assert_equal [3, 1], union.types[1].position
105
-
106
- assert_equal GraphQL::Language::Nodes::TypeName, union.types[2].class
107
- assert_equal 'C', union.types[2].name
108
- assert_equal [4, 1], union.types[2].position
109
- end
110
-
111
- def test_it_parses_input_types
112
- document = parse('
113
- input EmptyMutationInput {
114
- clientMutationId: String
115
- }
116
- ')
117
-
118
- type = document.definitions.first
119
- assert_equal GraphQL::Language::Nodes::InputObjectTypeDefinition, type.class
120
- assert_equal 'EmptyMutationInput', type.name
121
- assert_equal ['clientMutationId'], type.fields.map(&:name)
122
- assert_equal 'String', type.fields[0].type.name
123
- assert_equal nil, type.fields[0].default_value
124
- end
125
-
126
- def test_it_parses_directives
127
- document = parse('
128
- directive @include(if: Boolean!)
129
- on FIELD
130
- | FRAGMENT_SPREAD
131
- | INLINE_FRAGMENT
132
- ')
133
-
134
- type = document.definitions.first
135
- assert_equal GraphQL::Language::Nodes::DirectiveDefinition, type.class
136
- assert_equal 'include', type.name
137
-
138
- assert_equal 1, type.arguments.length
139
- assert_equal 'if', type.arguments[0].name
140
- assert_equal 'Boolean', type.arguments[0].type.of_type.name
141
-
142
- assert_equal 3, type.locations.length
143
-
144
- assert_instance_of GraphQL::Language::Nodes::DirectiveLocation, type.locations[0]
145
- assert_equal 'FIELD', type.locations[0].name
146
- assert_equal [3, 20], type.locations[0].position
147
-
148
- assert_instance_of GraphQL::Language::Nodes::DirectiveLocation, type.locations[1]
149
- assert_equal 'FRAGMENT_SPREAD', type.locations[1].name
150
- assert_equal [4, 19], type.locations[1].position
151
-
152
- assert_instance_of GraphQL::Language::Nodes::DirectiveLocation, type.locations[2]
153
- assert_equal 'INLINE_FRAGMENT', type.locations[2].name
154
- assert_equal [5, 19], type.locations[2].position
155
- end
156
-
157
- def test_it_parses_field_arguments
158
- document = parse('
159
- type Mutation {
160
- post(
161
- id: ID! @deprecated(reason: "Not used"),
162
- # This is what goes in the post
163
- data: String
164
- ): Post
165
- }
166
- ')
167
-
168
- field = document.definitions.first.fields.first
169
- assert_equal ['id', 'data'], field.arguments.map(&:name)
170
- id_arg = field.arguments[0]
171
-
172
- deprecated_directive = id_arg.directives[0]
173
- assert_equal 'deprecated', deprecated_directive.name
174
- assert_equal 'reason', deprecated_directive.arguments[0].name
175
- assert_equal 'Not used', deprecated_directive.arguments[0].value
176
-
177
- data_arg = field.arguments[1]
178
- assert_equal "data", data_arg.name
179
- assert_equal "This is what goes in the post", data_arg.description
180
- end
181
-
182
- def test_it_parses_schema_definition
183
- document = parse('
184
- schema {
185
- query: QueryRoot
186
- mutation: MutationRoot
187
- subscription: SubscriptionRoot
188
- }
189
- ')
190
-
191
- schema = document.definitions.first
192
- assert_equal 'QueryRoot', schema.query
193
- assert_equal 'MutationRoot', schema.mutation
194
- assert_equal 'SubscriptionRoot', schema.subscription
195
- end
196
-
197
- def test_it_parses_schema_extensions
198
- document = parse('
199
- extend schema {
200
- query: QueryRoot
201
- mutation: MutationRoot
202
- subscription: SubscriptionRoot
203
- }
204
- ')
205
-
206
- schema_extension = document.definitions.first
207
- assert_equal GraphQL::Language::Nodes::SchemaExtension, schema_extension.class
208
- assert_equal [2, 15], schema_extension.position
209
-
210
- assert_equal 'QueryRoot', schema_extension.query
211
- assert_equal 'MutationRoot', schema_extension.mutation
212
- assert_equal 'SubscriptionRoot', schema_extension.subscription
213
- end
214
-
215
- def test_it_parses_schema_extensions_with_directives
216
- document = parse('
217
- extend schema @something {
218
- query: QueryRoot
219
- }
220
- ')
221
-
222
- schema_extension = document.definitions.first
223
- assert_equal GraphQL::Language::Nodes::SchemaExtension, schema_extension.class
224
-
225
- assert_equal 1, schema_extension.directives.length
226
- assert_equal GraphQL::Language::Nodes::Directive, schema_extension.directives.first.class
227
- assert_equal 'something', schema_extension.directives.first.name
228
-
229
- assert_equal 'QueryRoot', schema_extension.query
230
- assert_equal nil, schema_extension.mutation
231
- assert_equal nil, schema_extension.subscription
232
- end
233
-
234
- def test_it_parses_schema_extensions_with_only_directives
235
- document = parse('
236
- extend schema @something
237
- ')
238
-
239
- schema_extension = document.definitions.first
240
- assert_equal GraphQL::Language::Nodes::SchemaExtension, schema_extension.class
241
-
242
- assert_equal 1, schema_extension.directives.length
243
- assert_equal GraphQL::Language::Nodes::Directive, schema_extension.directives.first.class
244
- assert_equal 'something', schema_extension.directives.first.name
245
-
246
- assert_equal nil, schema_extension.query
247
- assert_equal nil, schema_extension.mutation
248
- assert_equal nil, schema_extension.subscription
249
- end
250
-
251
- def test_it_parses_scalar_extensions
252
- document = parse('
253
- extend scalar Date @something @somethingElse
254
- ')
255
-
256
- scalar_extension = document.definitions.first
257
- assert_equal GraphQL::Language::Nodes::ScalarTypeExtension, scalar_extension.class
258
- assert_equal 'Date', scalar_extension.name
259
- assert_equal [2, 15], scalar_extension.position
260
-
261
- assert_equal 2, scalar_extension.directives.length
262
- assert_equal GraphQL::Language::Nodes::Directive, scalar_extension.directives.first.class
263
- assert_equal 'something', scalar_extension.directives.first.name
264
- assert_equal GraphQL::Language::Nodes::Directive, scalar_extension.directives.last.class
265
- assert_equal 'somethingElse', scalar_extension.directives.last.name
266
- end
267
-
268
- def test_it_parses_object_type_extensions_with_field_definitions
269
- document = parse('
270
- extend type User {
271
- login: String!
272
- }
273
- ')
274
-
275
- object_type_extension = document.definitions.first
276
- assert_equal GraphQL::Language::Nodes::ObjectTypeExtension, object_type_extension.class
277
- assert_equal 'User', object_type_extension.name
278
- assert_equal [2, 15], object_type_extension.position
279
-
280
- assert_equal 1, object_type_extension.fields.length
281
- assert_equal GraphQL::Language::Nodes::FieldDefinition, object_type_extension.fields.first.class
282
- end
283
-
284
- def test_it_parses_object_type_extensions_with_field_definitions_and_directives
285
- document = parse('
286
- extend type User @deprecated {
287
- login: String!
288
- }
289
- ')
290
-
291
- object_type_extension = document.definitions.first
292
- assert_equal GraphQL::Language::Nodes::ObjectTypeExtension, object_type_extension.class
293
- assert_equal 'User', object_type_extension.name
294
- assert_equal [2, 15], object_type_extension.position
295
-
296
- assert_equal 1, object_type_extension.fields.length
297
- assert_equal GraphQL::Language::Nodes::FieldDefinition, object_type_extension.fields.first.class
298
-
299
- assert_equal 1, object_type_extension.directives.length
300
- assert_equal GraphQL::Language::Nodes::Directive, object_type_extension.directives.first.class
301
- end
302
-
303
- def test_it_parses_object_type_extensions_with_field_definitions_and_implements
304
- document = parse('
305
- extend type User implements Node {
306
- login: String!
307
- }
308
- ')
309
-
310
- object_type_extension = document.definitions.first
311
- assert_equal GraphQL::Language::Nodes::ObjectTypeExtension, object_type_extension.class
312
- assert_equal 'User', object_type_extension.name
313
- assert_equal [2, 15], object_type_extension.position
314
-
315
- assert_equal 1, object_type_extension.fields.length
316
- assert_equal GraphQL::Language::Nodes::FieldDefinition, object_type_extension.fields.first.class
317
-
318
- assert_equal 1, object_type_extension.interfaces.length
319
- assert_equal GraphQL::Language::Nodes::TypeName, object_type_extension.interfaces.first.class
320
- end
321
-
322
- def test_it_parses_object_type_extensions_with_only_directives
323
- document = parse('
324
- extend type User @deprecated
325
- ')
326
-
327
- object_type_extension = document.definitions.first
328
- assert_equal GraphQL::Language::Nodes::ObjectTypeExtension, object_type_extension.class
329
- assert_equal 'User', object_type_extension.name
330
- assert_equal [2, 15], object_type_extension.position
331
-
332
- assert_equal 1, object_type_extension.directives.length
333
- assert_equal GraphQL::Language::Nodes::Directive, object_type_extension.directives.first.class
334
- assert_equal 'deprecated', object_type_extension.directives.first.name
335
- end
336
-
337
- def test_it_parses_object_type_extensions_with_implements_and_directives
338
- document = parse('
339
- extend type User implements Node @deprecated
340
- ')
341
-
342
- object_type_extension = document.definitions.first
343
- assert_equal GraphQL::Language::Nodes::ObjectTypeExtension, object_type_extension.class
344
- assert_equal 'User', object_type_extension.name
345
- assert_equal [2, 15], object_type_extension.position
346
-
347
- assert_equal 1, object_type_extension.directives.length
348
- assert_equal GraphQL::Language::Nodes::Directive, object_type_extension.directives.first.class
349
- assert_equal 'deprecated', object_type_extension.directives.first.name
350
-
351
- assert_equal 1, object_type_extension.interfaces.length
352
- assert_equal GraphQL::Language::Nodes::TypeName, object_type_extension.interfaces.first.class
353
- assert_equal 'Node', object_type_extension.interfaces.first.name
354
- end
355
-
356
- def test_it_parses_object_type_extensions_with_only_implements
357
- document = parse('
358
- extend type User implements Node
359
- ')
360
-
361
- object_type_extension = document.definitions.first
362
- assert_equal GraphQL::Language::Nodes::ObjectTypeExtension, object_type_extension.class
363
- assert_equal 'User', object_type_extension.name
364
- assert_equal [2, 15], object_type_extension.position
365
-
366
- assert_equal 1, object_type_extension.interfaces.length
367
- assert_equal GraphQL::Language::Nodes::TypeName, object_type_extension.interfaces.first.class
368
- assert_equal 'Node', object_type_extension.interfaces.first.name
369
- end
370
-
371
- def test_it_parses_interface_type_extensions_with_directives_and_fields
372
- document = parse('
373
- extend interface Node @directive {
374
- field: String
375
- }
376
- ')
377
-
378
- interface_type_extension = document.definitions.first
379
- assert_equal GraphQL::Language::Nodes::InterfaceTypeExtension, interface_type_extension.class
380
- assert_equal 'Node', interface_type_extension.name
381
- assert_equal [2, 15], interface_type_extension.position
382
-
383
- assert_equal 1, interface_type_extension.directives.length
384
- assert_equal GraphQL::Language::Nodes::Directive, interface_type_extension.directives.first.class
385
- assert_equal 'directive', interface_type_extension.directives.first.name
386
-
387
- assert_equal 1, interface_type_extension.fields.length
388
- assert_equal GraphQL::Language::Nodes::FieldDefinition, interface_type_extension.fields.first.class
389
- assert_equal 'field', interface_type_extension.fields.first.name
390
- end
391
-
392
- def test_it_parses_interface_type_extensions_with_fields
393
- document = parse('
394
- extend interface Node {
395
- field: String
396
- }
397
- ')
398
-
399
- interface_type_extension = document.definitions.first
400
- assert_equal GraphQL::Language::Nodes::InterfaceTypeExtension, interface_type_extension.class
401
- assert_equal 'Node', interface_type_extension.name
402
- assert_equal [2, 15], interface_type_extension.position
403
-
404
- assert_equal 0, interface_type_extension.directives.length
405
-
406
- assert_equal 1, interface_type_extension.fields.length
407
- assert_equal GraphQL::Language::Nodes::FieldDefinition, interface_type_extension.fields.first.class
408
- assert_equal 'field', interface_type_extension.fields.first.name
409
- end
410
-
411
- def test_it_parses_interface_type_extensions_with_directives
412
- document = parse('
413
- extend interface Node @directive
414
- ')
415
-
416
- interface_type_extension = document.definitions.first
417
- assert_equal GraphQL::Language::Nodes::InterfaceTypeExtension, interface_type_extension.class
418
- assert_equal 'Node', interface_type_extension.name
419
- assert_equal [2, 15], interface_type_extension.position
420
-
421
- assert_equal 1, interface_type_extension.directives.length
422
- assert_equal GraphQL::Language::Nodes::Directive, interface_type_extension.directives.first.class
423
- assert_equal 'directive', interface_type_extension.directives.first.name
424
- end
425
-
426
- def test_it_parses_union_type_extension_with_union_members
427
- document = parse('
428
- extend union BagOfThings = A | B
429
- ')
430
-
431
- union_type_extension = document.definitions.first
432
- assert_equal GraphQL::Language::Nodes::UnionTypeExtension, union_type_extension.class
433
- assert_equal 'BagOfThings', union_type_extension.name
434
- assert_equal [2, 15], union_type_extension.position
435
-
436
- assert_equal 0, union_type_extension.directives.length
437
-
438
- assert_equal 2, union_type_extension.types.length
439
- assert_equal GraphQL::Language::Nodes::TypeName, union_type_extension.types.first.class
440
- assert_equal 'A', union_type_extension.types.first.name
441
- end
442
-
443
- def test_it_parses_union_type_extension_with_directives_and_union_members
444
- document = parse('
445
- extend union BagOfThings @directive = A | B
446
- ')
447
-
448
- union_type_extension = document.definitions.first
449
- assert_equal GraphQL::Language::Nodes::UnionTypeExtension, union_type_extension.class
450
- assert_equal 'BagOfThings', union_type_extension.name
451
- assert_equal [2, 15], union_type_extension.position
452
-
453
- assert_equal 1, union_type_extension.directives.length
454
- assert_equal GraphQL::Language::Nodes::Directive, union_type_extension.directives.first.class
455
- assert_equal 'directive', union_type_extension.directives.first.name
456
-
457
- assert_equal 2, union_type_extension.types.length
458
- assert_equal GraphQL::Language::Nodes::TypeName, union_type_extension.types.first.class
459
- assert_equal 'A', union_type_extension.types.first.name
460
- end
461
-
462
- def test_it_parses_union_type_extension_with_directives
463
- document = parse('
464
- extend union BagOfThings @directive
465
- ')
466
-
467
- union_type_extension = document.definitions.first
468
- assert_equal GraphQL::Language::Nodes::UnionTypeExtension, union_type_extension.class
469
- assert_equal 'BagOfThings', union_type_extension.name
470
- assert_equal [2, 15], union_type_extension.position
471
-
472
- assert_equal 1, union_type_extension.directives.length
473
- assert_equal GraphQL::Language::Nodes::Directive, union_type_extension.directives.first.class
474
- assert_equal 'directive', union_type_extension.directives.first.name
475
-
476
- assert_equal 0, union_type_extension.types.length
477
- end
478
-
479
- def test_it_parses_enum_type_extension_with_values
480
- document = parse('
481
- extend enum Status {
482
- DRAFT
483
- PUBLISHED
484
- }
485
- ')
486
-
487
- enum_type_extension = document.definitions.first
488
- assert_equal GraphQL::Language::Nodes::EnumTypeExtension, enum_type_extension.class
489
- assert_equal 'Status', enum_type_extension.name
490
- assert_equal [2, 15], enum_type_extension.position
491
-
492
- assert_equal 0, enum_type_extension.directives.length
493
-
494
- assert_equal 2, enum_type_extension.values.length
495
- assert_equal GraphQL::Language::Nodes::EnumValueDefinition, enum_type_extension.values.first.class
496
- assert_equal 'DRAFT', enum_type_extension.values.first.name
497
- end
498
-
499
- def test_it_parses_enum_type_extension_with_directives_and_values
500
- document = parse('
501
- extend enum Status @directive {
502
- DRAFT
503
- PUBLISHED
504
- }
505
- ')
506
-
507
- enum_type_extension = document.definitions.first
508
- assert_equal GraphQL::Language::Nodes::EnumTypeExtension, enum_type_extension.class
509
- assert_equal 'Status', enum_type_extension.name
510
- assert_equal [2, 15], enum_type_extension.position
511
-
512
- assert_equal 1, enum_type_extension.directives.length
513
- assert_equal GraphQL::Language::Nodes::Directive, enum_type_extension.directives.first.class
514
- assert_equal 'directive', enum_type_extension.directives.first.name
515
-
516
- assert_equal 2, enum_type_extension.values.length
517
- assert_equal GraphQL::Language::Nodes::EnumValueDefinition, enum_type_extension.values.first.class
518
- assert_equal 'DRAFT', enum_type_extension.values.first.name
519
- end
520
-
521
- def test_it_parses_enum_type_extension_with_directives
522
- document = parse('
523
- extend enum Status @directive
524
- ')
525
-
526
- enum_type_extension = document.definitions.first
527
- assert_equal GraphQL::Language::Nodes::EnumTypeExtension, enum_type_extension.class
528
- assert_equal 'Status', enum_type_extension.name
529
- assert_equal [2, 15], enum_type_extension.position
530
-
531
- assert_equal 1, enum_type_extension.directives.length
532
- assert_equal GraphQL::Language::Nodes::Directive, enum_type_extension.directives.first.class
533
- assert_equal 'directive', enum_type_extension.directives.first.name
534
-
535
- assert_equal 0, enum_type_extension.values.length
536
- end
537
-
538
- def test_it_parses_input_object_type_extension_with_fields
539
- document = parse('
540
- extend input UserInput {
541
- login: String!
542
- }
543
- ')
544
-
545
- input_object_type_extension = document.definitions.first
546
- assert_equal GraphQL::Language::Nodes::InputObjectTypeExtension, input_object_type_extension.class
547
- assert_equal 'UserInput', input_object_type_extension.name
548
- assert_equal [2, 15], input_object_type_extension.position
549
-
550
- assert_equal 1, input_object_type_extension.fields.length
551
- assert_equal GraphQL::Language::Nodes::InputValueDefinition, input_object_type_extension.fields.first.class
552
- assert_equal 'login', input_object_type_extension.fields.first.name
553
-
554
- assert_equal 0, input_object_type_extension.directives.length
555
- end
556
-
557
- def test_it_parses_input_object_type_extension_with_directives_and_fields
558
- document = parse('
559
- extend input UserInput @deprecated {
560
- login: String!
561
- }
562
- ')
563
-
564
- input_object_type_extension = document.definitions.first
565
- assert_equal GraphQL::Language::Nodes::InputObjectTypeExtension, input_object_type_extension.class
566
- assert_equal 'UserInput', input_object_type_extension.name
567
- assert_equal [2, 15], input_object_type_extension.position
568
-
569
- assert_equal 1, input_object_type_extension.fields.length
570
- assert_equal GraphQL::Language::Nodes::InputValueDefinition, input_object_type_extension.fields.first.class
571
- assert_equal 'login', input_object_type_extension.fields.first.name
572
-
573
- assert_equal 1, input_object_type_extension.directives.length
574
- assert_equal GraphQL::Language::Nodes::Directive, input_object_type_extension.directives.first.class
575
- assert_equal 'deprecated', input_object_type_extension.directives.first.name
576
- end
577
-
578
- def test_it_parses_input_object_type_extension_with_directives
579
- document = parse('
580
- extend input UserInput @deprecated
581
- ')
582
-
583
- input_object_type_extension = document.definitions.first
584
- assert_equal GraphQL::Language::Nodes::InputObjectTypeExtension, input_object_type_extension.class
585
- assert_equal 'UserInput', input_object_type_extension.name
586
- assert_equal [2, 15], input_object_type_extension.position
587
-
588
- assert_equal 0, input_object_type_extension.fields.length
589
-
590
- assert_equal 1, input_object_type_extension.directives.length
591
- assert_equal GraphQL::Language::Nodes::Directive, input_object_type_extension.directives.first.class
592
- assert_equal 'deprecated', input_object_type_extension.directives.first.name
593
- end
594
-
595
- def test_it_parses_whole_definition_with_descriptions
596
- document = parse(SCHEMA_DEFINITION_STRING)
597
-
598
- assert_equal 6, document.definitions.size
599
-
600
- schema_definition, directive_definition, enum_type_definition, object_type_definition, input_object_type_definition, interface_type_definition = document.definitions
601
-
602
- assert_equal GraphQL::Language::Nodes::SchemaDefinition, schema_definition.class
603
-
604
- assert_equal GraphQL::Language::Nodes::DirectiveDefinition, directive_definition.class
605
- assert_equal 'This is a directive', directive_definition.description
606
-
607
- assert_equal GraphQL::Language::Nodes::EnumTypeDefinition, enum_type_definition.class
608
- assert_equal "Multiline comment\n\nWith an enum", enum_type_definition.description
609
-
610
- assert_nil enum_type_definition.values[0].description
611
- assert_equal 'Not a creative color', enum_type_definition.values[1].description
612
-
613
- assert_equal GraphQL::Language::Nodes::ObjectTypeDefinition, object_type_definition.class
614
- assert_equal 'Comment without preceding space', object_type_definition.description
615
- assert_equal 'And a field to boot', object_type_definition.fields[0].description
616
-
617
- assert_equal GraphQL::Language::Nodes::InputObjectTypeDefinition, input_object_type_definition.class
618
- assert_equal 'Comment for input object types', input_object_type_definition.description
619
- assert_equal 'Color of the car', input_object_type_definition.fields[0].description
620
-
621
- assert_equal GraphQL::Language::Nodes::InterfaceTypeDefinition, interface_type_definition.class
622
- assert_equal 'Comment for interface definitions', interface_type_definition.description
623
- assert_equal 'Amount of wheels', interface_type_definition.fields[0].description
624
-
625
- brand_field = interface_type_definition.fields[1]
626
- assert_equal 1, brand_field.arguments.length
627
- assert_equal 'argument', brand_field.arguments[0].name
628
- assert_instance_of GraphQL::Language::Nodes::NullValue, brand_field.arguments[0].default_value
629
- end
630
- end
631
- end
632
-
633
- SCHEMA_DEFINITION_STRING = %|
634
- # Schema at beginning of file
635
-
636
- schema {
637
- query: Hello
638
- }
639
-
640
- # Comment between two definitions are omitted
641
-
642
- # This is a directive
643
- directive @foo(
644
- # It has an argument
645
- arg: Int
646
- ) on FIELD
647
-
648
- # Multiline comment
649
- #
650
- # With an enum
651
- enum Color {
652
- RED
653
-
654
- # Not a creative color
655
- GREEN
656
- BLUE
657
- }
658
-
659
- #Comment without preceding space
660
- type Hello {
661
- # And a field to boot
662
- str: String
663
- }
664
-
665
- # Comment for input object types
666
- input Car {
667
- # Color of the car
668
- color: String!
669
- }
670
-
671
- # Comment for interface definitions
672
- interface Vehicle {
673
- # Amount of wheels
674
- wheels: Int!
675
- brand(argument: String = null): String!
676
- }
677
-
678
- # Comment at the end of schema
679
- |
680
- end
681
- end
682
- end
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
- require "graphql/compatibility/execution_specification"
3
- require "graphql/compatibility/lazy_execution_specification"
4
- require "graphql/compatibility/query_parser_specification"
5
- require "graphql/compatibility/schema_parser_specification"