graphql 1.9.11 → 1.9.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (286) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/analysis/ast/query_complexity.rb +0 -8
  3. data/lib/graphql/analysis/ast/query_depth.rb +0 -8
  4. data/lib/graphql/analysis/ast/visitor.rb +26 -24
  5. data/lib/graphql/execution.rb +1 -0
  6. data/lib/graphql/execution/errors.rb +60 -0
  7. data/lib/graphql/execution/interpreter/runtime.rb +21 -17
  8. data/lib/graphql/static_validation/rules/fields_will_merge.rb +15 -8
  9. data/lib/graphql/version.rb +1 -1
  10. metadata +5 -556
  11. data/spec/dummy/Gemfile +0 -12
  12. data/spec/dummy/README.md +0 -24
  13. data/spec/dummy/Rakefile +0 -7
  14. data/spec/dummy/app/assets/config/manifest.js +0 -1
  15. data/spec/dummy/app/assets/javascripts/application.js +0 -66
  16. data/spec/dummy/app/channels/application_cable/channel.rb +0 -5
  17. data/spec/dummy/app/channels/application_cable/connection.rb +0 -5
  18. data/spec/dummy/app/channels/graphql_channel.rb +0 -116
  19. data/spec/dummy/app/controllers/application_controller.rb +0 -4
  20. data/spec/dummy/app/controllers/pages_controller.rb +0 -5
  21. data/spec/dummy/app/helpers/application_helper.rb +0 -3
  22. data/spec/dummy/app/jobs/application_job.rb +0 -3
  23. data/spec/dummy/app/views/layouts/application.html.erb +0 -12
  24. data/spec/dummy/app/views/pages/show.html +0 -16
  25. data/spec/dummy/bin/bundle +0 -4
  26. data/spec/dummy/bin/rails +0 -5
  27. data/spec/dummy/bin/rake +0 -5
  28. data/spec/dummy/bin/setup +0 -31
  29. data/spec/dummy/bin/update +0 -27
  30. data/spec/dummy/bin/yarn +0 -12
  31. data/spec/dummy/config.ru +0 -6
  32. data/spec/dummy/config/application.rb +0 -30
  33. data/spec/dummy/config/boot.rb +0 -4
  34. data/spec/dummy/config/cable.yml +0 -10
  35. data/spec/dummy/config/environment.rb +0 -6
  36. data/spec/dummy/config/environments/development.rb +0 -40
  37. data/spec/dummy/config/environments/production.rb +0 -76
  38. data/spec/dummy/config/environments/test.rb +0 -37
  39. data/spec/dummy/config/initializers/application_controller_renderer.rb +0 -9
  40. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -8
  41. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -6
  42. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -5
  43. data/spec/dummy/config/initializers/inflections.rb +0 -17
  44. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  45. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -10
  46. data/spec/dummy/config/locales/en.yml +0 -33
  47. data/spec/dummy/config/puma.rb +0 -57
  48. data/spec/dummy/config/routes.rb +0 -4
  49. data/spec/dummy/config/secrets.yml +0 -32
  50. data/spec/dummy/package.json +0 -5
  51. data/spec/dummy/public/404.html +0 -67
  52. data/spec/dummy/public/422.html +0 -67
  53. data/spec/dummy/public/500.html +0 -66
  54. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  55. data/spec/dummy/public/apple-touch-icon.png +0 -0
  56. data/spec/dummy/public/favicon.ico +0 -0
  57. data/spec/dummy/public/robots.txt +0 -1
  58. data/spec/dummy/test/application_system_test_case.rb +0 -6
  59. data/spec/dummy/test/system/action_cable_subscription_test.rb +0 -45
  60. data/spec/dummy/test/test_helper.rb +0 -4
  61. data/spec/fixtures/upgrader/account.original.rb +0 -19
  62. data/spec/fixtures/upgrader/account.transformed.rb +0 -20
  63. data/spec/fixtures/upgrader/blame_range.original.rb +0 -43
  64. data/spec/fixtures/upgrader/blame_range.transformed.rb +0 -30
  65. data/spec/fixtures/upgrader/date_time.original.rb +0 -24
  66. data/spec/fixtures/upgrader/date_time.transformed.rb +0 -23
  67. data/spec/fixtures/upgrader/delete_project.original.rb +0 -28
  68. data/spec/fixtures/upgrader/delete_project.transformed.rb +0 -27
  69. data/spec/fixtures/upgrader/gist_order_field.original.rb +0 -14
  70. data/spec/fixtures/upgrader/gist_order_field.transformed.rb +0 -13
  71. data/spec/fixtures/upgrader/increment_count.original.rb +0 -59
  72. data/spec/fixtures/upgrader/increment_count.transformed.rb +0 -50
  73. data/spec/fixtures/upgrader/mutation.original.rb +0 -28
  74. data/spec/fixtures/upgrader/mutation.transformed.rb +0 -28
  75. data/spec/fixtures/upgrader/photo.original.rb +0 -10
  76. data/spec/fixtures/upgrader/photo.transformed.rb +0 -12
  77. data/spec/fixtures/upgrader/release_order.original.rb +0 -15
  78. data/spec/fixtures/upgrader/release_order.transformed.rb +0 -14
  79. data/spec/fixtures/upgrader/starrable.original.rb +0 -49
  80. data/spec/fixtures/upgrader/starrable.transformed.rb +0 -46
  81. data/spec/fixtures/upgrader/subscribable.original.rb +0 -55
  82. data/spec/fixtures/upgrader/subscribable.transformed.rb +0 -51
  83. data/spec/fixtures/upgrader/type_x.original.rb +0 -65
  84. data/spec/fixtures/upgrader/type_x.transformed.rb +0 -56
  85. data/spec/graphql/analysis/analyze_query_spec.rb +0 -261
  86. data/spec/graphql/analysis/ast/field_usage_spec.rb +0 -51
  87. data/spec/graphql/analysis/ast/max_query_complexity_spec.rb +0 -120
  88. data/spec/graphql/analysis/ast/max_query_depth_spec.rb +0 -134
  89. data/spec/graphql/analysis/ast/query_complexity_spec.rb +0 -299
  90. data/spec/graphql/analysis/ast/query_depth_spec.rb +0 -108
  91. data/spec/graphql/analysis/ast_spec.rb +0 -296
  92. data/spec/graphql/analysis/field_usage_spec.rb +0 -62
  93. data/spec/graphql/analysis/max_query_complexity_spec.rb +0 -102
  94. data/spec/graphql/analysis/max_query_depth_spec.rb +0 -103
  95. data/spec/graphql/analysis/query_complexity_spec.rb +0 -301
  96. data/spec/graphql/analysis/query_depth_spec.rb +0 -81
  97. data/spec/graphql/argument_spec.rb +0 -159
  98. data/spec/graphql/authorization_spec.rb +0 -974
  99. data/spec/graphql/backtrace_spec.rb +0 -206
  100. data/spec/graphql/base_type_spec.rb +0 -171
  101. data/spec/graphql/boolean_type_spec.rb +0 -21
  102. data/spec/graphql/compatibility/execution_specification_spec.rb +0 -4
  103. data/spec/graphql/compatibility/lazy_execution_specification_spec.rb +0 -4
  104. data/spec/graphql/compatibility/query_parser_specification_spec.rb +0 -6
  105. data/spec/graphql/compatibility/schema_parser_specification_spec.rb +0 -6
  106. data/spec/graphql/define/assign_argument_spec.rb +0 -61
  107. data/spec/graphql/define/instance_definable_spec.rb +0 -203
  108. data/spec/graphql/directive/skip_directive_spec.rb +0 -9
  109. data/spec/graphql/directive_spec.rb +0 -295
  110. data/spec/graphql/enum_type_spec.rb +0 -158
  111. data/spec/graphql/execution/execute_spec.rb +0 -303
  112. data/spec/graphql/execution/instrumentation_spec.rb +0 -212
  113. data/spec/graphql/execution/interpreter_spec.rb +0 -485
  114. data/spec/graphql/execution/lazy/lazy_method_map_spec.rb +0 -57
  115. data/spec/graphql/execution/lazy_spec.rb +0 -247
  116. data/spec/graphql/execution/lookahead_spec.rb +0 -390
  117. data/spec/graphql/execution/multiplex_spec.rb +0 -222
  118. data/spec/graphql/execution/typecast_spec.rb +0 -47
  119. data/spec/graphql/execution_error_spec.rb +0 -329
  120. data/spec/graphql/field_spec.rb +0 -246
  121. data/spec/graphql/float_type_spec.rb +0 -16
  122. data/spec/graphql/function_spec.rb +0 -152
  123. data/spec/graphql/id_type_spec.rb +0 -33
  124. data/spec/graphql/input_object_type_spec.rb +0 -25
  125. data/spec/graphql/int_type_spec.rb +0 -35
  126. data/spec/graphql/interface_type_spec.rb +0 -196
  127. data/spec/graphql/internal_representation/print_spec.rb +0 -41
  128. data/spec/graphql/internal_representation/rewrite_spec.rb +0 -381
  129. data/spec/graphql/introspection/directive_type_spec.rb +0 -66
  130. data/spec/graphql/introspection/input_value_type_spec.rb +0 -144
  131. data/spec/graphql/introspection/introspection_query_spec.rb +0 -64
  132. data/spec/graphql/introspection/schema_type_spec.rb +0 -57
  133. data/spec/graphql/introspection/type_type_spec.rb +0 -155
  134. data/spec/graphql/language/block_string_spec.rb +0 -70
  135. data/spec/graphql/language/definition_slice_spec.rb +0 -226
  136. data/spec/graphql/language/document_from_schema_definition_spec.rb +0 -770
  137. data/spec/graphql/language/equality_spec.rb +0 -84
  138. data/spec/graphql/language/generation_spec.rb +0 -38
  139. data/spec/graphql/language/lexer_spec.rb +0 -153
  140. data/spec/graphql/language/nodes_spec.rb +0 -67
  141. data/spec/graphql/language/parser_spec.rb +0 -183
  142. data/spec/graphql/language/printer_spec.rb +0 -215
  143. data/spec/graphql/language/visitor_spec.rb +0 -419
  144. data/spec/graphql/list_type_spec.rb +0 -57
  145. data/spec/graphql/non_null_type_spec.rb +0 -48
  146. data/spec/graphql/object_type_spec.rb +0 -197
  147. data/spec/graphql/query/arguments_spec.rb +0 -346
  148. data/spec/graphql/query/context_spec.rb +0 -292
  149. data/spec/graphql/query/executor_spec.rb +0 -341
  150. data/spec/graphql/query/literal_input_spec.rb +0 -91
  151. data/spec/graphql/query/result_spec.rb +0 -29
  152. data/spec/graphql/query/serial_execution/value_resolution_spec.rb +0 -109
  153. data/spec/graphql/query_spec.rb +0 -803
  154. data/spec/graphql/rake_task_spec.rb +0 -59
  155. data/spec/graphql/scalar_type_spec.rb +0 -66
  156. data/spec/graphql/schema/argument_spec.rb +0 -186
  157. data/spec/graphql/schema/build_from_definition_spec.rb +0 -1197
  158. data/spec/graphql/schema/catchall_middleware_spec.rb +0 -32
  159. data/spec/graphql/schema/directive/feature_spec.rb +0 -81
  160. data/spec/graphql/schema/directive/transform_spec.rb +0 -39
  161. data/spec/graphql/schema/enum_spec.rb +0 -83
  162. data/spec/graphql/schema/enum_value_spec.rb +0 -24
  163. data/spec/graphql/schema/field_extension_spec.rb +0 -159
  164. data/spec/graphql/schema/field_spec.rb +0 -319
  165. data/spec/graphql/schema/finder_spec.rb +0 -135
  166. data/spec/graphql/schema/input_object_spec.rb +0 -421
  167. data/spec/graphql/schema/instrumentation_spec.rb +0 -43
  168. data/spec/graphql/schema/interface_spec.rb +0 -215
  169. data/spec/graphql/schema/introspection_system_spec.rb +0 -80
  170. data/spec/graphql/schema/list_spec.rb +0 -73
  171. data/spec/graphql/schema/loader_spec.rb +0 -350
  172. data/spec/graphql/schema/member/accepts_definition_spec.rb +0 -115
  173. data/spec/graphql/schema/member/build_type_spec.rb +0 -63
  174. data/spec/graphql/schema/member/scoped_spec.rb +0 -217
  175. data/spec/graphql/schema/member/type_system_helpers_spec.rb +0 -63
  176. data/spec/graphql/schema/middleware_chain_spec.rb +0 -57
  177. data/spec/graphql/schema/mutation_spec.rb +0 -150
  178. data/spec/graphql/schema/non_null_spec.rb +0 -46
  179. data/spec/graphql/schema/object_spec.rb +0 -355
  180. data/spec/graphql/schema/printer_spec.rb +0 -883
  181. data/spec/graphql/schema/relay_classic_mutation_spec.rb +0 -252
  182. data/spec/graphql/schema/rescue_middleware_spec.rb +0 -88
  183. data/spec/graphql/schema/resolver_spec.rb +0 -743
  184. data/spec/graphql/schema/scalar_spec.rb +0 -101
  185. data/spec/graphql/schema/subscription_spec.rb +0 -505
  186. data/spec/graphql/schema/timeout_middleware_spec.rb +0 -188
  187. data/spec/graphql/schema/timeout_spec.rb +0 -206
  188. data/spec/graphql/schema/traversal_spec.rb +0 -222
  189. data/spec/graphql/schema/type_expression_spec.rb +0 -39
  190. data/spec/graphql/schema/union_spec.rb +0 -72
  191. data/spec/graphql/schema/unique_within_type_spec.rb +0 -44
  192. data/spec/graphql/schema/validation_spec.rb +0 -355
  193. data/spec/graphql/schema/warden_spec.rb +0 -926
  194. data/spec/graphql/schema_spec.rb +0 -169
  195. data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +0 -466
  196. data/spec/graphql/static_validation/rules/argument_names_are_unique_spec.rb +0 -44
  197. data/spec/graphql/static_validation/rules/arguments_are_defined_spec.rb +0 -112
  198. data/spec/graphql/static_validation/rules/directives_are_defined_spec.rb +0 -35
  199. data/spec/graphql/static_validation/rules/directives_are_in_valid_locations_spec.rb +0 -42
  200. data/spec/graphql/static_validation/rules/fields_are_defined_on_type_spec.rb +0 -167
  201. data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +0 -66
  202. data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +0 -740
  203. data/spec/graphql/static_validation/rules/fragment_names_are_unique_spec.rb +0 -28
  204. data/spec/graphql/static_validation/rules/fragment_spreads_are_possible_spec.rb +0 -52
  205. data/spec/graphql/static_validation/rules/fragment_types_exist_spec.rb +0 -42
  206. data/spec/graphql/static_validation/rules/fragments_are_finite_spec.rb +0 -123
  207. data/spec/graphql/static_validation/rules/fragments_are_named_spec.rb +0 -24
  208. data/spec/graphql/static_validation/rules/fragments_are_on_composite_types_spec.rb +0 -56
  209. data/spec/graphql/static_validation/rules/fragments_are_used_spec.rb +0 -61
  210. data/spec/graphql/static_validation/rules/mutation_root_exists_spec.rb +0 -39
  211. data/spec/graphql/static_validation/rules/no_definitions_are_present_spec.rb +0 -62
  212. data/spec/graphql/static_validation/rules/operation_names_are_valid_spec.rb +0 -82
  213. data/spec/graphql/static_validation/rules/required_arguments_are_present_spec.rb +0 -98
  214. data/spec/graphql/static_validation/rules/required_input_object_attributes_are_present_spec.rb +0 -86
  215. data/spec/graphql/static_validation/rules/subscription_root_exists_spec.rb +0 -34
  216. data/spec/graphql/static_validation/rules/unique_directives_per_location_spec.rb +0 -188
  217. data/spec/graphql/static_validation/rules/variable_default_values_are_correctly_typed_spec.rb +0 -196
  218. data/spec/graphql/static_validation/rules/variable_names_are_unique_spec.rb +0 -23
  219. data/spec/graphql/static_validation/rules/variable_usages_are_allowed_spec.rb +0 -236
  220. data/spec/graphql/static_validation/rules/variables_are_input_types_spec.rb +0 -78
  221. data/spec/graphql/static_validation/rules/variables_are_used_and_defined_spec.rb +0 -81
  222. data/spec/graphql/static_validation/type_stack_spec.rb +0 -29
  223. data/spec/graphql/static_validation/validator_spec.rb +0 -204
  224. data/spec/graphql/string_type_spec.rb +0 -80
  225. data/spec/graphql/subscriptions/serialize_spec.rb +0 -49
  226. data/spec/graphql/subscriptions_spec.rb +0 -540
  227. data/spec/graphql/tracing/new_relic_tracing_spec.rb +0 -84
  228. data/spec/graphql/tracing/platform_tracing_spec.rb +0 -141
  229. data/spec/graphql/tracing/prometheus_tracing_spec.rb +0 -42
  230. data/spec/graphql/tracing/scout_tracing_spec.rb +0 -17
  231. data/spec/graphql/tracing/skylight_tracing_spec.rb +0 -63
  232. data/spec/graphql/tracing_spec.rb +0 -52
  233. data/spec/graphql/types/big_int_spec.rb +0 -24
  234. data/spec/graphql/types/iso_8601_date_time_spec.rb +0 -137
  235. data/spec/graphql/types/relay/base_edge_spec.rb +0 -33
  236. data/spec/graphql/union_type_spec.rb +0 -211
  237. data/spec/graphql/upgrader/member_spec.rb +0 -583
  238. data/spec/graphql/upgrader/schema_spec.rb +0 -82
  239. data/spec/integration/mongoid/graphql/relay/mongo_relation_connection_spec.rb +0 -528
  240. data/spec/integration/mongoid/spec_helper.rb +0 -2
  241. data/spec/integration/mongoid/star_trek/data.rb +0 -126
  242. data/spec/integration/mongoid/star_trek/schema.rb +0 -424
  243. data/spec/integration/rails/data.rb +0 -110
  244. data/spec/integration/rails/generators/base_generator_test.rb +0 -7
  245. data/spec/integration/rails/generators/graphql/enum_generator_spec.rb +0 -30
  246. data/spec/integration/rails/generators/graphql/install_generator_spec.rb +0 -238
  247. data/spec/integration/rails/generators/graphql/interface_generator_spec.rb +0 -34
  248. data/spec/integration/rails/generators/graphql/loader_generator_spec.rb +0 -59
  249. data/spec/integration/rails/generators/graphql/mutation_generator_spec.rb +0 -71
  250. data/spec/integration/rails/generators/graphql/object_generator_spec.rb +0 -54
  251. data/spec/integration/rails/generators/graphql/scalar_generator_spec.rb +0 -28
  252. data/spec/integration/rails/generators/graphql/union_generator_spec.rb +0 -67
  253. data/spec/integration/rails/graphql/input_object_spec.rb +0 -19
  254. data/spec/integration/rails/graphql/input_object_type_spec.rb +0 -364
  255. data/spec/integration/rails/graphql/query/variables_spec.rb +0 -375
  256. data/spec/integration/rails/graphql/relay/array_connection_spec.rb +0 -309
  257. data/spec/integration/rails/graphql/relay/base_connection_spec.rb +0 -101
  258. data/spec/integration/rails/graphql/relay/connection_instrumentation_spec.rb +0 -80
  259. data/spec/integration/rails/graphql/relay/connection_resolve_spec.rb +0 -79
  260. data/spec/integration/rails/graphql/relay/connection_type_spec.rb +0 -106
  261. data/spec/integration/rails/graphql/relay/edge_spec.rb +0 -10
  262. data/spec/integration/rails/graphql/relay/mutation_spec.rb +0 -387
  263. data/spec/integration/rails/graphql/relay/node_spec.rb +0 -263
  264. data/spec/integration/rails/graphql/relay/page_info_spec.rb +0 -111
  265. data/spec/integration/rails/graphql/relay/range_add_spec.rb +0 -117
  266. data/spec/integration/rails/graphql/relay/relation_connection_spec.rb +0 -837
  267. data/spec/integration/rails/graphql/schema_spec.rb +0 -507
  268. data/spec/integration/rails/graphql/tracing/active_support_notifications_tracing_spec.rb +0 -62
  269. data/spec/integration/rails/spec_helper.rb +0 -25
  270. data/spec/spec_helper.rb +0 -116
  271. data/spec/support/dummy/data.rb +0 -45
  272. data/spec/support/dummy/schema.rb +0 -519
  273. data/spec/support/error_bubbling_helpers.rb +0 -23
  274. data/spec/support/global_id.rb +0 -23
  275. data/spec/support/jazz.rb +0 -778
  276. data/spec/support/lazy_helpers.rb +0 -192
  277. data/spec/support/magic_cards/schema.graphql +0 -33
  278. data/spec/support/minimum_input_object.rb +0 -21
  279. data/spec/support/new_relic.rb +0 -27
  280. data/spec/support/parser/filename_example.graphql +0 -5
  281. data/spec/support/parser/filename_example_error_1.graphql +0 -4
  282. data/spec/support/parser/filename_example_error_2.graphql +0 -5
  283. data/spec/support/parser/filename_example_invalid_utf8.graphql +0 -1
  284. data/spec/support/skylight.rb +0 -39
  285. data/spec/support/star_wars/schema.rb +0 -464
  286. data/spec/support/static_validation_helpers.rb +0 -32
@@ -1,883 +0,0 @@
1
- # frozen_string_literal: true
2
- require "spec_helper"
3
-
4
- describe GraphQL::Schema::Printer do
5
- let(:schema) {
6
- node_type = GraphQL::InterfaceType.define do
7
- name "Node"
8
-
9
- field :id, !types.ID
10
- end
11
-
12
- choice_type = GraphQL::EnumType.define do
13
- name "Choice"
14
-
15
- value "FOO", value: :foo
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
22
- value "WOZ", deprecation_reason: GraphQL::Directive::DEFAULT_DEPRECATION_REASON
23
- end
24
-
25
- sub_input_type = GraphQL::InputObjectType.define do
26
- name "Sub"
27
- description "Test"
28
- input_field :string, types.String, 'Something'
29
- input_field :int, types.Int, 'Something'
30
- end
31
-
32
- variant_input_type = GraphQL::InputObjectType.define do
33
- name "Varied"
34
- input_field :id, types.ID
35
- input_field :int, types.Int
36
- input_field :float, types.Float
37
- input_field :bool, types.Boolean
38
- input_field :enum, choice_type, default_value: :foo
39
- input_field :sub, types[sub_input_type]
40
- end
41
-
42
- comment_type = GraphQL::ObjectType.define do
43
- name "Comment"
44
- description "A blog comment"
45
- interfaces [node_type]
46
-
47
- field :id, !types.ID
48
- end
49
-
50
- post_type = GraphQL::ObjectType.define do
51
- name "Post"
52
- description "A blog post"
53
-
54
- field :id, !types.ID
55
- field :title, !types.String
56
- field :body, !types.String
57
- field :comments, types[!comment_type]
58
- field :comments_count, !types.Int, deprecation_reason: 'Use "comments".'
59
- end
60
-
61
- audio_type = GraphQL::ObjectType.define do
62
- name "Audio"
63
-
64
- field :id, !types.ID
65
- field :name, !types.String
66
- field :duration, !types.Int
67
- end
68
-
69
- image_type = GraphQL::ObjectType.define do
70
- name "Image"
71
-
72
- field :id, !types.ID
73
- field :name, !types.String
74
- field :width, !types.Int
75
- field :height, !types.Int
76
- end
77
-
78
- media_union_type = GraphQL::UnionType.define do
79
- name "Media"
80
- description "Media objects"
81
-
82
- possible_types [image_type, audio_type]
83
- end
84
-
85
- query_root = GraphQL::ObjectType.define do
86
- name "Query"
87
- description "The query root of this schema"
88
-
89
- field :post do
90
- type post_type
91
- argument :id, !types.ID, 'Post ID'
92
- argument :varied, variant_input_type, default_value: { id: "123", int: 234, float: 2.3, enum: :foo, sub: [{ string: "str" }] }
93
- argument :variedWithNulls, variant_input_type, default_value: { id: nil, int: nil, float: nil, enum: nil, sub: nil }
94
- resolve ->(obj, args, ctx) { Post.find(args["id"]) }
95
- end
96
- end
97
-
98
- create_post_mutation = GraphQL::Relay::Mutation.define do
99
- name "CreatePost"
100
- description "Create a blog post"
101
-
102
- input_field :title, !types.String
103
- input_field :body, !types.String
104
-
105
- return_field :post, post_type
106
-
107
- resolve ->(_, _, _) { }
108
- end
109
-
110
- mutation_root = GraphQL::ObjectType.define do
111
- name "Mutation"
112
-
113
- field :createPost, field: create_post_mutation.field
114
- end
115
-
116
- subscription_root = GraphQL::ObjectType.define do
117
- name "Subscription"
118
-
119
- field :post do
120
- type post_type
121
- argument :id, !types.ID
122
- resolve ->(_, _, _) { }
123
- end
124
- end
125
-
126
- GraphQL::Schema.define(
127
- query: query_root,
128
- mutation: mutation_root,
129
- subscription: subscription_root,
130
- resolve_type: ->(a,b,c) { :pass },
131
- orphan_types: [media_union_type]
132
- )
133
- }
134
-
135
- describe ".print_introspection_schema" do
136
- it "returns the schema as a string for the introspection types" do
137
- # From https://github.com/graphql/graphql-js/blob/6a0e00fe46951767287f2cc62e1a10b167b2eaa6/src/utilities/__tests__/schemaPrinter-test.js#L599
138
- expected = <<SCHEMA
139
- schema {
140
- query: Root
141
- }
142
-
143
- """
144
- Marks an element of a GraphQL schema as no longer supported.
145
- """
146
- directive @deprecated(
147
- """
148
- Explains why this element was deprecated, usually also including a suggestion
149
- for how to access supported similar data. Formatted in
150
- [Markdown](https://daringfireball.net/projects/markdown/).
151
- """
152
- reason: String = "No longer supported"
153
- ) on FIELD_DEFINITION | ENUM_VALUE
154
-
155
- """
156
- Directs the executor to include this field or fragment only when the `if` argument is true.
157
- """
158
- directive @include(
159
- """
160
- Included when true.
161
- """
162
- if: Boolean!
163
- ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
164
-
165
- """
166
- Directs the executor to skip this field or fragment when the `if` argument is true.
167
- """
168
- directive @skip(
169
- """
170
- Skipped when true.
171
- """
172
- if: Boolean!
173
- ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
174
-
175
- """
176
- A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
177
-
178
- In some cases, you need to provide options to alter GraphQL's execution behavior
179
- in ways field arguments will not suffice, such as conditionally including or
180
- skipping a field. Directives provide this by describing additional information
181
- to the executor.
182
- """
183
- type __Directive {
184
- args: [__InputValue!]!
185
- description: String
186
- locations: [__DirectiveLocation!]!
187
- name: String!
188
- onField: Boolean! @deprecated(reason: "Use `locations`.")
189
- onFragment: Boolean! @deprecated(reason: "Use `locations`.")
190
- onOperation: Boolean! @deprecated(reason: "Use `locations`.")
191
- }
192
-
193
- """
194
- A Directive can be adjacent to many parts of the GraphQL language, a
195
- __DirectiveLocation describes one such possible adjacencies.
196
- """
197
- enum __DirectiveLocation {
198
- """
199
- Location adjacent to an argument definition.
200
- """
201
- ARGUMENT_DEFINITION
202
-
203
- """
204
- Location adjacent to an enum definition.
205
- """
206
- ENUM
207
-
208
- """
209
- Location adjacent to an enum value definition.
210
- """
211
- ENUM_VALUE
212
-
213
- """
214
- Location adjacent to a field.
215
- """
216
- FIELD
217
-
218
- """
219
- Location adjacent to a field definition.
220
- """
221
- FIELD_DEFINITION
222
-
223
- """
224
- Location adjacent to a fragment definition.
225
- """
226
- FRAGMENT_DEFINITION
227
-
228
- """
229
- Location adjacent to a fragment spread.
230
- """
231
- FRAGMENT_SPREAD
232
-
233
- """
234
- Location adjacent to an inline fragment.
235
- """
236
- INLINE_FRAGMENT
237
-
238
- """
239
- Location adjacent to an input object field definition.
240
- """
241
- INPUT_FIELD_DEFINITION
242
-
243
- """
244
- Location adjacent to an input object type definition.
245
- """
246
- INPUT_OBJECT
247
-
248
- """
249
- Location adjacent to an interface definition.
250
- """
251
- INTERFACE
252
-
253
- """
254
- Location adjacent to a mutation operation.
255
- """
256
- MUTATION
257
-
258
- """
259
- Location adjacent to an object type definition.
260
- """
261
- OBJECT
262
-
263
- """
264
- Location adjacent to a query operation.
265
- """
266
- QUERY
267
-
268
- """
269
- Location adjacent to a scalar definition.
270
- """
271
- SCALAR
272
-
273
- """
274
- Location adjacent to a schema definition.
275
- """
276
- SCHEMA
277
-
278
- """
279
- Location adjacent to a subscription operation.
280
- """
281
- SUBSCRIPTION
282
-
283
- """
284
- Location adjacent to a union definition.
285
- """
286
- UNION
287
- }
288
-
289
- """
290
- One possible value for a given Enum. Enum values are unique values, not a
291
- placeholder for a string or numeric value. However an Enum value is returned in
292
- a JSON response as a string.
293
- """
294
- type __EnumValue {
295
- deprecationReason: String
296
- description: String
297
- isDeprecated: Boolean!
298
- name: String!
299
- }
300
-
301
- """
302
- Object and Interface types are described by a list of Fields, each of which has
303
- a name, potentially a list of arguments, and a return type.
304
- """
305
- type __Field {
306
- args: [__InputValue!]!
307
- deprecationReason: String
308
- description: String
309
- isDeprecated: Boolean!
310
- name: String!
311
- type: __Type!
312
- }
313
-
314
- """
315
- Arguments provided to Fields or Directives and the input fields of an
316
- InputObject are represented as Input Values which describe their type and
317
- optionally a default value.
318
- """
319
- type __InputValue {
320
- """
321
- A GraphQL-formatted string representing the default value for this input value.
322
- """
323
- defaultValue: String
324
- description: String
325
- name: String!
326
- type: __Type!
327
- }
328
-
329
- """
330
- A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all
331
- available types and directives on the server, as well as the entry points for
332
- query, mutation, and subscription operations.
333
- """
334
- type __Schema {
335
- """
336
- A list of all directives supported by this server.
337
- """
338
- directives: [__Directive!]!
339
-
340
- """
341
- If this server supports mutation, the type that mutation operations will be rooted at.
342
- """
343
- mutationType: __Type
344
-
345
- """
346
- The type that query operations will be rooted at.
347
- """
348
- queryType: __Type!
349
-
350
- """
351
- If this server support subscription, the type that subscription operations will be rooted at.
352
- """
353
- subscriptionType: __Type
354
-
355
- """
356
- A list of all types supported by this server.
357
- """
358
- types: [__Type!]!
359
- }
360
-
361
- """
362
- The fundamental unit of any GraphQL Schema is the type. There are many kinds of
363
- types in GraphQL as represented by the `__TypeKind` enum.
364
-
365
- Depending on the kind of a type, certain fields describe information about that
366
- type. Scalar types provide no information beyond a name and description, while
367
- Enum types provide their values. Object and Interface types provide the fields
368
- they describe. Abstract types, Union and Interface, provide the Object types
369
- possible at runtime. List and NonNull types compose other types.
370
- """
371
- type __Type {
372
- description: String
373
- enumValues(includeDeprecated: Boolean = false): [__EnumValue!]
374
- fields(includeDeprecated: Boolean = false): [__Field!]
375
- inputFields: [__InputValue!]
376
- interfaces: [__Type!]
377
- kind: __TypeKind!
378
- name: String
379
- ofType: __Type
380
- possibleTypes: [__Type!]
381
- }
382
-
383
- """
384
- An enum describing what kind of type a given `__Type` is.
385
- """
386
- enum __TypeKind {
387
- """
388
- Indicates this type is an enum. `enumValues` is a valid field.
389
- """
390
- ENUM
391
-
392
- """
393
- Indicates this type is an input object. `inputFields` is a valid field.
394
- """
395
- INPUT_OBJECT
396
-
397
- """
398
- Indicates this type is an interface. `fields` and `possibleTypes` are valid fields.
399
- """
400
- INTERFACE
401
-
402
- """
403
- Indicates this type is a list. `ofType` is a valid field.
404
- """
405
- LIST
406
-
407
- """
408
- Indicates this type is a non-null. `ofType` is a valid field.
409
- """
410
- NON_NULL
411
-
412
- """
413
- Indicates this type is an object. `fields` and `interfaces` are valid fields.
414
- """
415
- OBJECT
416
-
417
- """
418
- Indicates this type is a scalar.
419
- """
420
- SCALAR
421
-
422
- """
423
- Indicates this type is a union. `possibleTypes` is a valid field.
424
- """
425
- UNION
426
- }
427
- SCHEMA
428
- assert_equal expected.chomp, GraphQL::Schema::Printer.print_introspection_schema
429
- end
430
- end
431
-
432
- describe ".print_schema" do
433
- it "includes schema definition when query root name doesn't match convention" do
434
- custom_query = schema.query.redefine(name: "MyQueryRoot")
435
- custom_schema = schema.redefine(query: custom_query)
436
-
437
- expected = <<SCHEMA
438
- schema {
439
- query: MyQueryRoot
440
- mutation: Mutation
441
- subscription: Subscription
442
- }
443
- SCHEMA
444
- assert_match expected, GraphQL::Schema::Printer.print_schema(custom_schema)
445
- end
446
-
447
- it "includes schema definition when mutation root name doesn't match convention" do
448
- custom_mutation = schema.mutation.redefine(name: "MyMutationRoot")
449
- custom_schema = schema.redefine(mutation: custom_mutation)
450
-
451
- expected = <<SCHEMA
452
- schema {
453
- query: Query
454
- mutation: MyMutationRoot
455
- subscription: Subscription
456
- }
457
- SCHEMA
458
-
459
- assert_match expected, GraphQL::Schema::Printer.print_schema(custom_schema)
460
- end
461
-
462
- it "includes schema definition when subscription root name doesn't match convention" do
463
- custom_subscription = schema.subscription.redefine(name: "MySubscriptionRoot")
464
- custom_schema = schema.redefine(subscription: custom_subscription)
465
-
466
- expected = <<SCHEMA
467
- schema {
468
- query: Query
469
- mutation: Mutation
470
- subscription: MySubscriptionRoot
471
- }
472
- SCHEMA
473
-
474
- assert_match expected, GraphQL::Schema::Printer.print_schema(custom_schema)
475
- end
476
-
477
- it "returns the schema as a string for the defined types" do
478
- expected = <<SCHEMA
479
- type Audio {
480
- duration: Int!
481
- id: ID!
482
- name: String!
483
- }
484
-
485
- enum Choice {
486
- BAR
487
- BAZ @deprecated(reason: "Use \\\"BAR\\\" instead.\\n\\nIt's the replacement for this value.\\n")
488
- FOO
489
- WOZ @deprecated
490
- }
491
-
492
- """
493
- A blog comment
494
- """
495
- type Comment implements Node {
496
- id: ID!
497
- }
498
-
499
- """
500
- Autogenerated input type of CreatePost
501
- """
502
- input CreatePostInput {
503
- body: String!
504
-
505
- """
506
- A unique identifier for the client performing the mutation.
507
- """
508
- clientMutationId: String
509
- title: String!
510
- }
511
-
512
- """
513
- Autogenerated return type of CreatePost
514
- """
515
- type CreatePostPayload {
516
- """
517
- A unique identifier for the client performing the mutation.
518
- """
519
- clientMutationId: String
520
- post: Post
521
- }
522
-
523
- type Image {
524
- height: Int!
525
- id: ID!
526
- name: String!
527
- width: Int!
528
- }
529
-
530
- """
531
- Media objects
532
- """
533
- union Media = Audio | Image
534
-
535
- type Mutation {
536
- """
537
- Create a blog post
538
- """
539
- createPost(input: CreatePostInput!): CreatePostPayload
540
- }
541
-
542
- interface Node {
543
- id: ID!
544
- }
545
-
546
- """
547
- A blog post
548
- """
549
- type Post {
550
- body: String!
551
- comments: [Comment!]
552
- comments_count: Int! @deprecated(reason: "Use \\\"comments\\\".")
553
- id: ID!
554
- title: String!
555
- }
556
-
557
- """
558
- The query root of this schema
559
- """
560
- type Query {
561
- post(
562
- """
563
- Post ID
564
- """
565
- id: ID!
566
- varied: Varied = {id: "123", int: 234, float: 2.3, enum: FOO, sub: [{string: "str"}]}
567
- variedWithNulls: Varied = {id: null, int: null, float: null, enum: null, sub: null}
568
- ): Post
569
- }
570
-
571
- """
572
- Test
573
- """
574
- input Sub {
575
- """
576
- Something
577
- """
578
- int: Int
579
-
580
- """
581
- Something
582
- """
583
- string: String
584
- }
585
-
586
- type Subscription {
587
- post(id: ID!): Post
588
- }
589
-
590
- input Varied {
591
- bool: Boolean
592
- enum: Choice = FOO
593
- float: Float
594
- id: ID
595
- int: Int
596
- sub: [Sub]
597
- }
598
- SCHEMA
599
-
600
- assert_equal expected.chomp, GraphQL::Schema::Printer.print_schema(schema)
601
- end
602
-
603
- it 'prints a schema without directives' do
604
- query_type = Class.new(GraphQL::Schema::Object) do
605
- graphql_name 'Query'
606
-
607
- field :foobar, Integer, null: false
608
-
609
- def foobar
610
- 152
611
- end
612
- end
613
-
614
- schema = Class.new(GraphQL::Schema) do
615
- query query_type
616
- end
617
-
618
- expected = "type Query {\n foobar: Int!\n}"
619
- assert_equal expected, GraphQL::Schema::Printer.new(schema).print_schema
620
- end
621
- end
622
-
623
- it "applies an `only` filter" do
624
- expected = <<SCHEMA
625
- enum Choice {
626
- BAR
627
- FOO
628
- }
629
-
630
- type Subscription {
631
- }
632
-
633
- input Varied {
634
- bool: Boolean
635
- enum: Choice = FOO
636
- float: Float
637
- int: Int
638
- }
639
- SCHEMA
640
-
641
- only_filter = ->(member, ctx) {
642
- case member
643
- when GraphQL::ScalarType
644
- true
645
- when GraphQL::BaseType
646
- ctx[:names].include?(member.name)
647
- when GraphQL::Argument
648
- member.name != "id"
649
- else
650
- if member.respond_to?(:deprecation_reason)
651
- member.deprecation_reason.nil?
652
- end
653
- end
654
- }
655
-
656
- context = { names: ["Varied", "Choice", "Subscription"] }
657
- assert_equal expected.chomp, schema.to_definition(context: context, only: only_filter)
658
- end
659
-
660
-
661
- it "applies an `except` filter" do
662
- expected = <<SCHEMA
663
- type Audio {
664
- duration: Int!
665
- id: ID!
666
- name: String!
667
- }
668
-
669
- enum Choice {
670
- BAR
671
- FOO
672
- }
673
-
674
- """
675
- A blog comment
676
- """
677
- type Comment implements Node {
678
- id: ID!
679
- }
680
-
681
- """
682
- Autogenerated input type of CreatePost
683
- """
684
- input CreatePostInput {
685
- body: String!
686
-
687
- """
688
- A unique identifier for the client performing the mutation.
689
- """
690
- clientMutationId: String
691
- title: String!
692
- }
693
-
694
- """
695
- Autogenerated return type of CreatePost
696
- """
697
- type CreatePostPayload {
698
- """
699
- A unique identifier for the client performing the mutation.
700
- """
701
- clientMutationId: String
702
- post: Post
703
- }
704
-
705
- """
706
- Media objects
707
- """
708
- union Media = Audio
709
-
710
- type Mutation {
711
- """
712
- Create a blog post
713
- """
714
- createPost(input: CreatePostInput!): CreatePostPayload
715
- }
716
-
717
- interface Node {
718
- id: ID!
719
- }
720
-
721
- """
722
- A blog post
723
- """
724
- type Post {
725
- body: String!
726
- comments: [Comment!]
727
- id: ID!
728
- title: String!
729
- }
730
-
731
- """
732
- The query root of this schema
733
- """
734
- type Query {
735
- post(
736
- """
737
- Post ID
738
- """
739
- id: ID!
740
- ): Post
741
- }
742
-
743
- type Subscription {
744
- post(id: ID!): Post
745
- }
746
- SCHEMA
747
-
748
- except_filter = ->(member, ctx) {
749
- ctx[:names].include?(member.name) || (member.respond_to?(:deprecation_reason) && member.deprecation_reason)
750
- }
751
-
752
- context = { names: ["Varied", "Image", "Sub"] }
753
- assert_equal expected.chomp, schema.to_definition(context: context, except: except_filter)
754
- end
755
-
756
- describe "#print_type" do
757
- it "returns the type schema as a string" do
758
- expected = <<SCHEMA
759
- """
760
- A blog post
761
- """
762
- type Post {
763
- body: String!
764
- comments: [Comment!]
765
- comments_count: Int! @deprecated(reason: "Use \\\"comments\\\".")
766
- id: ID!
767
- title: String!
768
- }
769
- SCHEMA
770
- assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema).print_type(schema.types['Post'])
771
- end
772
-
773
- it "can print non-object types" do
774
- expected = <<SCHEMA
775
- """
776
- Test
777
- """
778
- input Sub {
779
- """
780
- Something
781
- """
782
- int: Int
783
-
784
- """
785
- Something
786
- """
787
- string: String
788
- }
789
- SCHEMA
790
- assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema).print_type(schema.types['Sub'])
791
- end
792
-
793
- it "can print arguments that use non-standard Ruby objects as default values" do
794
- backing_object = Struct.new(:value)
795
-
796
- scalar_type = GraphQL::ScalarType.define do
797
- name "SomeType"
798
- coerce_input ->(value, ctx) { backing_object.new(value) }
799
- coerce_result ->(obj, ctx) { obj.value }
800
- end
801
-
802
- query_root = GraphQL::ObjectType.define do
803
- name "Query"
804
- description "The query root of this schema"
805
-
806
- field :example do
807
- type scalar_type
808
- argument :input, scalar_type, default_value: backing_object.new("Howdy")
809
- resolve ->(obj, args, ctx) { args[:input] }
810
- end
811
- end
812
-
813
- schema = GraphQL::Schema.define do
814
- query query_root
815
- end
816
-
817
- expected = <<SCHEMA
818
- """
819
- The query root of this schema
820
- """
821
- type Query {
822
- example(input: SomeType = "Howdy"): SomeType
823
- }
824
- SCHEMA
825
-
826
- assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema).print_type(query_root)
827
- end
828
- end
829
-
830
- describe "#print_directive" do
831
- it "prints the deprecation reason in a single line escaped string including line breaks" do
832
- expected = <<SCHEMA
833
- enum Choice {
834
- BAR
835
- BAZ @deprecated(reason: "Use \\\"BAR\\\" instead.\\n\\nIt's the replacement for this value.\\n")
836
- FOO
837
- WOZ @deprecated
838
- }
839
-
840
- type Subscription {
841
- }
842
-
843
- input Varied {
844
- bool: Boolean
845
- enum: Choice = FOO
846
- float: Float
847
- int: Int
848
- }
849
- SCHEMA
850
-
851
- only_filter = ->(member, ctx) {
852
- case member
853
- when GraphQL::ScalarType
854
- true
855
- when GraphQL::BaseType
856
- ctx[:names].include?(member.name)
857
- when GraphQL::Argument
858
- member.name != "id"
859
- else
860
- true
861
- end
862
- }
863
-
864
- context = { names: ["Varied", "Choice", "Subscription"] }
865
-
866
- assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema, context: context, only: only_filter).print_schema
867
- end
868
- end
869
-
870
- it "prints schemas from class" do
871
- class TestPrintSchema < GraphQL::Schema
872
- class OddlyNamedQuery < GraphQL::Schema::Object
873
- field :int, Int, null: false
874
- end
875
-
876
- query(OddlyNamedQuery)
877
- end
878
-
879
-
880
- str = GraphQL::Schema::Printer.print_schema TestPrintSchema
881
- assert_equal "schema {\n query: OddlyNamedQuery\n}\n\ntype OddlyNamedQuery {\n int: Int!\n}", str
882
- end
883
- end