graphql 1.9.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (723) hide show
  1. checksums.yaml +5 -5
  2. data/lib/generators/graphql/core.rb +21 -9
  3. data/lib/generators/graphql/enum_generator.rb +4 -10
  4. data/lib/generators/graphql/field_extractor.rb +31 -0
  5. data/lib/generators/graphql/input_generator.rb +50 -0
  6. data/lib/generators/graphql/install/mutation_root_generator.rb +34 -0
  7. data/lib/generators/graphql/install/templates/base_mutation.erb +12 -0
  8. data/lib/generators/graphql/{templates → install/templates}/mutation_type.erb +4 -0
  9. data/lib/generators/graphql/install_generator.rb +49 -9
  10. data/lib/generators/graphql/interface_generator.rb +7 -7
  11. data/lib/generators/graphql/loader_generator.rb +1 -0
  12. data/lib/generators/graphql/mutation_create_generator.rb +22 -0
  13. data/lib/generators/graphql/mutation_delete_generator.rb +22 -0
  14. data/lib/generators/graphql/mutation_generator.rb +6 -30
  15. data/lib/generators/graphql/mutation_update_generator.rb +22 -0
  16. data/lib/generators/graphql/object_generator.rb +28 -12
  17. data/lib/generators/graphql/orm_mutations_base.rb +40 -0
  18. data/lib/generators/graphql/relay.rb +66 -0
  19. data/lib/generators/graphql/relay_generator.rb +21 -0
  20. data/lib/generators/graphql/scalar_generator.rb +4 -2
  21. data/lib/generators/graphql/templates/base_argument.erb +8 -0
  22. data/lib/generators/graphql/templates/base_connection.erb +10 -0
  23. data/lib/generators/graphql/templates/base_edge.erb +10 -0
  24. data/lib/generators/graphql/templates/base_enum.erb +4 -0
  25. data/lib/generators/graphql/templates/base_field.erb +9 -0
  26. data/lib/generators/graphql/templates/base_input_object.erb +5 -0
  27. data/lib/generators/graphql/templates/base_interface.erb +6 -0
  28. data/lib/generators/graphql/templates/base_object.erb +5 -0
  29. data/lib/generators/graphql/templates/base_scalar.erb +4 -0
  30. data/lib/generators/graphql/templates/base_union.erb +4 -0
  31. data/lib/generators/graphql/templates/enum.erb +7 -1
  32. data/lib/generators/graphql/templates/graphql_controller.erb +23 -12
  33. data/lib/generators/graphql/templates/input.erb +9 -0
  34. data/lib/generators/graphql/templates/interface.erb +6 -2
  35. data/lib/generators/graphql/templates/loader.erb +4 -0
  36. data/lib/generators/graphql/templates/mutation.erb +5 -1
  37. data/lib/generators/graphql/templates/mutation_create.erb +20 -0
  38. data/lib/generators/graphql/templates/mutation_delete.erb +20 -0
  39. data/lib/generators/graphql/templates/mutation_update.erb +21 -0
  40. data/lib/generators/graphql/templates/node_type.erb +11 -0
  41. data/lib/generators/graphql/templates/object.erb +7 -3
  42. data/lib/generators/graphql/templates/query_type.erb +5 -3
  43. data/lib/generators/graphql/templates/scalar.erb +5 -1
  44. data/lib/generators/graphql/templates/schema.erb +27 -27
  45. data/lib/generators/graphql/templates/union.erb +6 -2
  46. data/lib/generators/graphql/type_generator.rb +47 -10
  47. data/lib/generators/graphql/union_generator.rb +5 -5
  48. data/lib/graphql/analysis/ast/analyzer.rb +41 -12
  49. data/lib/graphql/analysis/ast/field_usage.rb +32 -3
  50. data/lib/graphql/analysis/ast/max_query_complexity.rb +4 -5
  51. data/lib/graphql/analysis/ast/max_query_depth.rb +7 -3
  52. data/lib/graphql/analysis/ast/query_complexity.rb +182 -66
  53. data/lib/graphql/analysis/ast/query_depth.rb +15 -26
  54. data/lib/graphql/analysis/ast/visitor.rb +83 -62
  55. data/lib/graphql/analysis/ast.rb +23 -20
  56. data/lib/graphql/analysis.rb +0 -7
  57. data/lib/graphql/backtrace/inspect_result.rb +0 -1
  58. data/lib/graphql/backtrace/table.rb +37 -16
  59. data/lib/graphql/backtrace/trace.rb +96 -0
  60. data/lib/graphql/backtrace/traced_error.rb +0 -1
  61. data/lib/graphql/backtrace/tracer.rb +39 -9
  62. data/lib/graphql/backtrace.rb +22 -18
  63. data/lib/graphql/coercion_error.rb +8 -0
  64. data/lib/graphql/dataloader/null_dataloader.rb +24 -0
  65. data/lib/graphql/dataloader/request.rb +19 -0
  66. data/lib/graphql/dataloader/request_all.rb +19 -0
  67. data/lib/graphql/dataloader/source.rb +195 -0
  68. data/lib/graphql/dataloader.rb +320 -0
  69. data/lib/graphql/date_encoding_error.rb +16 -0
  70. data/lib/graphql/deprecation.rb +9 -0
  71. data/lib/graphql/dig.rb +1 -1
  72. data/lib/graphql/execution/directive_checks.rb +2 -2
  73. data/lib/graphql/execution/errors.rb +93 -0
  74. data/lib/graphql/execution/interpreter/argument_value.rb +28 -0
  75. data/lib/graphql/execution/interpreter/arguments.rb +88 -0
  76. data/lib/graphql/execution/interpreter/arguments_cache.rb +105 -0
  77. data/lib/graphql/execution/interpreter/handles_raw_value.rb +18 -0
  78. data/lib/graphql/execution/interpreter/resolve.rb +62 -24
  79. data/lib/graphql/execution/interpreter/runtime/graphql_result.rb +170 -0
  80. data/lib/graphql/execution/interpreter/runtime.rb +695 -392
  81. data/lib/graphql/execution/interpreter.rb +199 -74
  82. data/lib/graphql/execution/lazy/lazy_method_map.rb +4 -0
  83. data/lib/graphql/execution/lazy.rb +11 -21
  84. data/lib/graphql/execution/lookahead.rb +110 -150
  85. data/lib/graphql/execution/multiplex.rb +6 -148
  86. data/lib/graphql/execution.rb +12 -4
  87. data/lib/graphql/execution_error.rb +3 -2
  88. data/lib/graphql/integer_decoding_error.rb +17 -0
  89. data/lib/graphql/integer_encoding_error.rb +26 -2
  90. data/lib/graphql/introspection/base_object.rb +2 -5
  91. data/lib/graphql/introspection/directive_location_enum.rb +2 -2
  92. data/lib/graphql/introspection/directive_type.rb +12 -6
  93. data/lib/graphql/introspection/dynamic_fields.rb +3 -8
  94. data/lib/graphql/introspection/entry_points.rb +6 -18
  95. data/lib/graphql/introspection/enum_value_type.rb +2 -2
  96. data/lib/graphql/introspection/field_type.rb +9 -5
  97. data/lib/graphql/introspection/input_value_type.rb +41 -7
  98. data/lib/graphql/introspection/introspection_query.rb +6 -92
  99. data/lib/graphql/introspection/schema_type.rb +13 -12
  100. data/lib/graphql/introspection/type_type.rb +34 -17
  101. data/lib/graphql/introspection.rb +100 -0
  102. data/lib/graphql/invalid_null_error.rb +18 -0
  103. data/lib/graphql/language/block_string.rb +50 -23
  104. data/lib/graphql/language/cache.rb +37 -0
  105. data/lib/graphql/language/definition_slice.rb +21 -10
  106. data/lib/graphql/language/document_from_schema_definition.rb +153 -87
  107. data/lib/graphql/language/lexer.rb +249 -1450
  108. data/lib/graphql/language/nodes.rb +152 -142
  109. data/lib/graphql/language/parser.rb +1036 -953
  110. data/lib/graphql/language/parser.y +159 -120
  111. data/lib/graphql/language/printer.rb +342 -154
  112. data/lib/graphql/language/sanitized_printer.rb +220 -0
  113. data/lib/graphql/language/static_visitor.rb +167 -0
  114. data/lib/graphql/language/token.rb +2 -2
  115. data/lib/graphql/language/visitor.rb +196 -140
  116. data/lib/graphql/language.rb +4 -1
  117. data/lib/graphql/load_application_object_failed_error.rb +22 -0
  118. data/lib/graphql/name_validator.rb +2 -7
  119. data/lib/graphql/pagination/active_record_relation_connection.rb +77 -0
  120. data/lib/graphql/pagination/array_connection.rb +79 -0
  121. data/lib/graphql/pagination/connection.rb +275 -0
  122. data/lib/graphql/pagination/connections.rb +135 -0
  123. data/lib/graphql/pagination/mongoid_relation_connection.rb +25 -0
  124. data/lib/graphql/pagination/relation_connection.rb +228 -0
  125. data/lib/graphql/pagination/sequel_dataset_connection.rb +28 -0
  126. data/lib/graphql/pagination.rb +6 -0
  127. data/lib/graphql/parse_error.rb +0 -1
  128. data/lib/graphql/query/context/scoped_context.rb +101 -0
  129. data/lib/graphql/query/context.rb +157 -187
  130. data/lib/graphql/query/fingerprint.rb +26 -0
  131. data/lib/graphql/query/input_validation_result.rb +33 -7
  132. data/lib/graphql/query/null_context.rb +21 -14
  133. data/lib/graphql/query/validation_pipeline.rb +17 -38
  134. data/lib/graphql/query/variable_validation_error.rb +17 -3
  135. data/lib/graphql/query/variables.rb +49 -14
  136. data/lib/graphql/query.rb +142 -61
  137. data/lib/graphql/railtie.rb +6 -102
  138. data/lib/graphql/rake_task/validate.rb +5 -2
  139. data/lib/graphql/rake_task.rb +42 -20
  140. data/lib/graphql/relay/range_add.rb +17 -10
  141. data/lib/graphql/relay.rb +0 -15
  142. data/lib/graphql/rubocop/graphql/base_cop.rb +36 -0
  143. data/lib/graphql/rubocop/graphql/default_null_true.rb +43 -0
  144. data/lib/graphql/rubocop/graphql/default_required_true.rb +43 -0
  145. data/lib/graphql/rubocop.rb +4 -0
  146. data/lib/graphql/schema/addition.rb +271 -0
  147. data/lib/graphql/schema/always_visible.rb +10 -0
  148. data/lib/graphql/schema/argument.rb +301 -32
  149. data/lib/graphql/schema/base_64_bp.rb +3 -2
  150. data/lib/graphql/schema/base_64_encoder.rb +2 -0
  151. data/lib/graphql/schema/build_from_definition/resolve_map/default_resolve.rb +1 -1
  152. data/lib/graphql/schema/build_from_definition/resolve_map.rb +13 -5
  153. data/lib/graphql/schema/build_from_definition.rb +349 -203
  154. data/lib/graphql/schema/built_in_types.rb +5 -5
  155. data/lib/graphql/schema/directive/deprecated.rb +18 -0
  156. data/lib/graphql/schema/directive/feature.rb +2 -2
  157. data/lib/graphql/schema/directive/flagged.rb +57 -0
  158. data/lib/graphql/schema/directive/include.rb +2 -2
  159. data/lib/graphql/schema/directive/one_of.rb +12 -0
  160. data/lib/graphql/schema/directive/skip.rb +2 -2
  161. data/lib/graphql/schema/directive/specified_by.rb +14 -0
  162. data/lib/graphql/schema/directive/transform.rb +14 -2
  163. data/lib/graphql/schema/directive.rb +134 -15
  164. data/lib/graphql/schema/enum.rb +137 -39
  165. data/lib/graphql/schema/enum_value.rb +17 -23
  166. data/lib/graphql/schema/field/connection_extension.rb +36 -20
  167. data/lib/graphql/schema/field/scope_extension.rb +15 -5
  168. data/lib/graphql/schema/field.rb +570 -334
  169. data/lib/graphql/schema/field_extension.rb +88 -4
  170. data/lib/graphql/schema/find_inherited_value.rb +31 -0
  171. data/lib/graphql/schema/finder.rb +16 -14
  172. data/lib/graphql/schema/has_single_input_argument.rb +156 -0
  173. data/lib/graphql/schema/input_object.rb +190 -48
  174. data/lib/graphql/schema/interface.rb +24 -49
  175. data/lib/graphql/schema/introspection_system.rb +109 -36
  176. data/lib/graphql/schema/late_bound_type.rb +9 -2
  177. data/lib/graphql/schema/list.rb +61 -3
  178. data/lib/graphql/schema/loader.rb +146 -97
  179. data/lib/graphql/schema/member/base_dsl_methods.rb +45 -51
  180. data/lib/graphql/schema/member/build_type.rb +34 -17
  181. data/lib/graphql/schema/member/has_arguments.rb +385 -10
  182. data/lib/graphql/schema/member/has_ast_node.rb +32 -0
  183. data/lib/graphql/schema/member/has_deprecation_reason.rb +24 -0
  184. data/lib/graphql/schema/member/has_directives.rb +118 -0
  185. data/lib/graphql/schema/member/has_fields.rb +180 -35
  186. data/lib/graphql/schema/member/has_interfaces.rb +143 -0
  187. data/lib/graphql/schema/member/has_unresolved_type_error.rb +15 -0
  188. data/lib/graphql/schema/member/has_validators.rb +57 -0
  189. data/lib/graphql/schema/member/relay_shortcuts.rb +47 -2
  190. data/lib/graphql/schema/member/scoped.rb +19 -0
  191. data/lib/graphql/schema/member/type_system_helpers.rb +20 -3
  192. data/lib/graphql/schema/member/validates_input.rb +33 -0
  193. data/lib/graphql/schema/member.rb +11 -6
  194. data/lib/graphql/schema/mutation.rb +4 -9
  195. data/lib/graphql/schema/non_null.rb +34 -4
  196. data/lib/graphql/schema/object.rb +55 -64
  197. data/lib/graphql/schema/printer.rb +26 -40
  198. data/lib/graphql/schema/relay_classic_mutation.rb +13 -80
  199. data/lib/graphql/schema/resolver/has_payload_type.rb +53 -12
  200. data/lib/graphql/schema/resolver.rb +182 -162
  201. data/lib/graphql/schema/scalar.rb +40 -15
  202. data/lib/graphql/schema/subscription.rb +85 -27
  203. data/lib/graphql/schema/timeout.rb +119 -0
  204. data/lib/graphql/schema/type_expression.rb +21 -13
  205. data/lib/graphql/schema/type_membership.rb +51 -0
  206. data/lib/graphql/schema/union.rb +69 -15
  207. data/lib/graphql/schema/unique_within_type.rb +1 -2
  208. data/lib/graphql/schema/validator/allow_blank_validator.rb +29 -0
  209. data/lib/graphql/schema/validator/allow_null_validator.rb +26 -0
  210. data/lib/graphql/schema/validator/exclusion_validator.rb +33 -0
  211. data/lib/graphql/schema/validator/format_validator.rb +48 -0
  212. data/lib/graphql/schema/validator/inclusion_validator.rb +35 -0
  213. data/lib/graphql/schema/validator/length_validator.rb +59 -0
  214. data/lib/graphql/schema/validator/numericality_validator.rb +82 -0
  215. data/lib/graphql/schema/validator/required_validator.rb +82 -0
  216. data/lib/graphql/schema/validator.rb +171 -0
  217. data/lib/graphql/schema/warden.rb +330 -59
  218. data/lib/graphql/schema/wrapper.rb +0 -5
  219. data/lib/graphql/schema.rb +985 -858
  220. data/lib/graphql/static_validation/all_rules.rb +4 -1
  221. data/lib/graphql/static_validation/base_visitor.rb +33 -32
  222. data/lib/graphql/static_validation/definition_dependencies.rb +28 -14
  223. data/lib/graphql/static_validation/error.rb +3 -1
  224. data/lib/graphql/static_validation/literal_validator.rb +71 -28
  225. data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +46 -79
  226. data/lib/graphql/static_validation/rules/argument_literals_are_compatible_error.rb +23 -6
  227. data/lib/graphql/static_validation/rules/arguments_are_defined.rb +35 -26
  228. data/lib/graphql/static_validation/rules/arguments_are_defined_error.rb +4 -2
  229. data/lib/graphql/static_validation/rules/directives_are_defined.rb +12 -6
  230. data/lib/graphql/static_validation/rules/directives_are_in_valid_locations.rb +14 -14
  231. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +4 -4
  232. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +15 -7
  233. data/lib/graphql/static_validation/rules/fields_will_merge.rb +107 -57
  234. data/lib/graphql/static_validation/rules/fields_will_merge_error.rb +25 -4
  235. data/lib/graphql/static_validation/rules/fragment_spreads_are_possible.rb +3 -3
  236. data/lib/graphql/static_validation/rules/fragments_are_finite.rb +2 -2
  237. data/lib/graphql/static_validation/rules/input_object_names_are_unique.rb +30 -0
  238. data/lib/graphql/static_validation/rules/input_object_names_are_unique_error.rb +30 -0
  239. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid.rb +66 -0
  240. data/lib/graphql/static_validation/rules/one_of_input_objects_are_valid_error.rb +29 -0
  241. data/lib/graphql/static_validation/rules/query_root_exists.rb +17 -0
  242. data/lib/graphql/static_validation/rules/query_root_exists_error.rb +26 -0
  243. data/lib/graphql/static_validation/rules/required_arguments_are_present.rb +6 -4
  244. data/lib/graphql/static_validation/rules/required_input_object_attributes_are_present.rb +22 -10
  245. data/lib/graphql/static_validation/rules/unique_directives_per_location.rb +13 -7
  246. data/lib/graphql/static_validation/rules/variable_default_values_are_correctly_typed.rb +12 -13
  247. data/lib/graphql/static_validation/rules/variable_usages_are_allowed.rb +19 -14
  248. data/lib/graphql/static_validation/rules/variables_are_input_types.rb +1 -1
  249. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +5 -3
  250. data/lib/graphql/static_validation/validation_context.rb +17 -7
  251. data/lib/graphql/static_validation/validation_timeout_error.rb +25 -0
  252. data/lib/graphql/static_validation/validator.rb +32 -20
  253. data/lib/graphql/static_validation.rb +1 -3
  254. data/lib/graphql/string_encoding_error.rb +13 -3
  255. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +134 -24
  256. data/lib/graphql/subscriptions/broadcast_analyzer.rb +81 -0
  257. data/lib/graphql/subscriptions/default_subscription_resolve_extension.rb +58 -0
  258. data/lib/graphql/subscriptions/event.rb +90 -27
  259. data/lib/graphql/subscriptions/instrumentation.rb +0 -47
  260. data/lib/graphql/subscriptions/serialize.rb +53 -6
  261. data/lib/graphql/subscriptions.rb +147 -62
  262. data/lib/graphql/tracing/active_support_notifications_trace.rb +16 -0
  263. data/lib/graphql/tracing/active_support_notifications_tracing.rb +8 -17
  264. data/lib/graphql/tracing/appoptics_trace.rb +251 -0
  265. data/lib/graphql/tracing/appoptics_tracing.rb +173 -0
  266. data/lib/graphql/tracing/appsignal_trace.rb +77 -0
  267. data/lib/graphql/tracing/appsignal_tracing.rb +23 -0
  268. data/lib/graphql/tracing/data_dog_trace.rb +196 -0
  269. data/lib/graphql/tracing/data_dog_tracing.rb +53 -2
  270. data/lib/graphql/tracing/legacy_trace.rb +69 -0
  271. data/lib/graphql/tracing/new_relic_trace.rb +75 -0
  272. data/lib/graphql/tracing/new_relic_tracing.rb +9 -12
  273. data/lib/graphql/tracing/notifications_trace.rb +45 -0
  274. data/lib/graphql/tracing/notifications_tracing.rb +59 -0
  275. data/lib/graphql/tracing/platform_trace.rb +118 -0
  276. data/lib/graphql/tracing/platform_tracing.rb +77 -31
  277. data/lib/graphql/tracing/prometheus_trace.rb +89 -0
  278. data/lib/graphql/tracing/prometheus_tracing/graphql_collector.rb +5 -2
  279. data/lib/graphql/tracing/prometheus_tracing.rb +11 -3
  280. data/lib/graphql/tracing/scout_trace.rb +72 -0
  281. data/lib/graphql/tracing/scout_tracing.rb +19 -0
  282. data/lib/graphql/tracing/statsd_trace.rb +56 -0
  283. data/lib/graphql/tracing/statsd_tracing.rb +42 -0
  284. data/lib/graphql/tracing/trace.rb +75 -0
  285. data/lib/graphql/tracing.rb +24 -67
  286. data/lib/graphql/type_kinds.rb +6 -3
  287. data/lib/graphql/types/big_int.rb +23 -0
  288. data/lib/graphql/types/int.rb +11 -3
  289. data/lib/graphql/types/iso_8601_date.rb +45 -0
  290. data/lib/graphql/types/iso_8601_date_time.rb +36 -8
  291. data/lib/graphql/types/json.rb +25 -0
  292. data/lib/graphql/types/relay/base_connection.rb +18 -90
  293. data/lib/graphql/types/relay/base_edge.rb +2 -36
  294. data/lib/graphql/types/relay/connection_behaviors.rb +193 -0
  295. data/lib/graphql/types/relay/edge_behaviors.rb +82 -0
  296. data/lib/graphql/types/relay/has_node_field.rb +41 -0
  297. data/lib/graphql/types/relay/has_nodes_field.rb +41 -0
  298. data/lib/graphql/types/relay/node.rb +2 -4
  299. data/lib/graphql/types/relay/node_behaviors.rb +25 -0
  300. data/lib/graphql/types/relay/page_info.rb +2 -14
  301. data/lib/graphql/types/relay/page_info_behaviors.rb +30 -0
  302. data/lib/graphql/types/relay.rb +10 -5
  303. data/lib/graphql/types/string.rb +8 -2
  304. data/lib/graphql/types.rb +3 -0
  305. data/lib/graphql/unauthorized_error.rb +3 -3
  306. data/lib/graphql/unauthorized_field_error.rb +1 -1
  307. data/lib/graphql/unresolved_type_error.rb +2 -2
  308. data/lib/graphql/version.rb +1 -1
  309. data/lib/graphql.rb +68 -54
  310. data/readme.md +4 -7
  311. metadata +150 -822
  312. data/lib/graphql/analysis/analyze_query.rb +0 -91
  313. data/lib/graphql/analysis/field_usage.rb +0 -45
  314. data/lib/graphql/analysis/max_query_complexity.rb +0 -26
  315. data/lib/graphql/analysis/max_query_depth.rb +0 -26
  316. data/lib/graphql/analysis/query_complexity.rb +0 -88
  317. data/lib/graphql/analysis/query_depth.rb +0 -56
  318. data/lib/graphql/analysis/reducer_state.rb +0 -48
  319. data/lib/graphql/argument.rb +0 -153
  320. data/lib/graphql/authorization.rb +0 -82
  321. data/lib/graphql/backwards_compatibility.rb +0 -60
  322. data/lib/graphql/base_type.rb +0 -226
  323. data/lib/graphql/boolean_type.rb +0 -2
  324. data/lib/graphql/compatibility/execution_specification/counter_schema.rb +0 -53
  325. data/lib/graphql/compatibility/execution_specification/specification_schema.rb +0 -200
  326. data/lib/graphql/compatibility/execution_specification.rb +0 -435
  327. data/lib/graphql/compatibility/lazy_execution_specification/lazy_schema.rb +0 -111
  328. data/lib/graphql/compatibility/lazy_execution_specification.rb +0 -213
  329. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +0 -91
  330. data/lib/graphql/compatibility/query_parser_specification/query_assertions.rb +0 -79
  331. data/lib/graphql/compatibility/query_parser_specification.rb +0 -264
  332. data/lib/graphql/compatibility/schema_parser_specification.rb +0 -680
  333. data/lib/graphql/compatibility.rb +0 -5
  334. data/lib/graphql/define/assign_argument.rb +0 -12
  335. data/lib/graphql/define/assign_connection.rb +0 -13
  336. data/lib/graphql/define/assign_enum_value.rb +0 -18
  337. data/lib/graphql/define/assign_global_id_field.rb +0 -11
  338. data/lib/graphql/define/assign_mutation_function.rb +0 -34
  339. data/lib/graphql/define/assign_object_field.rb +0 -42
  340. data/lib/graphql/define/defined_object_proxy.rb +0 -50
  341. data/lib/graphql/define/instance_definable.rb +0 -300
  342. data/lib/graphql/define/no_definition_error.rb +0 -7
  343. data/lib/graphql/define/non_null_with_bang.rb +0 -16
  344. data/lib/graphql/define/type_definer.rb +0 -31
  345. data/lib/graphql/define.rb +0 -31
  346. data/lib/graphql/deprecated_dsl.rb +0 -42
  347. data/lib/graphql/directive/deprecated_directive.rb +0 -13
  348. data/lib/graphql/directive/include_directive.rb +0 -2
  349. data/lib/graphql/directive/skip_directive.rb +0 -2
  350. data/lib/graphql/directive.rb +0 -104
  351. data/lib/graphql/enum_type.rb +0 -193
  352. data/lib/graphql/execution/execute.rb +0 -319
  353. data/lib/graphql/execution/flatten.rb +0 -40
  354. data/lib/graphql/execution/instrumentation.rb +0 -92
  355. data/lib/graphql/execution/interpreter/hash_response.rb +0 -46
  356. data/lib/graphql/execution/lazy/resolve.rb +0 -91
  357. data/lib/graphql/execution/typecast.rb +0 -50
  358. data/lib/graphql/field/resolve.rb +0 -59
  359. data/lib/graphql/field.rb +0 -330
  360. data/lib/graphql/filter.rb +0 -53
  361. data/lib/graphql/float_type.rb +0 -2
  362. data/lib/graphql/function.rb +0 -153
  363. data/lib/graphql/id_type.rb +0 -2
  364. data/lib/graphql/input_object_type.rb +0 -153
  365. data/lib/graphql/int_type.rb +0 -2
  366. data/lib/graphql/interface_type.rb +0 -86
  367. data/lib/graphql/internal_representation/document.rb +0 -27
  368. data/lib/graphql/internal_representation/node.rb +0 -206
  369. data/lib/graphql/internal_representation/print.rb +0 -51
  370. data/lib/graphql/internal_representation/rewrite.rb +0 -184
  371. data/lib/graphql/internal_representation/scope.rb +0 -88
  372. data/lib/graphql/internal_representation/visit.rb +0 -36
  373. data/lib/graphql/internal_representation.rb +0 -7
  374. data/lib/graphql/language/lexer.rl +0 -236
  375. data/lib/graphql/list_type.rb +0 -80
  376. data/lib/graphql/literal_validation_error.rb +0 -6
  377. data/lib/graphql/non_null_type.rb +0 -81
  378. data/lib/graphql/object_type.rb +0 -141
  379. data/lib/graphql/query/arguments.rb +0 -179
  380. data/lib/graphql/query/arguments_cache.rb +0 -25
  381. data/lib/graphql/query/executor.rb +0 -53
  382. data/lib/graphql/query/literal_input.rb +0 -115
  383. data/lib/graphql/query/serial_execution/field_resolution.rb +0 -92
  384. data/lib/graphql/query/serial_execution/operation_resolution.rb +0 -19
  385. data/lib/graphql/query/serial_execution/selection_resolution.rb +0 -23
  386. data/lib/graphql/query/serial_execution/value_resolution.rb +0 -87
  387. data/lib/graphql/query/serial_execution.rb +0 -39
  388. data/lib/graphql/relay/array_connection.rb +0 -85
  389. data/lib/graphql/relay/base_connection.rb +0 -172
  390. data/lib/graphql/relay/connection_instrumentation.rb +0 -54
  391. data/lib/graphql/relay/connection_resolve.rb +0 -43
  392. data/lib/graphql/relay/connection_type.rb +0 -40
  393. data/lib/graphql/relay/edge.rb +0 -27
  394. data/lib/graphql/relay/edge_type.rb +0 -18
  395. data/lib/graphql/relay/edges_instrumentation.rb +0 -40
  396. data/lib/graphql/relay/global_id_resolve.rb +0 -18
  397. data/lib/graphql/relay/mongo_relation_connection.rb +0 -50
  398. data/lib/graphql/relay/mutation/instrumentation.rb +0 -23
  399. data/lib/graphql/relay/mutation/resolve.rb +0 -56
  400. data/lib/graphql/relay/mutation/result.rb +0 -38
  401. data/lib/graphql/relay/mutation.rb +0 -190
  402. data/lib/graphql/relay/node.rb +0 -36
  403. data/lib/graphql/relay/page_info.rb +0 -7
  404. data/lib/graphql/relay/relation_connection.rb +0 -186
  405. data/lib/graphql/relay/type_extensions.rb +0 -30
  406. data/lib/graphql/scalar_type.rb +0 -135
  407. data/lib/graphql/schema/catchall_middleware.rb +0 -35
  408. data/lib/graphql/schema/default_parse_error.rb +0 -10
  409. data/lib/graphql/schema/default_type_error.rb +0 -15
  410. data/lib/graphql/schema/member/accepts_definition.rb +0 -152
  411. data/lib/graphql/schema/member/cached_graphql_definition.rb +0 -26
  412. data/lib/graphql/schema/member/instrumentation.rb +0 -121
  413. data/lib/graphql/schema/middleware_chain.rb +0 -82
  414. data/lib/graphql/schema/possible_types.rb +0 -39
  415. data/lib/graphql/schema/rescue_middleware.rb +0 -55
  416. data/lib/graphql/schema/timeout_middleware.rb +0 -85
  417. data/lib/graphql/schema/traversal.rb +0 -228
  418. data/lib/graphql/schema/validation.rb +0 -286
  419. data/lib/graphql/static_validation/default_visitor.rb +0 -15
  420. data/lib/graphql/static_validation/no_validate_visitor.rb +0 -10
  421. data/lib/graphql/static_validation/type_stack.rb +0 -216
  422. data/lib/graphql/string_type.rb +0 -2
  423. data/lib/graphql/subscriptions/subscription_root.rb +0 -66
  424. data/lib/graphql/tracing/skylight_tracing.rb +0 -61
  425. data/lib/graphql/types/relay/base_field.rb +0 -22
  426. data/lib/graphql/types/relay/base_interface.rb +0 -29
  427. data/lib/graphql/types/relay/base_object.rb +0 -26
  428. data/lib/graphql/types/relay/node_field.rb +0 -43
  429. data/lib/graphql/types/relay/nodes_field.rb +0 -45
  430. data/lib/graphql/union_type.rb +0 -100
  431. data/lib/graphql/upgrader/member.rb +0 -899
  432. data/lib/graphql/upgrader/schema.rb +0 -37
  433. data/spec/dummy/Gemfile +0 -12
  434. data/spec/dummy/Gemfile.lock +0 -157
  435. data/spec/dummy/README.md +0 -24
  436. data/spec/dummy/Rakefile +0 -7
  437. data/spec/dummy/app/assets/config/manifest.js +0 -1
  438. data/spec/dummy/app/assets/javascripts/application.js +0 -66
  439. data/spec/dummy/app/channels/application_cable/channel.rb +0 -5
  440. data/spec/dummy/app/channels/application_cable/connection.rb +0 -5
  441. data/spec/dummy/app/channels/graphql_channel.rb +0 -116
  442. data/spec/dummy/app/controllers/application_controller.rb +0 -4
  443. data/spec/dummy/app/controllers/pages_controller.rb +0 -5
  444. data/spec/dummy/app/helpers/application_helper.rb +0 -3
  445. data/spec/dummy/app/jobs/application_job.rb +0 -3
  446. data/spec/dummy/app/views/layouts/application.html.erb +0 -12
  447. data/spec/dummy/app/views/pages/show.html +0 -16
  448. data/spec/dummy/bin/bundle +0 -4
  449. data/spec/dummy/bin/rails +0 -5
  450. data/spec/dummy/bin/rake +0 -5
  451. data/spec/dummy/bin/setup +0 -31
  452. data/spec/dummy/bin/update +0 -27
  453. data/spec/dummy/bin/yarn +0 -12
  454. data/spec/dummy/config/application.rb +0 -30
  455. data/spec/dummy/config/boot.rb +0 -4
  456. data/spec/dummy/config/cable.yml +0 -10
  457. data/spec/dummy/config/environment.rb +0 -6
  458. data/spec/dummy/config/environments/development.rb +0 -40
  459. data/spec/dummy/config/environments/production.rb +0 -76
  460. data/spec/dummy/config/environments/test.rb +0 -37
  461. data/spec/dummy/config/initializers/application_controller_renderer.rb +0 -9
  462. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -8
  463. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -6
  464. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -5
  465. data/spec/dummy/config/initializers/inflections.rb +0 -17
  466. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  467. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -10
  468. data/spec/dummy/config/locales/en.yml +0 -33
  469. data/spec/dummy/config/puma.rb +0 -57
  470. data/spec/dummy/config/routes.rb +0 -4
  471. data/spec/dummy/config/secrets.yml +0 -32
  472. data/spec/dummy/config.ru +0 -6
  473. data/spec/dummy/log/test.log +0 -199
  474. data/spec/dummy/package.json +0 -5
  475. data/spec/dummy/public/404.html +0 -67
  476. data/spec/dummy/public/422.html +0 -67
  477. data/spec/dummy/public/500.html +0 -66
  478. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  479. data/spec/dummy/public/apple-touch-icon.png +0 -0
  480. data/spec/dummy/public/favicon.ico +0 -0
  481. data/spec/dummy/public/robots.txt +0 -1
  482. data/spec/dummy/test/application_system_test_case.rb +0 -6
  483. data/spec/dummy/test/system/action_cable_subscription_test.rb +0 -45
  484. data/spec/dummy/test/test_helper.rb +0 -4
  485. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4w/4wzXRZrAkwKdgYaSE0pid5eB-fer8vSfSku_NPg4rMA.cache +0 -0
  486. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7I/7IHVBiJT06QSpgLpLoJIxboQ0B-D_tMTxsvoezBTV3Q.cache +0 -1
  487. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8w/8wY_SKagj8wHuwGNAAf6JnQ8joMbC6cEYpHrTAI8Urc.cache +0 -1
  488. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/AK/AKzz1u6bGb4auXcrObA_g5LL-oV0ejNGa448AgAi_WQ.cache +0 -1
  489. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ET/ETW4uxvaYpruL8y6_ZptUH82ZowMaHIqvg5WexBFdEM.cache +0 -3
  490. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F1/F1TWpjjyA56k9Z90n5B3xRn7DUdGjX73QCkYC6k07JQ.cache +0 -0
  491. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F8/F8MUNRzORGFgr329fNM0xLaoWCXdv3BIalT7dsvLfjs.cache +0 -2
  492. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KB/KB07ZaKNC5uXJ7TjLi-WqnY6g7dq8wWp_8N3HNjBNxg.cache +0 -2
  493. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ms/MsKSimH_UCB-H1tLvDABDHuvGciuoW6kVqQWDrXU5FQ.cache +0 -0
  494. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Mt/Mtci-Kim50aPOmeClD4AIicKn1d1WJ0n454IjSd94sk.cache +0 -0
  495. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QH/QHt3Tc1Y6M66Oo_pDuMyWrQNs4Pp3SMeZR5K1wJj2Ts.cache +0 -1
  496. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/XU/XU4k1OXnfMils5SrirorPvDSyDSqiOWLZNtmAH1HH8k.cache +0 -0
  497. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ZI/ZIof7mZxWWCnraIFOCuV6a8QRWzKJXJnx2Xd7C0ZyX0.cache +0 -1
  498. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/cG/cGc_puuPS5pZKgUcy1Y_i1L6jl5UtsiIrMH59rTzR6c.cache +0 -3
  499. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/df/dfro_B6bx3KP1Go-7jEOqqZ2j4hVRseXIc3es9PKQno.cache +0 -1
  500. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/jO/jO1DfbqnG0mTULsjJJANc3fefrG2zt7DIMmcptMT628.cache +0 -1
  501. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/pE/pE7gO6pQ-z187Swb4hT554wmqsq-cNzgPWLrCz-LQQQ.cache +0 -0
  502. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/r9/r9iU1l58a6rxkZSW5RSC52_tD-_UQuHxoMVnkfJ7Mhs.cache +0 -1
  503. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xi/xitPPFfPIyDMpaznV0sBBcw8eSCV8PJcLLWin78sCgE.cache +0 -0
  504. data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
  505. data/spec/fixtures/upgrader/account.original.rb +0 -19
  506. data/spec/fixtures/upgrader/account.transformed.rb +0 -20
  507. data/spec/fixtures/upgrader/blame_range.original.rb +0 -43
  508. data/spec/fixtures/upgrader/blame_range.transformed.rb +0 -30
  509. data/spec/fixtures/upgrader/date_time.original.rb +0 -24
  510. data/spec/fixtures/upgrader/date_time.transformed.rb +0 -23
  511. data/spec/fixtures/upgrader/delete_project.original.rb +0 -28
  512. data/spec/fixtures/upgrader/delete_project.transformed.rb +0 -27
  513. data/spec/fixtures/upgrader/gist_order_field.original.rb +0 -14
  514. data/spec/fixtures/upgrader/gist_order_field.transformed.rb +0 -13
  515. data/spec/fixtures/upgrader/increment_count.original.rb +0 -59
  516. data/spec/fixtures/upgrader/increment_count.transformed.rb +0 -50
  517. data/spec/fixtures/upgrader/photo.original.rb +0 -10
  518. data/spec/fixtures/upgrader/photo.transformed.rb +0 -12
  519. data/spec/fixtures/upgrader/release_order.original.rb +0 -15
  520. data/spec/fixtures/upgrader/release_order.transformed.rb +0 -14
  521. data/spec/fixtures/upgrader/starrable.original.rb +0 -49
  522. data/spec/fixtures/upgrader/starrable.transformed.rb +0 -46
  523. data/spec/fixtures/upgrader/subscribable.original.rb +0 -55
  524. data/spec/fixtures/upgrader/subscribable.transformed.rb +0 -51
  525. data/spec/fixtures/upgrader/type_x.original.rb +0 -65
  526. data/spec/fixtures/upgrader/type_x.transformed.rb +0 -56
  527. data/spec/graphql/analysis/analyze_query_spec.rb +0 -272
  528. data/spec/graphql/analysis/ast/field_usage_spec.rb +0 -51
  529. data/spec/graphql/analysis/ast/max_query_complexity_spec.rb +0 -120
  530. data/spec/graphql/analysis/ast/max_query_depth_spec.rb +0 -114
  531. data/spec/graphql/analysis/ast/query_complexity_spec.rb +0 -299
  532. data/spec/graphql/analysis/ast/query_depth_spec.rb +0 -108
  533. data/spec/graphql/analysis/ast_spec.rb +0 -269
  534. data/spec/graphql/analysis/field_usage_spec.rb +0 -62
  535. data/spec/graphql/analysis/max_query_complexity_spec.rb +0 -102
  536. data/spec/graphql/analysis/max_query_depth_spec.rb +0 -101
  537. data/spec/graphql/analysis/query_complexity_spec.rb +0 -301
  538. data/spec/graphql/analysis/query_depth_spec.rb +0 -81
  539. data/spec/graphql/argument_spec.rb +0 -159
  540. data/spec/graphql/authorization_spec.rb +0 -901
  541. data/spec/graphql/backtrace_spec.rb +0 -206
  542. data/spec/graphql/base_type_spec.rb +0 -171
  543. data/spec/graphql/boolean_type_spec.rb +0 -21
  544. data/spec/graphql/compatibility/execution_specification_spec.rb +0 -4
  545. data/spec/graphql/compatibility/lazy_execution_specification_spec.rb +0 -4
  546. data/spec/graphql/compatibility/query_parser_specification_spec.rb +0 -6
  547. data/spec/graphql/compatibility/schema_parser_specification_spec.rb +0 -6
  548. data/spec/graphql/define/assign_argument_spec.rb +0 -61
  549. data/spec/graphql/define/instance_definable_spec.rb +0 -203
  550. data/spec/graphql/directive/skip_directive_spec.rb +0 -9
  551. data/spec/graphql/directive_spec.rb +0 -295
  552. data/spec/graphql/enum_type_spec.rb +0 -158
  553. data/spec/graphql/execution/execute_spec.rb +0 -303
  554. data/spec/graphql/execution/instrumentation_spec.rb +0 -184
  555. data/spec/graphql/execution/interpreter_spec.rb +0 -485
  556. data/spec/graphql/execution/lazy/lazy_method_map_spec.rb +0 -57
  557. data/spec/graphql/execution/lazy_spec.rb +0 -240
  558. data/spec/graphql/execution/lookahead_spec.rb +0 -363
  559. data/spec/graphql/execution/multiplex_spec.rb +0 -211
  560. data/spec/graphql/execution/typecast_spec.rb +0 -47
  561. data/spec/graphql/execution_error_spec.rb +0 -325
  562. data/spec/graphql/field_spec.rb +0 -246
  563. data/spec/graphql/float_type_spec.rb +0 -16
  564. data/spec/graphql/function_spec.rb +0 -129
  565. data/spec/graphql/id_type_spec.rb +0 -33
  566. data/spec/graphql/input_object_type_spec.rb +0 -25
  567. data/spec/graphql/int_type_spec.rb +0 -35
  568. data/spec/graphql/interface_type_spec.rb +0 -196
  569. data/spec/graphql/internal_representation/print_spec.rb +0 -41
  570. data/spec/graphql/internal_representation/rewrite_spec.rb +0 -376
  571. data/spec/graphql/introspection/directive_type_spec.rb +0 -61
  572. data/spec/graphql/introspection/input_value_type_spec.rb +0 -105
  573. data/spec/graphql/introspection/introspection_query_spec.rb +0 -59
  574. data/spec/graphql/introspection/schema_type_spec.rb +0 -56
  575. data/spec/graphql/introspection/type_type_spec.rb +0 -155
  576. data/spec/graphql/language/block_string_spec.rb +0 -70
  577. data/spec/graphql/language/definition_slice_spec.rb +0 -226
  578. data/spec/graphql/language/document_from_schema_definition_spec.rb +0 -770
  579. data/spec/graphql/language/equality_spec.rb +0 -84
  580. data/spec/graphql/language/generation_spec.rb +0 -38
  581. data/spec/graphql/language/lexer_spec.rb +0 -135
  582. data/spec/graphql/language/nodes_spec.rb +0 -67
  583. data/spec/graphql/language/parser_spec.rb +0 -175
  584. data/spec/graphql/language/printer_spec.rb +0 -215
  585. data/spec/graphql/language/visitor_spec.rb +0 -400
  586. data/spec/graphql/list_type_spec.rb +0 -57
  587. data/spec/graphql/non_null_type_spec.rb +0 -48
  588. data/spec/graphql/object_type_spec.rb +0 -197
  589. data/spec/graphql/query/arguments_spec.rb +0 -346
  590. data/spec/graphql/query/context_spec.rb +0 -292
  591. data/spec/graphql/query/executor_spec.rb +0 -314
  592. data/spec/graphql/query/literal_input_spec.rb +0 -91
  593. data/spec/graphql/query/result_spec.rb +0 -29
  594. data/spec/graphql/query/serial_execution/value_resolution_spec.rb +0 -109
  595. data/spec/graphql/query_spec.rb +0 -800
  596. data/spec/graphql/rake_task_spec.rb +0 -59
  597. data/spec/graphql/scalar_type_spec.rb +0 -66
  598. data/spec/graphql/schema/argument_spec.rb +0 -127
  599. data/spec/graphql/schema/build_from_definition_spec.rb +0 -1187
  600. data/spec/graphql/schema/catchall_middleware_spec.rb +0 -35
  601. data/spec/graphql/schema/directive/feature_spec.rb +0 -81
  602. data/spec/graphql/schema/directive/transform_spec.rb +0 -39
  603. data/spec/graphql/schema/enum_spec.rb +0 -83
  604. data/spec/graphql/schema/enum_value_spec.rb +0 -24
  605. data/spec/graphql/schema/field_extension_spec.rb +0 -115
  606. data/spec/graphql/schema/field_spec.rb +0 -301
  607. data/spec/graphql/schema/finder_spec.rb +0 -135
  608. data/spec/graphql/schema/input_object_spec.rb +0 -238
  609. data/spec/graphql/schema/instrumentation_spec.rb +0 -43
  610. data/spec/graphql/schema/interface_spec.rb +0 -215
  611. data/spec/graphql/schema/introspection_system_spec.rb +0 -47
  612. data/spec/graphql/schema/list_spec.rb +0 -46
  613. data/spec/graphql/schema/loader_spec.rb +0 -286
  614. data/spec/graphql/schema/member/accepts_definition_spec.rb +0 -115
  615. data/spec/graphql/schema/member/build_type_spec.rb +0 -63
  616. data/spec/graphql/schema/member/scoped_spec.rb +0 -177
  617. data/spec/graphql/schema/member/type_system_helpers_spec.rb +0 -63
  618. data/spec/graphql/schema/middleware_chain_spec.rb +0 -57
  619. data/spec/graphql/schema/mutation_spec.rb +0 -150
  620. data/spec/graphql/schema/non_null_spec.rb +0 -46
  621. data/spec/graphql/schema/object_spec.rb +0 -244
  622. data/spec/graphql/schema/printer_spec.rb +0 -869
  623. data/spec/graphql/schema/relay_classic_mutation_spec.rb +0 -234
  624. data/spec/graphql/schema/rescue_middleware_spec.rb +0 -74
  625. data/spec/graphql/schema/resolver_spec.rb +0 -640
  626. data/spec/graphql/schema/scalar_spec.rb +0 -101
  627. data/spec/graphql/schema/subscription_spec.rb +0 -416
  628. data/spec/graphql/schema/timeout_middleware_spec.rb +0 -188
  629. data/spec/graphql/schema/traversal_spec.rb +0 -222
  630. data/spec/graphql/schema/type_expression_spec.rb +0 -39
  631. data/spec/graphql/schema/union_spec.rb +0 -72
  632. data/spec/graphql/schema/unique_within_type_spec.rb +0 -44
  633. data/spec/graphql/schema/validation_spec.rb +0 -355
  634. data/spec/graphql/schema/warden_spec.rb +0 -926
  635. data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +0 -413
  636. data/spec/graphql/static_validation/rules/argument_names_are_unique_spec.rb +0 -44
  637. data/spec/graphql/static_validation/rules/arguments_are_defined_spec.rb +0 -112
  638. data/spec/graphql/static_validation/rules/directives_are_defined_spec.rb +0 -35
  639. data/spec/graphql/static_validation/rules/directives_are_in_valid_locations_spec.rb +0 -42
  640. data/spec/graphql/static_validation/rules/fields_are_defined_on_type_spec.rb +0 -167
  641. data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +0 -66
  642. data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +0 -740
  643. data/spec/graphql/static_validation/rules/fragment_names_are_unique_spec.rb +0 -28
  644. data/spec/graphql/static_validation/rules/fragment_spreads_are_possible_spec.rb +0 -52
  645. data/spec/graphql/static_validation/rules/fragment_types_exist_spec.rb +0 -42
  646. data/spec/graphql/static_validation/rules/fragments_are_finite_spec.rb +0 -123
  647. data/spec/graphql/static_validation/rules/fragments_are_named_spec.rb +0 -24
  648. data/spec/graphql/static_validation/rules/fragments_are_on_composite_types_spec.rb +0 -56
  649. data/spec/graphql/static_validation/rules/fragments_are_used_spec.rb +0 -61
  650. data/spec/graphql/static_validation/rules/mutation_root_exists_spec.rb +0 -39
  651. data/spec/graphql/static_validation/rules/no_definitions_are_present_spec.rb +0 -62
  652. data/spec/graphql/static_validation/rules/operation_names_are_valid_spec.rb +0 -82
  653. data/spec/graphql/static_validation/rules/required_arguments_are_present_spec.rb +0 -73
  654. data/spec/graphql/static_validation/rules/required_input_object_attributes_are_present_spec.rb +0 -58
  655. data/spec/graphql/static_validation/rules/subscription_root_exists_spec.rb +0 -34
  656. data/spec/graphql/static_validation/rules/unique_directives_per_location_spec.rb +0 -188
  657. data/spec/graphql/static_validation/rules/variable_default_values_are_correctly_typed_spec.rb +0 -196
  658. data/spec/graphql/static_validation/rules/variable_names_are_unique_spec.rb +0 -23
  659. data/spec/graphql/static_validation/rules/variable_usages_are_allowed_spec.rb +0 -236
  660. data/spec/graphql/static_validation/rules/variables_are_input_types_spec.rb +0 -78
  661. data/spec/graphql/static_validation/rules/variables_are_used_and_defined_spec.rb +0 -81
  662. data/spec/graphql/static_validation/type_stack_spec.rb +0 -29
  663. data/spec/graphql/static_validation/validator_spec.rb +0 -204
  664. data/spec/graphql/string_type_spec.rb +0 -80
  665. data/spec/graphql/subscriptions/serialize_spec.rb +0 -49
  666. data/spec/graphql/subscriptions_spec.rb +0 -502
  667. data/spec/graphql/tracing/new_relic_tracing_spec.rb +0 -63
  668. data/spec/graphql/tracing/platform_tracing_spec.rb +0 -137
  669. data/spec/graphql/tracing/prometheus_tracing_spec.rb +0 -42
  670. data/spec/graphql/tracing/scout_tracing_spec.rb +0 -17
  671. data/spec/graphql/tracing/skylight_tracing_spec.rb +0 -63
  672. data/spec/graphql/tracing_spec.rb +0 -52
  673. data/spec/graphql/types/iso_8601_date_time_spec.rb +0 -137
  674. data/spec/graphql/union_type_spec.rb +0 -211
  675. data/spec/graphql/upgrader/member_spec.rb +0 -583
  676. data/spec/graphql/upgrader/schema_spec.rb +0 -82
  677. data/spec/integration/mongoid/graphql/relay/mongo_relation_connection_spec.rb +0 -528
  678. data/spec/integration/mongoid/spec_helper.rb +0 -2
  679. data/spec/integration/mongoid/star_trek/data.rb +0 -126
  680. data/spec/integration/mongoid/star_trek/schema.rb +0 -425
  681. data/spec/integration/rails/data.rb +0 -110
  682. data/spec/integration/rails/generators/base_generator_test.rb +0 -7
  683. data/spec/integration/rails/generators/graphql/enum_generator_spec.rb +0 -30
  684. data/spec/integration/rails/generators/graphql/install_generator_spec.rb +0 -218
  685. data/spec/integration/rails/generators/graphql/interface_generator_spec.rb +0 -34
  686. data/spec/integration/rails/generators/graphql/loader_generator_spec.rb +0 -59
  687. data/spec/integration/rails/generators/graphql/mutation_generator_spec.rb +0 -71
  688. data/spec/integration/rails/generators/graphql/object_generator_spec.rb +0 -54
  689. data/spec/integration/rails/generators/graphql/scalar_generator_spec.rb +0 -28
  690. data/spec/integration/rails/generators/graphql/union_generator_spec.rb +0 -67
  691. data/spec/integration/rails/graphql/input_object_type_spec.rb +0 -364
  692. data/spec/integration/rails/graphql/query/variables_spec.rb +0 -375
  693. data/spec/integration/rails/graphql/relay/array_connection_spec.rb +0 -290
  694. data/spec/integration/rails/graphql/relay/base_connection_spec.rb +0 -101
  695. data/spec/integration/rails/graphql/relay/connection_instrumentation_spec.rb +0 -80
  696. data/spec/integration/rails/graphql/relay/connection_resolve_spec.rb +0 -79
  697. data/spec/integration/rails/graphql/relay/connection_type_spec.rb +0 -106
  698. data/spec/integration/rails/graphql/relay/edge_spec.rb +0 -10
  699. data/spec/integration/rails/graphql/relay/mutation_spec.rb +0 -387
  700. data/spec/integration/rails/graphql/relay/node_spec.rb +0 -263
  701. data/spec/integration/rails/graphql/relay/page_info_spec.rb +0 -111
  702. data/spec/integration/rails/graphql/relay/range_add_spec.rb +0 -117
  703. data/spec/integration/rails/graphql/relay/relation_connection_spec.rb +0 -837
  704. data/spec/integration/rails/graphql/schema_spec.rb +0 -476
  705. data/spec/integration/rails/graphql/tracing/active_support_notifications_tracing_spec.rb +0 -62
  706. data/spec/integration/rails/spec_helper.rb +0 -25
  707. data/spec/integration/tmp/app/graphql/types/family_type.rb +0 -9
  708. data/spec/spec_helper.rb +0 -116
  709. data/spec/support/dummy/data.rb +0 -45
  710. data/spec/support/dummy/schema.rb +0 -492
  711. data/spec/support/error_bubbling_helpers.rb +0 -23
  712. data/spec/support/global_id.rb +0 -23
  713. data/spec/support/jazz.rb +0 -759
  714. data/spec/support/lazy_helpers.rb +0 -192
  715. data/spec/support/magic_cards/schema.graphql +0 -33
  716. data/spec/support/minimum_input_object.rb +0 -21
  717. data/spec/support/new_relic.rb +0 -27
  718. data/spec/support/parser/filename_example.graphql +0 -5
  719. data/spec/support/parser/filename_example_error_1.graphql +0 -4
  720. data/spec/support/parser/filename_example_error_2.graphql +0 -5
  721. data/spec/support/skylight.rb +0 -39
  722. data/spec/support/star_wars/schema.rb +0 -465
  723. data/spec/support/static_validation_helpers.rb +0 -32
@@ -1,800 +0,0 @@
1
- # frozen_string_literal: true
2
- require "spec_helper"
3
-
4
- describe GraphQL::Query do
5
- let(:query_string) { %|
6
- query getFlavor($cheeseId: Int!) {
7
- brie: cheese(id: 1) { ...cheeseFields, taste: flavor },
8
- cheese(id: $cheeseId) {
9
- __typename,
10
- id,
11
- ...cheeseFields,
12
- ... edibleFields,
13
- ... on Cheese { cheeseKind: flavor },
14
- }
15
- fromSource(source: COW) { id }
16
- fromSheep: fromSource(source: SHEEP) { id }
17
- firstSheep: searchDairy(product: [{source: SHEEP}]) {
18
- __typename,
19
- ... dairyFields,
20
- ... milkFields
21
- }
22
- favoriteEdible { __typename, fatContent }
23
- }
24
- fragment cheeseFields on Cheese { flavor }
25
- fragment edibleFields on Edible { fatContent }
26
- fragment milkFields on Milk { source }
27
- fragment dairyFields on AnimalProduct {
28
- ... on Cheese { flavor }
29
- ... on Milk { source }
30
- }
31
- |}
32
- let(:operation_name) { nil }
33
- let(:max_depth) { nil }
34
- let(:query_variables) { {"cheeseId" => 2} }
35
- let(:schema) { Dummy::Schema }
36
- let(:document) { GraphQL.parse(query_string) }
37
-
38
- let(:query) { GraphQL::Query.new(
39
- schema,
40
- query_string,
41
- variables: query_variables,
42
- operation_name: operation_name,
43
- max_depth: max_depth,
44
- )}
45
- let(:result) { query.result }
46
-
47
- describe "when passed both a query string and a document" do
48
- it "returns an error to the client when query kwarg is used" do
49
- assert_raises ArgumentError do
50
- GraphQL::Query.new(
51
- schema,
52
- query: "{ fromSource(source: COW) { id } }",
53
- document: document
54
- )
55
- end
56
- end
57
-
58
- it "returns an error to the client" do
59
- assert_raises ArgumentError do
60
- GraphQL::Query.new(
61
- schema,
62
- "{ fromSource(source: COW) { id } }",
63
- document: document
64
- )
65
- end
66
- end
67
- end
68
-
69
- describe "when passed no query string or document" do
70
- it 'returns an error to the client' do
71
- res = GraphQL::Query.new(
72
- schema,
73
- variables: query_variables,
74
- operation_name: operation_name,
75
- max_depth: max_depth,
76
- ).result
77
- assert_equal 1, res["errors"].length
78
- assert_equal "No query string was present", res["errors"][0]["message"]
79
- end
80
-
81
- it 'can be assigned later' do
82
- query = GraphQL::Query.new(
83
- schema,
84
- variables: query_variables,
85
- operation_name: operation_name,
86
- max_depth: max_depth,
87
- )
88
- query.query_string = '{ __type(name: """Cheese""") { name } }'
89
- assert_equal "Cheese", query.result["data"] ["__type"]["name"]
90
- end
91
- end
92
-
93
- describe "#operation_name" do
94
- describe "when provided" do
95
- let(:query_string) { <<-GRAPHQL
96
- query q1 { cheese(id: 1) { flavor } }
97
- query q2 { cheese(id: 2) { flavor } }
98
- GRAPHQL
99
- }
100
- let(:operation_name) { "q2" }
101
-
102
- it "returns the provided name" do
103
- assert_equal "q2", query.operation_name
104
- end
105
- end
106
-
107
- describe "when inferred" do
108
- let(:query_string) { <<-GRAPHQL
109
- query q3 { cheese(id: 3) { flavor } }
110
- GRAPHQL
111
- }
112
-
113
- it "returns nil" do
114
- assert_nil query.operation_name
115
- end
116
- end
117
-
118
- describe "#selected_operation_name" do
119
- describe "when an operation isprovided" do
120
- let(:query_string) { <<-GRAPHQL
121
- query q1 { cheese(id: 1) { flavor } }
122
- query q2 { cheese(id: 2) { flavor } }
123
- GRAPHQL
124
- }
125
- let(:operation_name) { "q2" }
126
-
127
- it "returns the provided name" do
128
- assert_equal "q2", query.selected_operation_name
129
- end
130
- end
131
-
132
- describe "when operation is inferred" do
133
- let(:query_string) { <<-GRAPHQL
134
- query q3 { cheese(id: 3) { flavor } }
135
- GRAPHQL
136
- }
137
-
138
- it "returns the inferred operation name" do
139
- assert_equal "q3", query.selected_operation_name
140
- end
141
- end
142
-
143
- describe "when there are no operations" do
144
- let(:query_string) { <<-GRAPHQL
145
- # Only Comments
146
- # In this Query
147
- GRAPHQL
148
- }
149
-
150
- it "returns the inferred operation name" do
151
- assert_nil query.selected_operation_name
152
- end
153
- end
154
- end
155
-
156
- describe "assigning operation_name=" do
157
- let(:query_string) { <<-GRAPHQL
158
- query q3 { manchego: cheese(id: 3) { flavor } }
159
- query q2 { gouda: cheese(id: 2) { flavor } }
160
- GRAPHQL
161
- }
162
-
163
- it "runs the assigned name" do
164
- query = GraphQL::Query.new(Dummy::Schema, query_string, operation_name: "q3")
165
- query.operation_name = "q2"
166
- res = query.result
167
- assert_equal "Gouda", res["data"]["gouda"]["flavor"]
168
- end
169
- end
170
- end
171
-
172
- describe "when passed a document instance" do
173
- let(:query) { GraphQL::Query.new(
174
- schema,
175
- document: document,
176
- variables: query_variables,
177
- operation_name: operation_name,
178
- max_depth: max_depth,
179
- )}
180
-
181
- it "runs the query using the already parsed document" do
182
- expected = {"data"=> {
183
- "brie" => { "flavor" => "Brie", "taste" => "Brie" },
184
- "cheese" => {
185
- "__typename" => "Cheese",
186
- "id" => 2,
187
- "flavor" => "Gouda",
188
- "fatContent" => 0.3,
189
- "cheeseKind" => "Gouda",
190
- },
191
- "fromSource" => [{ "id" => 1 }, {"id" => 2}],
192
- "fromSheep"=>[{"id"=>3}],
193
- "firstSheep" => { "__typename" => "Cheese", "flavor" => "Manchego" },
194
- "favoriteEdible"=>{"__typename"=>"Milk", "fatContent"=>0.04},
195
- }}
196
- assert_equal(expected, result)
197
- end
198
- end
199
-
200
- describe '#result' do
201
- it "returns fields on objects" do
202
- expected = {"data"=> {
203
- "brie" => { "flavor" => "Brie", "taste" => "Brie" },
204
- "cheese" => {
205
- "__typename" => "Cheese",
206
- "id" => 2,
207
- "flavor" => "Gouda",
208
- "fatContent" => 0.3,
209
- "cheeseKind" => "Gouda",
210
- },
211
- "fromSource" => [{ "id" => 1 }, {"id" => 2}],
212
- "fromSheep"=>[{"id"=>3}],
213
- "firstSheep" => { "__typename" => "Cheese", "flavor" => "Manchego" },
214
- "favoriteEdible"=>{"__typename"=>"Milk", "fatContent"=>0.04},
215
- }}
216
- assert_equal(expected, result)
217
- end
218
-
219
- describe "when it hits null objects" do
220
- let(:query_string) {%|
221
- {
222
- maybeNull {
223
- cheese {
224
- flavor,
225
- similarCheese(source: [SHEEP]) { flavor }
226
- }
227
- }
228
- }
229
- |}
230
-
231
- it "skips null objects" do
232
- expected = {"data"=> {
233
- "maybeNull" => { "cheese" => nil }
234
- }}
235
- assert_equal(expected, result)
236
- end
237
- end
238
-
239
- describe "after_query hooks" do
240
- module Instrumenter
241
- ERROR_LOG = []
242
- def self.before_query(q); end;
243
- def self.after_query(q); ERROR_LOG << q.result["errors"]; end;
244
- end
245
-
246
- let(:schema) {
247
- Dummy::Schema.redefine {
248
- instrument(:query, Instrumenter)
249
- }
250
- }
251
- it "can access #result" do
252
- result
253
- assert_equal [nil], Instrumenter::ERROR_LOG
254
- end
255
- end
256
-
257
- describe "when an error propagated through execution" do
258
- module ExtensionsInstrumenter
259
- LOG = []
260
- def self.before_query(q); end;
261
-
262
- def self.after_query(q)
263
- q.result["extensions"] = { "a" => 1 }
264
- LOG << :ok
265
- end
266
- end
267
-
268
- let(:schema) {
269
- Dummy::Schema.redefine {
270
- instrument(:query, ExtensionsInstrumenter)
271
- }
272
- }
273
-
274
- it "can add to extensions" do
275
- ExtensionsInstrumenter::LOG.clear
276
- assert_raises(RuntimeError) do
277
- schema.execute "{ error }"
278
- end
279
- assert_equal [:ok], ExtensionsInstrumenter::LOG
280
- end
281
- end
282
- end
283
-
284
- it "uses root_value as the object for the root type" do
285
- result = GraphQL::Query.new(schema, '{ root }', root_value: "I am root").result
286
- assert_equal 'I am root', result.fetch('data').fetch('root')
287
- end
288
-
289
- it "exposes fragments" do
290
- assert_equal(GraphQL::Language::Nodes::FragmentDefinition, query.fragments["cheeseFields"].class)
291
- end
292
-
293
- it "exposes the original string" do
294
- assert_equal(query_string, query.query_string)
295
- end
296
-
297
- describe "merging fragments with different keys" do
298
- let(:query_string) { %|
299
- query getCheeseFieldsThroughDairy {
300
- ... cheeseFrag3
301
- dairy {
302
- ...flavorFragment
303
- ...fatContentFragment
304
- }
305
- }
306
- fragment flavorFragment on Dairy {
307
- cheese {
308
- flavor
309
- }
310
- milks {
311
- id
312
- }
313
- }
314
- fragment fatContentFragment on Dairy {
315
- cheese {
316
- fatContent
317
- }
318
- milks {
319
- fatContent
320
- }
321
- }
322
-
323
- fragment cheeseFrag1 on Query {
324
- cheese(id: 1) {
325
- id
326
- }
327
- }
328
- fragment cheeseFrag2 on Query {
329
- cheese(id: 1) {
330
- flavor
331
- }
332
- }
333
- fragment cheeseFrag3 on Query {
334
- ... cheeseFrag2
335
- ... cheeseFrag1
336
- }
337
- |}
338
-
339
- it "should include keys from each fragment" do
340
- expected = {"data" => {
341
- "dairy" => {
342
- "cheese" => {
343
- "flavor" => "Brie",
344
- "fatContent" => 0.19
345
- },
346
- "milks" => [
347
- {
348
- "id" => "1",
349
- "fatContent" => 0.04,
350
- }
351
- ],
352
- },
353
- "cheese" => {
354
- "id" => 1,
355
- "flavor" => "Brie"
356
- },
357
- }}
358
- assert_equal(expected, result)
359
- end
360
- end
361
-
362
- describe "field argument default values" do
363
- let(:query_string) {%|
364
- query getCheeses(
365
- $search: [DairyProductInput]
366
- $searchWithDefault: [DairyProductInput] = [{source: COW}]
367
- ){
368
- noVariable: searchDairy(product: $search) {
369
- ... cheeseFields
370
- }
371
- noArgument: searchDairy {
372
- ... cheeseFields
373
- }
374
- variableDefault: searchDairy(product: $searchWithDefault) {
375
- ... cheeseFields
376
- }
377
- convertedDefault: fromSource {
378
- ... cheeseFields
379
- }
380
- }
381
- fragment cheeseFields on Cheese { flavor }
382
- |}
383
-
384
- it "has a default value" do
385
- default_source = schema.query.fields["searchDairy"].arguments["product"].default_value[0]["source"]
386
- assert_equal("SHEEP", default_source)
387
- end
388
-
389
- describe "when a variable is used, but not provided" do
390
- it "uses the default_value" do
391
- assert_equal("Manchego", result["data"]["noVariable"]["flavor"])
392
- end
393
- end
394
-
395
- describe "when the argument isn't passed at all" do
396
- it "uses the default value" do
397
- assert_equal("Manchego", result["data"]["noArgument"]["flavor"])
398
- end
399
- end
400
-
401
- describe "when the variable has a default" do
402
- it "uses the variable default" do
403
- assert_equal("Brie", result["data"]["variableDefault"]["flavor"])
404
- end
405
- end
406
-
407
- describe "when the variable has a default needing conversion" do
408
- it "uses the converted variable default" do
409
- assert_equal([{"flavor" => "Brie"}, {"flavor" => "Gouda"}], result["data"]["convertedDefault"])
410
- end
411
- end
412
- end
413
-
414
- describe "query variables" do
415
- let(:query_string) {%|
416
- query getCheese($cheeseId: Int!){
417
- cheese(id: $cheeseId) { flavor }
418
- }
419
- |}
420
-
421
- describe "when they can be coerced" do
422
- let(:query_variables) { {"cheeseId" => 2.0} }
423
-
424
- it "coerces them on the way in" do
425
- assert("Gouda", result["data"]["cheese"]["flavor"])
426
- end
427
- end
428
-
429
- describe "when they can't be coerced" do
430
- let(:query_variables) { {"cheeseId" => "2"} }
431
-
432
- it "raises an error" do
433
- expected = {
434
- "errors" => [
435
- {
436
- "message" => "Variable cheeseId of type Int! was provided invalid value",
437
- "locations"=>[{ "line" => 2, "column" => 23 }],
438
- "extensions" => {
439
- "value" => "2",
440
- "problems" => [{ "path" => [], "explanation" => 'Could not coerce value "2" to Int' }]
441
- }
442
- }
443
- ]
444
- }
445
- assert_equal(expected, result)
446
- end
447
- end
448
-
449
- describe "when they aren't provided" do
450
- let(:query_variables) { {} }
451
-
452
- it "raises an error" do
453
- expected = {
454
- "errors" => [
455
- {
456
- "message" => "Variable cheeseId of type Int! was provided invalid value",
457
- "locations" => [{"line" => 2, "column" => 23}],
458
- "extensions" => {
459
- "value" => nil,
460
- "problems" => [{ "path" => [], "explanation" => "Expected value to not be null" }]
461
- }
462
- }
463
- ]
464
- }
465
- assert_equal(expected, result)
466
- end
467
- end
468
-
469
- describe "when they are non-null and provided a null value" do
470
- let(:query_variables) { { "cheeseId" => nil } }
471
-
472
- it "raises an error" do
473
- expected = {
474
- "errors" => [
475
- {
476
- "message" => "Variable cheeseId of type Int! was provided invalid value",
477
- "locations" => [{"line" => 2, "column" => 23}],
478
- "extensions" => {
479
- "value" => nil,
480
- "problems" => [{ "path" => [], "explanation" => "Expected value to not be null" }]
481
- }
482
- }
483
- ]
484
- }
485
- assert_equal(expected, result)
486
- end
487
- end
488
-
489
- describe "when they're a string" do
490
- let(:query_variables) { '{ "var" : 1 }' }
491
- it "raises an error" do
492
- assert_raises(ArgumentError) { result }
493
- end
494
- end
495
-
496
- describe "default values" do
497
- let(:query_string) {%|
498
- query getCheese($cheeseId: Int = 3){
499
- cheese(id: $cheeseId) { id, flavor }
500
- }
501
- |}
502
-
503
- describe "when no value is provided" do
504
- let(:query_variables) { {} }
505
-
506
- it "uses the default" do
507
- assert(3, result["data"]["cheese"]["id"])
508
- assert("Manchego", result["data"]["cheese"]["flavor"])
509
- end
510
- end
511
-
512
- describe "when a value is provided" do
513
- it "uses the provided variable" do
514
- assert(2, result["data"]["cheese"]["id"])
515
- assert("Gouda", result["data"]["cheese"]["flavor"])
516
- end
517
- end
518
-
519
- describe "when complex values" do
520
- let(:query_variables) { {"search" => [{"source" => "COW"}]} }
521
- let(:query_string) {%|
522
- query getCheeses($search: [DairyProductInput]!){
523
- cow: searchDairy(product: $search) {
524
- ... on Cheese {
525
- flavor
526
- }
527
- }
528
- }
529
- |}
530
-
531
- it "coerces recursively" do
532
- assert_equal("Brie", result["data"]["cow"]["flavor"])
533
- end
534
- end
535
- end
536
- end
537
-
538
- describe "max_depth" do
539
- let(:query_string) {
540
- <<-GRAPHQL
541
- {
542
- cheese(id: 1) {
543
- similarCheese(source: SHEEP) {
544
- similarCheese(source: SHEEP) {
545
- similarCheese(source: SHEEP) {
546
- similarCheese(source: SHEEP) {
547
- id
548
- }
549
- }
550
- }
551
- }
552
- }
553
- }
554
- GRAPHQL
555
- }
556
-
557
- it "defaults to the schema's max_depth" do
558
- # Constrained by schema's setting of 5
559
- assert_equal 1, result["errors"].length
560
- end
561
-
562
- describe "overriding max_depth" do
563
- let(:max_depth) { 12 }
564
-
565
- it "overrides the schema's max_depth" do
566
- assert result["data"].key?("cheese")
567
- assert_nil result["errors"]
568
- end
569
- end
570
- end
571
-
572
- describe "#provided_variables" do
573
- it "returns the originally-provided object" do
574
- assert_equal({"cheeseId" => 2}, query.provided_variables)
575
- end
576
- end
577
-
578
- describe "parse errors" do
579
- let(:invalid_query_string) {
580
- <<-GRAPHQL
581
- {
582
- getStuff
583
- nonsense
584
- This is broken 1
585
- }
586
- GRAPHQL
587
- }
588
- it "adds an entry to the errors key" do
589
- res = schema.execute(" { ")
590
- assert_equal 1, res["errors"].length
591
- assert_equal "Unexpected end of document", res["errors"][0]["message"]
592
- assert_equal [], res["errors"][0]["locations"]
593
-
594
- res = schema.execute(invalid_query_string)
595
- assert_equal 1, res["errors"].length
596
- assert_equal %|Parse error on "1" (INT) at [4, 26]|, res["errors"][0]["message"]
597
- assert_equal({"line" => 4, "column" => 26}, res["errors"][0]["locations"][0])
598
- end
599
-
600
- it "can be configured to raise" do
601
- raise_schema = schema.redefine(parse_error: ->(err, ctx) { raise err })
602
- assert_raises(GraphQL::ParseError) {
603
- raise_schema.execute(invalid_query_string)
604
- }
605
- end
606
- end
607
-
608
- describe "#mutation?" do
609
- let(:query_string) { <<-GRAPHQL
610
- query Q { __typename }
611
- mutation M { pushValue(value: 1) }
612
- GRAPHQL
613
- }
614
-
615
- it "returns true if the selected operation is a mutation" do
616
- query_query = GraphQL::Query.new(schema, query_string, operation_name: "Q")
617
- assert_equal false, query_query.mutation?
618
- assert_equal true, query_query.query?
619
-
620
- mutation_query = GraphQL::Query.new(schema, query_string, operation_name: "M")
621
- assert_equal true, mutation_query.mutation?
622
- assert_equal false, mutation_query.query?
623
- end
624
- end
625
-
626
- describe "validate: false" do
627
- it "doesn't validate the query" do
628
- invalid_query_string = "{ nonExistantField }"
629
- # Can assign attribute
630
- query = GraphQL::Query.new(schema, invalid_query_string)
631
- query.validate = false
632
- assert_equal true, query.valid?
633
- assert_equal 0, query.static_errors.length
634
-
635
- # Can pass keyword argument
636
- query = GraphQL::Query.new(schema, invalid_query_string, validate: false)
637
- assert_equal true, query.valid?
638
- assert_equal 0, query.static_errors.length
639
-
640
- # Can pass `true`
641
- query = GraphQL::Query.new(schema, invalid_query_string, validate: true)
642
- assert_equal false, query.valid?
643
- assert_equal 1, query.static_errors.length
644
- end
645
- end
646
-
647
- describe "validating with optional arguments and variables: nil" do
648
- it "works" do
649
- query_str = <<-GRAPHQL
650
- query($expiresAfter: Time) {
651
- searchDairy(expiresAfter: $expiresAfter) {
652
- __typename
653
- }
654
- }
655
- GRAPHQL
656
- query = GraphQL::Query.new(schema, query_str, variables: nil)
657
- assert query.valid?
658
- end
659
- end
660
-
661
- describe 'NullValue type arguments' do
662
- let(:schema_definition) {
663
- <<-GRAPHQL
664
- type Query {
665
- foo(id: [ID]): Int
666
- }
667
- GRAPHQL
668
- }
669
- let(:expected_args) { [] }
670
- let(:default_resolver) do
671
- {
672
- 'Query' => { 'foo' => ->(_obj, args, _ctx) { expected_args.push(args); 1 } },
673
- }
674
- end
675
- let(:schema) { GraphQL::Schema.from_definition(schema_definition, default_resolve: default_resolver) }
676
-
677
- it 'sets argument to nil when null is passed' do
678
- query = <<-GRAPHQL
679
- {
680
- foo(id: null)
681
- }
682
- GRAPHQL
683
-
684
- schema.execute(query)
685
-
686
- assert(expected_args.first.key?('id'))
687
- assert_nil(expected_args.first['id'])
688
- end
689
-
690
- it 'sets argument to nil when nil is passed via variable' do
691
- query = <<-GRAPHQL
692
- query baz($id: [ID]) {
693
- foo(id: $id)
694
- }
695
- GRAPHQL
696
-
697
- schema.execute(query, variables: { 'id' => nil })
698
-
699
- assert(expected_args.first.key?('id'))
700
- assert([nil], expected_args.first['id'])
701
- end
702
-
703
- it 'sets argument to [nil] when [null] is passed' do
704
- query = <<-GRAPHQL
705
- {
706
- foo(id: [null])
707
- }
708
- GRAPHQL
709
-
710
- schema.execute(query)
711
-
712
- assert(expected_args.first.key?('id'))
713
- assert_equal([nil], expected_args.first['id'])
714
- end
715
-
716
- it 'sets argument to [nil] when [nil] is passed via variable' do
717
- query = <<-GRAPHQL
718
- query baz($id: [ID]) {
719
- foo(id: $id)
720
- }
721
- GRAPHQL
722
-
723
- schema.execute(query, variables: { 'id' => [nil] })
724
-
725
- assert(expected_args.first.key?('id'))
726
- assert_equal([nil], expected_args.first['id'])
727
- end
728
- end
729
-
730
- describe '#internal_representation' do
731
- it "includes all definition roots" do
732
- assert_kind_of GraphQL::InternalRepresentation::Node, query.internal_representation.operation_definitions["getFlavor"]
733
- assert_kind_of GraphQL::InternalRepresentation::Node, query.internal_representation.fragment_definitions["cheeseFields"]
734
- assert_kind_of GraphQL::InternalRepresentation::Node, query.internal_representation.fragment_definitions["edibleFields"]
735
- assert_kind_of GraphQL::InternalRepresentation::Node, query.internal_representation.fragment_definitions["milkFields"]
736
- assert_kind_of GraphQL::InternalRepresentation::Node, query.internal_representation.fragment_definitions["dairyFields"]
737
- end
738
- end
739
-
740
- describe '#irep_selection' do
741
- it "returns the irep for the selected operation" do
742
- assert_kind_of GraphQL::InternalRepresentation::Node, query.irep_selection
743
- assert_equal 'getFlavor', query.irep_selection.name
744
- end
745
-
746
- it "returns nil when there is no selected operation" do
747
- query = GraphQL::Query.new(schema, '# Only a comment')
748
- assert_nil query.irep_selection
749
- end
750
- end
751
-
752
- describe "query_execution_strategy" do
753
- let(:custom_execution_schema) {
754
- schema.redefine do
755
- query_execution_strategy DummyStrategy
756
- instrument(:multiplex, DummyMultiplexInstrumenter)
757
- end
758
- }
759
-
760
- class DummyStrategy
761
- def execute(ast_operation, root_type, query_object)
762
- { "dummy" => true }
763
- end
764
- end
765
-
766
- class DummyMultiplexInstrumenter
767
- def self.before_multiplex(m)
768
- m.queries.first.context[:before_multiplex] = true
769
- end
770
-
771
- def self.after_multiplex(m)
772
- end
773
- end
774
-
775
- it "is used for running a query, if it's present and not the default" do
776
- result = custom_execution_schema.execute(" { __typename }")
777
- assert_equal({"data"=>{"dummy"=>true}}, result)
778
-
779
- result = custom_execution_schema.execute(" mutation { __typename } ")
780
- assert_equal({"data"=>{"__typename" => "Mutation"}}, result)
781
- end
782
-
783
- it "treats the query as a one-item multiplex" do
784
- ctx = {}
785
- custom_execution_schema.execute(" { __typename }", context: ctx)
786
- assert_equal true, ctx[:before_multiplex]
787
- end
788
-
789
- it "can't run a multiplex" do
790
- err = assert_raises ArgumentError do
791
- custom_execution_schema.multiplex([
792
- {query: " { __typename }"},
793
- {query: " { __typename }"},
794
- ])
795
- end
796
- msg = "Multiplexing doesn't support custom execution strategies, run one query at a time instead"
797
- assert_equal msg, err.message
798
- end
799
- end
800
- end