graphql 1.7.6 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (289) hide show
  1. checksums.yaml +4 -4
  2. data/lib/generators/graphql/function_generator.rb +1 -1
  3. data/lib/generators/graphql/install_generator.rb +14 -8
  4. data/lib/generators/graphql/loader_generator.rb +1 -1
  5. data/lib/generators/graphql/mutation_generator.rb +6 -1
  6. data/lib/generators/graphql/templates/function.erb +2 -2
  7. data/lib/generators/graphql/templates/loader.erb +2 -2
  8. data/lib/generators/graphql/templates/schema.erb +1 -1
  9. data/lib/graphql/argument.rb +25 -19
  10. data/lib/graphql/backtrace/tracer.rb +16 -22
  11. data/lib/graphql/backtrace.rb +1 -1
  12. data/lib/graphql/backwards_compatibility.rb +2 -3
  13. data/lib/graphql/base_type.rb +31 -31
  14. data/lib/graphql/compatibility/query_parser_specification/parse_error_specification.rb +14 -0
  15. data/lib/graphql/compatibility/query_parser_specification.rb +117 -0
  16. data/lib/graphql/define/assign_object_field.rb +5 -12
  17. data/lib/graphql/deprecated_dsl.rb +42 -0
  18. data/lib/graphql/directive.rb +1 -0
  19. data/lib/graphql/enum_type.rb +3 -1
  20. data/lib/graphql/execution/execute.rb +21 -13
  21. data/lib/graphql/execution/instrumentation.rb +82 -0
  22. data/lib/graphql/execution/lazy/lazy_method_map.rb +1 -1
  23. data/lib/graphql/execution/lazy/resolve.rb +1 -3
  24. data/lib/graphql/execution/multiplex.rb +12 -29
  25. data/lib/graphql/execution.rb +1 -0
  26. data/lib/graphql/field.rb +21 -4
  27. data/lib/graphql/function.rb +14 -0
  28. data/lib/graphql/input_object_type.rb +3 -1
  29. data/lib/graphql/interface_type.rb +5 -3
  30. data/lib/graphql/internal_representation/node.rb +26 -14
  31. data/lib/graphql/internal_representation/visit.rb +3 -6
  32. data/lib/graphql/introspection/base_object.rb +16 -0
  33. data/lib/graphql/introspection/directive_location_enum.rb +11 -7
  34. data/lib/graphql/introspection/directive_type.rb +23 -16
  35. data/lib/graphql/introspection/dynamic_fields.rb +11 -0
  36. data/lib/graphql/introspection/entry_points.rb +29 -0
  37. data/lib/graphql/introspection/enum_value_type.rb +16 -11
  38. data/lib/graphql/introspection/field_type.rb +21 -12
  39. data/lib/graphql/introspection/input_value_type.rb +26 -23
  40. data/lib/graphql/introspection/schema_field.rb +7 -2
  41. data/lib/graphql/introspection/schema_type.rb +36 -22
  42. data/lib/graphql/introspection/type_by_name_field.rb +10 -2
  43. data/lib/graphql/introspection/type_kind_enum.rb +10 -6
  44. data/lib/graphql/introspection/type_type.rb +85 -23
  45. data/lib/graphql/introspection/typename_field.rb +1 -0
  46. data/lib/graphql/introspection.rb +3 -10
  47. data/lib/graphql/language/block_string.rb +47 -0
  48. data/lib/graphql/language/document_from_schema_definition.rb +280 -0
  49. data/lib/graphql/language/generation.rb +3 -182
  50. data/lib/graphql/language/lexer.rb +144 -69
  51. data/lib/graphql/language/lexer.rl +15 -4
  52. data/lib/graphql/language/nodes.rb +141 -78
  53. data/lib/graphql/language/parser.rb +677 -630
  54. data/lib/graphql/language/parser.y +18 -12
  55. data/lib/graphql/language/printer.rb +361 -0
  56. data/lib/graphql/language/token.rb +10 -3
  57. data/lib/graphql/language.rb +3 -0
  58. data/lib/graphql/non_null_type.rb +1 -1
  59. data/lib/graphql/object_type.rb +1 -6
  60. data/lib/graphql/query/arguments.rb +63 -32
  61. data/lib/graphql/query/context.rb +32 -2
  62. data/lib/graphql/query/literal_input.rb +4 -1
  63. data/lib/graphql/query/null_context.rb +1 -1
  64. data/lib/graphql/query/result.rb +1 -1
  65. data/lib/graphql/query/variables.rb +21 -3
  66. data/lib/graphql/query.rb +19 -6
  67. data/lib/graphql/railtie.rb +109 -0
  68. data/lib/graphql/relay/connection_resolve.rb +3 -0
  69. data/lib/graphql/relay/connection_type.rb +5 -3
  70. data/lib/graphql/relay/edge_type.rb +2 -1
  71. data/lib/graphql/relay/global_id_resolve.rb +5 -1
  72. data/lib/graphql/relay/mongo_relation_connection.rb +40 -0
  73. data/lib/graphql/relay/mutation/instrumentation.rb +1 -1
  74. data/lib/graphql/relay/mutation/resolve.rb +5 -1
  75. data/lib/graphql/relay/relation_connection.rb +14 -19
  76. data/lib/graphql/relay/type_extensions.rb +30 -0
  77. data/lib/graphql/relay.rb +2 -0
  78. data/lib/graphql/scalar_type.rb +14 -2
  79. data/lib/graphql/schema/argument.rb +92 -0
  80. data/lib/graphql/schema/build_from_definition.rb +64 -18
  81. data/lib/graphql/schema/enum.rb +85 -0
  82. data/lib/graphql/schema/enum_value.rb +74 -0
  83. data/lib/graphql/schema/field.rb +372 -0
  84. data/lib/graphql/schema/finder.rb +153 -0
  85. data/lib/graphql/schema/input_object.rb +87 -0
  86. data/lib/graphql/schema/interface.rb +105 -0
  87. data/lib/graphql/schema/introspection_system.rb +93 -0
  88. data/lib/graphql/schema/late_bound_type.rb +32 -0
  89. data/lib/graphql/schema/list.rb +32 -0
  90. data/lib/graphql/schema/loader.rb +2 -2
  91. data/lib/graphql/schema/member/accepts_definition.rb +152 -0
  92. data/lib/graphql/schema/member/base_dsl_methods.rb +100 -0
  93. data/lib/graphql/schema/member/build_type.rb +137 -0
  94. data/lib/graphql/schema/member/cached_graphql_definition.rb +26 -0
  95. data/lib/graphql/schema/member/graphql_type_names.rb +21 -0
  96. data/lib/graphql/schema/member/has_arguments.rb +50 -0
  97. data/lib/graphql/schema/member/has_fields.rb +130 -0
  98. data/lib/graphql/schema/member/instrumentation.rb +115 -0
  99. data/lib/graphql/schema/member/type_system_helpers.rb +34 -0
  100. data/lib/graphql/schema/member.rb +28 -0
  101. data/lib/graphql/schema/middleware_chain.rb +5 -1
  102. data/lib/graphql/schema/mutation.rb +138 -0
  103. data/lib/graphql/schema/non_null.rb +38 -0
  104. data/lib/graphql/schema/object.rb +81 -0
  105. data/lib/graphql/schema/printer.rb +33 -266
  106. data/lib/graphql/schema/relay_classic_mutation.rb +87 -0
  107. data/lib/graphql/schema/rescue_middleware.rb +8 -7
  108. data/lib/graphql/schema/resolver.rb +122 -0
  109. data/lib/graphql/schema/scalar.rb +35 -0
  110. data/lib/graphql/schema/traversal.rb +102 -22
  111. data/lib/graphql/schema/union.rb +36 -0
  112. data/lib/graphql/schema/validation.rb +3 -2
  113. data/lib/graphql/schema.rb +381 -12
  114. data/lib/graphql/static_validation/definition_dependencies.rb +1 -1
  115. data/lib/graphql/static_validation/literal_validator.rb +16 -4
  116. data/lib/graphql/static_validation/rules/fields_are_defined_on_type.rb +6 -6
  117. data/lib/graphql/static_validation/rules/fields_have_appropriate_selections.rb +5 -1
  118. data/lib/graphql/static_validation/rules/fields_will_merge.rb +15 -8
  119. data/lib/graphql/static_validation/rules/variables_are_used_and_defined.rb +11 -1
  120. data/lib/graphql/static_validation/validation_context.rb +1 -1
  121. data/lib/graphql/subscriptions/action_cable_subscriptions.rb +7 -5
  122. data/lib/graphql/subscriptions/instrumentation.rb +5 -1
  123. data/lib/graphql/subscriptions/serialize.rb +2 -0
  124. data/lib/graphql/subscriptions.rb +90 -16
  125. data/lib/graphql/tracing/data_dog_tracing.rb +49 -0
  126. data/lib/graphql/tracing/new_relic_tracing.rb +26 -0
  127. data/lib/graphql/tracing/platform_tracing.rb +20 -7
  128. data/lib/graphql/tracing/scout_tracing.rb +2 -2
  129. data/lib/graphql/tracing.rb +1 -0
  130. data/lib/graphql/unresolved_type_error.rb +3 -2
  131. data/lib/graphql/upgrader/member.rb +894 -0
  132. data/lib/graphql/upgrader/schema.rb +37 -0
  133. data/lib/graphql/version.rb +1 -1
  134. data/lib/graphql.rb +5 -25
  135. data/readme.md +2 -2
  136. data/spec/dummy/app/channels/graphql_channel.rb +23 -2
  137. data/spec/dummy/log/development.log +239 -0
  138. data/spec/dummy/log/test.log +410 -0
  139. data/spec/dummy/test/system/action_cable_subscription_test.rb +4 -0
  140. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-x/-xYZjAnuuzgR79fcznLTQtSdh6AARxu8FcQ_J6p7L3U.cache +0 -0
  141. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/13/13HiV12xyoQvT-1L39ZzLwMZxjyaGMiENmfw7f-QTIc.cache +0 -0
  142. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/3W/3Wtf5pCWdqq0AB-iB0Y9uUNrTkruRxIEf1XFn_BETU0.cache +1 -0
  143. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5i/5iguGafb4hOn8262Kn8Q37ogNN9MxxQKGKNzHAzUcvI.cache +1 -0
  144. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/8m/8mj2T6yy847Mc2Z7k3Xzh8O91hhVJt3NrPe8ASNDlIA.cache +1 -0
  145. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/DT/DTQyMpr4ABZYQetsdRJ5A7S4jf1r3ie4FGOR7GZBNSs.cache +3 -0
  146. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Dq/DqJ5_yJPrP5iLlOQyTQsjAVI5FE5LCVDkED0f7GgsSo.cache +3 -0
  147. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/F8/F8MUNRzORGFgr329fNM0xLaoWCXdv3BIalT7dsvLfjs.cache +0 -0
  148. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/KB/KB07ZaKNC5uXJ7TjLi-WqnY6g7dq8wWp_8N3HNjBNxg.cache +0 -0
  149. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Rw/RwDuCV-XpnCtjNkvhpJfBuxXMk0b5AD3L9eR6M-wcy0.cache +3 -0
  150. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/UL/ULdjhhb0bRuqmaG7XSZlFYzGYCXTDnqZuJBTWRlzqgw.cache +0 -0
  151. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Up/UpPNgh0yYoUsyMDh5zWqe_U6qJIyTC6-dxMMAs1vvlM.cache +1 -0
  152. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Wg/Wguh-szFGTI1gaL6npYwPekMXflugRei7F_mOyRucXg.cache +0 -0
  153. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/X-/X-khLYMA9mqFRPg3zAi86mREDxpKl4bdKYp3uF6WHos.cache +0 -0
  154. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/bi/BIkdhfxsezxM4q-HZ4oCNTq97WEJTigcq0tpX2cDvbY.cache +0 -0
  155. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ff/FfxmA4CMHQZT7exx0G7NS1Wpcnny0vzp-Jhc2H36bp8.cache +1 -0
  156. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gE/gEiiG4GZNy_djEjK2pHm_NgA-gyhLZhdQvo0Yt96GqE.cache +0 -0
  157. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/gn/gnA9ZSqpjccNL2m8pe_jBvY6SinXlCzXDWyop83Od8s.cache +1 -0
  158. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/lO/lOAan3cMwCE_Hli6gsDML88xFNfn0nxPmvrSkW7eEOw.cache +1 -0
  159. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m1/M1pv8MJEPLXGLvS8QxVh3DSO9cI4mRt5FHFWdrvUj6o.cache +2 -0
  160. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/m7/m77qH7ZqH0_0SmwJbiKGDd-aLau1Dav847DC6ge46zY.cache +1 -0
  161. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/sj/sjRjnjRB37lH2vrgtkdJ8Cz84__IJ978IuKTM7HcztI.cache +0 -0
  162. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/um/um1JrirR4hJhK-1rE-HywlyCi5ibgxHVrReiujZBWJM.cache +1 -0
  163. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/v4/v4fwVytD7ITcE0_GDbslZEYud8a5Okm85fV1o7SDl6g.cache +0 -0
  164. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/v_/v_0PAQt0iipQjFP5zjgkkk9Stnpf4VzvnMv67d1Keuw.cache +1 -0
  165. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/wd/wdT9U4MKxe1PyqNjVuCKMpCl3dxGCIRJIlwUTfh2DQU.cache +1 -0
  166. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/xI/xIaxut_fEIhKBDqljTNwYaADK9kj3gG0ESrfHs-5_og.cache +3 -0
  167. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/y0/y0SJOqIx2fn1SKqOkAihsQow0trRJrSIyAswufVuoA8.cache +0 -0
  168. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zg/zgpzeaX-KZErHyGJ1aBH3ZusweNXMneVZule88XsIJI.cache +1 -0
  169. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zy/zYFltDy-8VC-uKq2BVEiJJyYXNFvVzAKuMlR3ZIYZsk.cache +0 -0
  170. data/spec/dummy/tmp/screenshots/failures_test_it_handles_subscriptions.png +0 -0
  171. data/spec/fixtures/upgrader/account.original.rb +19 -0
  172. data/spec/fixtures/upgrader/account.transformed.rb +20 -0
  173. data/spec/fixtures/upgrader/blame_range.original.rb +43 -0
  174. data/spec/fixtures/upgrader/blame_range.transformed.rb +30 -0
  175. data/spec/fixtures/upgrader/date_time.original.rb +24 -0
  176. data/spec/fixtures/upgrader/date_time.transformed.rb +23 -0
  177. data/spec/fixtures/upgrader/delete_project.original.rb +28 -0
  178. data/spec/fixtures/upgrader/delete_project.transformed.rb +27 -0
  179. data/spec/fixtures/upgrader/gist_order_field.original.rb +14 -0
  180. data/spec/fixtures/upgrader/gist_order_field.transformed.rb +13 -0
  181. data/spec/fixtures/upgrader/increment_count.original.rb +59 -0
  182. data/spec/fixtures/upgrader/increment_count.transformed.rb +50 -0
  183. data/spec/fixtures/upgrader/photo.original.rb +10 -0
  184. data/spec/fixtures/upgrader/photo.transformed.rb +12 -0
  185. data/spec/fixtures/upgrader/release_order.original.rb +15 -0
  186. data/spec/fixtures/upgrader/release_order.transformed.rb +14 -0
  187. data/spec/fixtures/upgrader/starrable.original.rb +49 -0
  188. data/spec/fixtures/upgrader/starrable.transformed.rb +46 -0
  189. data/spec/fixtures/upgrader/subscribable.original.rb +55 -0
  190. data/spec/fixtures/upgrader/subscribable.transformed.rb +51 -0
  191. data/spec/fixtures/upgrader/type_x.original.rb +65 -0
  192. data/spec/fixtures/upgrader/type_x.transformed.rb +56 -0
  193. data/spec/generators/graphql/function_generator_spec.rb +26 -0
  194. data/spec/generators/graphql/install_generator_spec.rb +1 -1
  195. data/spec/generators/graphql/loader_generator_spec.rb +24 -0
  196. data/spec/graphql/analysis/max_query_complexity_spec.rb +3 -3
  197. data/spec/graphql/analysis/max_query_depth_spec.rb +3 -3
  198. data/spec/graphql/argument_spec.rb +21 -0
  199. data/spec/graphql/backtrace_spec.rb +10 -0
  200. data/spec/graphql/base_type_spec.rb +42 -0
  201. data/spec/graphql/boolean_type_spec.rb +3 -3
  202. data/spec/graphql/directive_spec.rb +3 -1
  203. data/spec/graphql/enum_type_spec.rb +18 -5
  204. data/spec/graphql/execution/execute_spec.rb +4 -4
  205. data/spec/graphql/execution/instrumentation_spec.rb +165 -0
  206. data/spec/graphql/execution/multiplex_spec.rb +2 -2
  207. data/spec/graphql/execution_error_spec.rb +18 -0
  208. data/spec/graphql/float_type_spec.rb +2 -2
  209. data/spec/graphql/id_type_spec.rb +1 -1
  210. data/spec/graphql/input_object_type_spec.rb +15 -2
  211. data/spec/graphql/int_type_spec.rb +2 -2
  212. data/spec/graphql/interface_type_spec.rb +12 -0
  213. data/spec/graphql/internal_representation/rewrite_spec.rb +2 -2
  214. data/spec/graphql/introspection/schema_type_spec.rb +2 -0
  215. data/spec/graphql/language/block_string_spec.rb +70 -0
  216. data/spec/graphql/language/document_from_schema_definition_spec.rb +770 -0
  217. data/spec/graphql/language/generation_spec.rb +21 -186
  218. data/spec/graphql/language/lexer_spec.rb +21 -1
  219. data/spec/graphql/language/nodes_spec.rb +21 -12
  220. data/spec/graphql/language/parser_spec.rb +1 -1
  221. data/spec/graphql/language/printer_spec.rb +203 -0
  222. data/spec/graphql/object_type_spec.rb +22 -0
  223. data/spec/graphql/query/arguments_spec.rb +25 -15
  224. data/spec/graphql/query/context_spec.rb +18 -0
  225. data/spec/graphql/query/executor_spec.rb +2 -1
  226. data/spec/graphql/query/serial_execution/value_resolution_spec.rb +2 -8
  227. data/spec/graphql/query/variables_spec.rb +42 -1
  228. data/spec/graphql/query_spec.rb +31 -5
  229. data/spec/graphql/rake_task_spec.rb +3 -1
  230. data/spec/graphql/relay/base_connection_spec.rb +1 -1
  231. data/spec/graphql/relay/connection_instrumentation_spec.rb +2 -2
  232. data/spec/graphql/relay/connection_resolve_spec.rb +1 -1
  233. data/spec/graphql/relay/connection_type_spec.rb +1 -1
  234. data/spec/graphql/relay/mongo_relation_connection_spec.rb +474 -0
  235. data/spec/graphql/relay/mutation_spec.rb +9 -7
  236. data/spec/graphql/relay/range_add_spec.rb +5 -1
  237. data/spec/graphql/relay/relation_connection_spec.rb +65 -1
  238. data/spec/graphql/schema/argument_spec.rb +87 -0
  239. data/spec/graphql/schema/build_from_definition_spec.rb +89 -5
  240. data/spec/graphql/schema/enum_spec.rb +74 -0
  241. data/spec/graphql/schema/field_spec.rb +225 -0
  242. data/spec/graphql/schema/finder_spec.rb +135 -0
  243. data/spec/graphql/schema/input_object_spec.rb +111 -0
  244. data/spec/graphql/schema/instrumentation_spec.rb +40 -0
  245. data/spec/graphql/schema/interface_spec.rb +185 -0
  246. data/spec/graphql/schema/introspection_system_spec.rb +39 -0
  247. data/spec/graphql/schema/member/accepts_definition_spec.rb +111 -0
  248. data/spec/graphql/schema/member/build_type_spec.rb +17 -0
  249. data/spec/graphql/schema/member/has_fields_spec.rb +129 -0
  250. data/spec/graphql/schema/member/type_system_helpers_spec.rb +63 -0
  251. data/spec/graphql/schema/mutation_spec.rb +148 -0
  252. data/spec/graphql/schema/object_spec.rb +175 -0
  253. data/spec/graphql/schema/printer_spec.rb +111 -15
  254. data/spec/graphql/schema/relay_classic_mutation_spec.rb +38 -0
  255. data/spec/graphql/schema/rescue_middleware_spec.rb +11 -0
  256. data/spec/graphql/schema/resolver_spec.rb +131 -0
  257. data/spec/graphql/schema/scalar_spec.rb +95 -0
  258. data/spec/graphql/schema/traversal_spec.rb +31 -0
  259. data/spec/graphql/schema/union_spec.rb +65 -0
  260. data/spec/graphql/schema/validation_spec.rb +1 -1
  261. data/spec/graphql/schema/warden_spec.rb +11 -11
  262. data/spec/graphql/schema_spec.rb +55 -12
  263. data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +10 -2
  264. data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +2 -2
  265. data/spec/graphql/string_type_spec.rb +3 -3
  266. data/spec/graphql/subscriptions_spec.rb +273 -184
  267. data/spec/graphql/tracing/active_support_notifications_tracing_spec.rb +1 -1
  268. data/spec/graphql/tracing/new_relic_tracing_spec.rb +47 -0
  269. data/spec/graphql/tracing/platform_tracing_spec.rb +60 -1
  270. data/spec/graphql/union_type_spec.rb +1 -1
  271. data/spec/graphql/upgrader/member_spec.rb +516 -0
  272. data/spec/graphql/upgrader/schema_spec.rb +82 -0
  273. data/spec/spec_helper.rb +8 -0
  274. data/spec/support/dummy/schema.rb +53 -24
  275. data/spec/support/jazz.rb +544 -0
  276. data/spec/support/lazy_helpers.rb +21 -23
  277. data/spec/support/new_relic.rb +24 -0
  278. data/spec/support/star_trek/data.rb +109 -0
  279. data/spec/support/star_trek/schema.rb +388 -0
  280. data/spec/support/star_wars/data.rb +6 -7
  281. data/spec/support/star_wars/schema.rb +127 -171
  282. metadata +233 -11
  283. data/lib/graphql/introspection/arguments_field.rb +0 -7
  284. data/lib/graphql/introspection/enum_values_field.rb +0 -18
  285. data/lib/graphql/introspection/fields_field.rb +0 -13
  286. data/lib/graphql/introspection/input_fields_field.rb +0 -12
  287. data/lib/graphql/introspection/interfaces_field.rb +0 -11
  288. data/lib/graphql/introspection/of_type_field.rb +0 -6
  289. data/lib/graphql/introspection/possible_types_field.rb +0 -11
@@ -14,7 +14,11 @@ describe GraphQL::Schema::Printer do
14
14
 
15
15
  value "FOO", value: :foo
16
16
  value "BAR", value: :bar
17
- value "BAZ", deprecation_reason: 'Use "BAR".'
17
+ value "BAZ", deprecation_reason: <<-REASON
18
+ Use "BAR" instead.
19
+
20
+ It's the replacement for this value.
21
+ REASON
18
22
  value "WOZ", deprecation_reason: GraphQL::Directive::DEFAULT_DEPRECATION_REASON
19
23
  end
20
24
 
@@ -136,6 +140,14 @@ schema {
136
140
  query: Root
137
141
  }
138
142
 
143
+ # Marks an element of a GraphQL schema as no longer supported.
144
+ directive @deprecated(
145
+ # Explains why this element was deprecated, usually also including a suggestion
146
+ # for how to access supported similar data. Formatted in
147
+ # [Markdown](https://daringfireball.net/projects/markdown/).
148
+ reason: String = "No longer supported"
149
+ ) on FIELD_DEFINITION | ENUM_VALUE
150
+
139
151
  # Directs the executor to include this field or fragment only when the `if` argument is true.
140
152
  directive @include(
141
153
  # Included when true.
@@ -148,14 +160,6 @@ directive @skip(
148
160
  if: Boolean!
149
161
  ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
150
162
 
151
- # Marks an element of a GraphQL schema as no longer supported.
152
- directive @deprecated(
153
- # Explains why this element was deprecated, usually also including a suggestion
154
- # for how to access supported similar data. Formatted in
155
- # [Markdown](https://daringfireball.net/projects/markdown/).
156
- reason: String = "No longer supported"
157
- ) on FIELD_DEFINITION | ENUM_VALUE
158
-
159
163
  # A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.
160
164
  #
161
165
  # In some cases, you need to provide options to alter GraphQL's execution behavior
@@ -345,7 +349,6 @@ schema {
345
349
  subscription: Subscription
346
350
  }
347
351
  SCHEMA
348
-
349
352
  assert_match expected, GraphQL::Schema::Printer.print_schema(custom_schema)
350
353
  end
351
354
 
@@ -353,7 +356,6 @@ SCHEMA
353
356
  custom_mutation = schema.mutation.redefine(name: "MyMutationRoot")
354
357
  custom_schema = schema.redefine(mutation: custom_mutation)
355
358
 
356
-
357
359
  expected = <<SCHEMA
358
360
  schema {
359
361
  query: Query
@@ -390,7 +392,7 @@ type Audio {
390
392
 
391
393
  enum Choice {
392
394
  BAR
393
- BAZ @deprecated(reason: "Use \\\"BAR\\\".")
395
+ BAZ @deprecated(reason: "Use \\\"BAR\\\" instead.\\n\\nIt's the replacement for this value.\\n")
394
396
  FOO
395
397
  WOZ @deprecated
396
398
  }
@@ -479,6 +481,25 @@ SCHEMA
479
481
 
480
482
  assert_equal expected.chomp, GraphQL::Schema::Printer.print_schema(schema)
481
483
  end
484
+
485
+ it 'prints a schema without directives' do
486
+ query_type = Class.new(GraphQL::Schema::Object) do
487
+ graphql_name 'Query'
488
+
489
+ field :foobar, Integer, null: false
490
+
491
+ def foobar
492
+ 152
493
+ end
494
+ end
495
+
496
+ schema = Class.new(GraphQL::Schema) do
497
+ query query_type
498
+ end
499
+
500
+ expected = "type Query {\n foobar: Int!\n}"
501
+ assert_equal expected, GraphQL::Schema::Printer.new(schema).print_schema
502
+ end
482
503
  end
483
504
 
484
505
  it "applies an `only` filter" do
@@ -489,7 +510,6 @@ enum Choice {
489
510
  }
490
511
 
491
512
  type Subscription {
492
-
493
513
  }
494
514
 
495
515
  input Varied {
@@ -509,7 +529,9 @@ SCHEMA
509
529
  when GraphQL::Argument
510
530
  member.name != "id"
511
531
  else
512
- member.deprecation_reason.nil?
532
+ if member.respond_to?(:deprecation_reason)
533
+ member.deprecation_reason.nil?
534
+ end
513
535
  end
514
536
  }
515
537
 
@@ -600,12 +622,86 @@ SCHEMA
600
622
  type Post {
601
623
  body: String!
602
624
  comments: [Comment!]
603
- comments_count: Int! @deprecated(reason: \"Use \\\"comments\\\".\")
625
+ comments_count: Int! @deprecated(reason: "Use \\\"comments\\\".")
604
626
  id: ID!
605
627
  title: String!
606
628
  }
607
629
  SCHEMA
608
630
  assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema).print_type(schema.types['Post'])
609
631
  end
632
+
633
+ it "can print arguments that use non-standard Ruby objects as default values" do
634
+ backing_object = Struct.new(:value)
635
+
636
+ scalar_type = GraphQL::ScalarType.define do
637
+ name "SomeType"
638
+ coerce_input ->(value, ctx) { backing_object.new(value) }
639
+ coerce_result ->(obj, ctx) { obj.value }
640
+ end
641
+
642
+ query_root = GraphQL::ObjectType.define do
643
+ name "Query"
644
+ description "The query root of this schema"
645
+
646
+ field :example do
647
+ type scalar_type
648
+ argument :input, scalar_type, default_value: backing_object.new("Howdy")
649
+ resolve ->(obj, args, ctx) { args[:input] }
650
+ end
651
+ end
652
+
653
+ schema = GraphQL::Schema.define do
654
+ query query_root
655
+ end
656
+
657
+ expected = <<SCHEMA
658
+ # The query root of this schema
659
+ type Query {
660
+ example(input: SomeType = "Howdy"): SomeType
661
+ }
662
+ SCHEMA
663
+
664
+ assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema).print_type(query_root)
665
+ end
666
+ end
667
+
668
+ describe "#print_directive" do
669
+ it "prints the deprecation reason in a single line escaped string including line breaks" do
670
+ expected = <<SCHEMA
671
+ enum Choice {
672
+ BAR
673
+ BAZ @deprecated(reason: "Use \\\"BAR\\\" instead.\\n\\nIt's the replacement for this value.\\n")
674
+ FOO
675
+ WOZ @deprecated
676
+ }
677
+
678
+ type Subscription {
679
+ }
680
+
681
+ input Varied {
682
+ bool: Boolean
683
+ enum: Choice = FOO
684
+ float: Float
685
+ int: Int
686
+ }
687
+ SCHEMA
688
+
689
+ only_filter = ->(member, ctx) {
690
+ case member
691
+ when GraphQL::ScalarType
692
+ true
693
+ when GraphQL::BaseType
694
+ ctx[:names].include?(member.name)
695
+ when GraphQL::Argument
696
+ member.name != "id"
697
+ else
698
+ true
699
+ end
700
+ }
701
+
702
+ context = { names: ["Varied", "Choice", "Subscription"] }
703
+
704
+ assert_equal expected.chomp, GraphQL::Schema::Printer.new(schema, context: context, only: only_filter).print_schema
705
+ end
610
706
  end
611
707
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe GraphQL::Schema::RelayClassicMutation do
5
+ describe ".input_object_class" do
6
+ it "is inherited, with a default" do
7
+ custom_input = Class.new(GraphQL::Schema::InputObject)
8
+ mutation_base_class = Class.new(GraphQL::Schema::RelayClassicMutation) do
9
+ input_object_class(custom_input)
10
+ end
11
+ mutation_subclass = Class.new(mutation_base_class)
12
+
13
+ assert_equal GraphQL::Schema::InputObject, GraphQL::Schema::RelayClassicMutation.input_object_class
14
+ assert_equal custom_input, mutation_base_class.input_object_class
15
+ assert_equal custom_input, mutation_subclass.input_object_class
16
+ end
17
+ end
18
+
19
+ describe ".input_type" do
20
+ it "has a reference to the mutation" do
21
+ mutation = Class.new(GraphQL::Schema::RelayClassicMutation) do
22
+ graphql_name "Test"
23
+ end
24
+ assert_equal mutation, mutation.input_type.mutation
25
+ assert_equal mutation, mutation.input_type.graphql_definition.mutation
26
+ end
27
+ end
28
+
29
+ describe ".null" do
30
+ it "is inherited as true" do
31
+ mutation = Class.new(GraphQL::Schema::RelayClassicMutation) do
32
+ graphql_name "Test"
33
+ end
34
+
35
+ assert mutation.null
36
+ end
37
+ end
38
+ end
@@ -25,6 +25,17 @@ describe GraphQL::Schema::RescueMiddleware do
25
25
  assert_equal(GraphQL::ExecutionError, result.class)
26
26
  end
27
27
 
28
+ describe "rescue_from superclass" do
29
+ class ChildSpecExampleError < SpecExampleError; end
30
+
31
+ let(:error_class) { ChildSpecExampleError }
32
+ it "handles them as execution errors" do
33
+ result = middleware_chain.invoke([])
34
+ assert_equal("there was an example error: ChildSpecExampleError", result.message)
35
+ assert_equal(GraphQL::ExecutionError, result.class)
36
+ end
37
+ end
38
+
28
39
  describe "with multiple error classes" do
29
40
  let(:error_class) { SecondSpecExampleError }
30
41
  let(:rescue_middleware) do
@@ -0,0 +1,131 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe GraphQL::Schema::Resolver do
5
+ module ResolverTest
6
+ class BaseResolver < GraphQL::Schema::Resolver
7
+ end
8
+
9
+ class Resolver1 < BaseResolver
10
+ argument :value, Integer, required: false
11
+ type [Integer, null: true], null: false
12
+
13
+ def initialize(object:, context:)
14
+ super
15
+ if defined?(@value)
16
+ raise "The instance should start fresh"
17
+ end
18
+ @value = [100]
19
+ end
20
+
21
+ def resolve(value: nil)
22
+ @value << value
23
+ @value
24
+ end
25
+ end
26
+
27
+ class Resolver2 < Resolver1
28
+ argument :extra_value, Integer, required: true
29
+
30
+ def resolve(extra_value:, **_rest)
31
+ value = super(_rest)
32
+ value << extra_value
33
+ value
34
+ end
35
+ end
36
+
37
+ class Resolver3 < Resolver1
38
+ end
39
+
40
+ class Resolver4 < BaseResolver
41
+ type Integer, null: false
42
+
43
+ extras [:ast_node]
44
+ def resolve(ast_node:)
45
+ object.value + ast_node.name.size
46
+ end
47
+ end
48
+
49
+ class Resolver5 < Resolver4
50
+ end
51
+
52
+ class Query < GraphQL::Schema::Object
53
+ class CustomField < GraphQL::Schema::Field
54
+ def resolve_field(*args)
55
+ value = super
56
+ if @name == "resolver3"
57
+ value << -1
58
+ end
59
+ value
60
+ end
61
+ end
62
+
63
+ field_class(CustomField)
64
+
65
+ field :resolver_1, resolver: Resolver1
66
+ field :resolver_2, resolver: Resolver2
67
+ field :resolver_3, resolver: Resolver3
68
+ field :resolver_3_again, resolver: Resolver3, description: "field desc"
69
+ field :resolver_4, "Positional description", resolver: Resolver4
70
+ field :resolver_5, resolver: Resolver5
71
+ end
72
+
73
+ class Schema < GraphQL::Schema
74
+ query(Query)
75
+ end
76
+ end
77
+
78
+ it "gets initialized for each resolution" do
79
+ # State isn't shared between calls:
80
+ res = ResolverTest::Schema.execute " { r1: resolver1(value: 1) r2: resolver1 }"
81
+ assert_equal [100, 1], res["data"]["r1"]
82
+ assert_equal [100, nil], res["data"]["r2"]
83
+ end
84
+
85
+ it "inherits type and arguments" do
86
+ res = ResolverTest::Schema.execute " { r1: resolver2(value: 1, extraValue: 2) r2: resolver2(extraValue: 3) }"
87
+ assert_equal [100, 1, 2], res["data"]["r1"]
88
+ assert_equal [100, nil, 3], res["data"]["r2"]
89
+ end
90
+
91
+ it "uses the object's field_class" do
92
+ res = ResolverTest::Schema.execute " { r1: resolver3(value: 1) r2: resolver3 }"
93
+ assert_equal [100, 1, -1], res["data"]["r1"]
94
+ assert_equal [100, nil, -1], res["data"]["r2"]
95
+ end
96
+
97
+ describe "resolve method" do
98
+ it "has access to the application object" do
99
+ res = ResolverTest::Schema.execute " { resolver4 } ", root_value: OpenStruct.new(value: 4)
100
+ assert_equal 13, res["data"]["resolver4"]
101
+ end
102
+
103
+ it "gets extras" do
104
+ res = ResolverTest::Schema.execute " { resolver4 } ", root_value: OpenStruct.new(value: 0)
105
+ assert_equal 9, res["data"]["resolver4"]
106
+ end
107
+ end
108
+
109
+ describe "extras" do
110
+ it "is inherited" do
111
+ res = ResolverTest::Schema.execute " { resolver4 resolver5 } ", root_value: OpenStruct.new(value: 0)
112
+ assert_equal 9, res["data"]["resolver4"]
113
+ assert_equal 9, res["data"]["resolver5"]
114
+ end
115
+ end
116
+
117
+ describe "when applied to a field" do
118
+ it "gets the field's description" do
119
+ assert_nil ResolverTest::Schema.find("Query.resolver3").description
120
+ assert_equal "field desc", ResolverTest::Schema.find("Query.resolver3Again").description
121
+ assert_equal "Positional description", ResolverTest::Schema.find("Query.resolver4").description
122
+ end
123
+
124
+ it "gets the field's name" do
125
+ # Matching name:
126
+ assert ResolverTest::Schema.find("Query.resolver3")
127
+ # Mismatched name:
128
+ assert ResolverTest::Schema.find("Query.resolver3Again")
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe GraphQL::Schema::Scalar do
5
+ describe "in queries" do
6
+ it "becomes output" do
7
+ query_str = <<-GRAPHQL
8
+ {
9
+ find(id: "Musician/Herbie Hancock") {
10
+ ... on Musician {
11
+ name
12
+ favoriteKey
13
+ }
14
+ }
15
+ }
16
+ GRAPHQL
17
+
18
+ res = Jazz::Schema.execute(query_str)
19
+ assert_equal "B♭", res["data"]["find"]["favoriteKey"]
20
+ end
21
+
22
+ it "can be input" do
23
+ query_str = <<-GRAPHQL
24
+ {
25
+ inspectKey(key: "F♯") {
26
+ root
27
+ isSharp
28
+ isFlat
29
+ }
30
+ }
31
+ GRAPHQL
32
+
33
+ res = Jazz::Schema.execute(query_str)
34
+ key_info = res["data"]["inspectKey"]
35
+ assert_equal "F", key_info["root"]
36
+ assert_equal true, key_info["isSharp"]
37
+ assert_equal false, key_info["isFlat"]
38
+ end
39
+
40
+ it "can be nested JSON" do
41
+ query_str = <<-GRAPHQL
42
+ {
43
+ echoJson(input: {foo: [{bar: "baz"}]})
44
+ }
45
+ GRAPHQL
46
+
47
+ res = Jazz::Schema.execute(query_str)
48
+ assert_equal({"foo" => [{"bar" => "baz"}]}, res["data"]["echoJson"])
49
+ end
50
+
51
+ it "can be a JSON array" do
52
+ query_str = <<-GRAPHQL
53
+ {
54
+ echoFirstJson(input: [{foo: "bar"}, {baz: "boo"}])
55
+ }
56
+ GRAPHQL
57
+
58
+ res = Jazz::Schema.execute(query_str)
59
+ assert_equal({"foo" => "bar"}, res["data"]["echoFirstJson"])
60
+ end
61
+
62
+ it "can be a JSON array even if the GraphQL type is not an array" do
63
+ query_str = <<-GRAPHQL
64
+ {
65
+ echoJson(input: [{foo: "bar"}])
66
+ }
67
+ GRAPHQL
68
+
69
+ res = Jazz::Schema.execute(query_str)
70
+ assert_equal([{"foo" => "bar"}], res["data"]["echoJson"])
71
+ end
72
+
73
+ it "can be JSON with a nested enum" do
74
+ query_str = <<-GRAPHQL
75
+ {
76
+ echoJson(input: [{foo: WOODWIND}])
77
+ }
78
+ GRAPHQL
79
+
80
+ res = Jazz::Schema.execute(query_str)
81
+ assert_equal([{"foo" => "WOODWIND"}], res["data"]["echoJson"])
82
+ end
83
+
84
+ it "cannot be JSON with a nested variable" do
85
+ query_str = <<-GRAPHQL
86
+ {
87
+ echoJson(input: [{foo: $var}])
88
+ }
89
+ GRAPHQL
90
+
91
+ res = Jazz::Schema.execute(query_str)
92
+ assert_includes(res["errors"][0]["message"], "Argument 'input' on Field 'echoJson' has an invalid value")
93
+ end
94
+ end
95
+ end
@@ -188,4 +188,35 @@ describe GraphQL::Schema::Traversal do
188
188
  }
189
189
  assert_equal expected, result
190
190
  end
191
+
192
+ it "finds orphan types from interfaces" do
193
+ b_type = GraphQL::ObjectType.define do
194
+ name "B"
195
+ end
196
+
197
+ c_type = GraphQL::ObjectType.define do
198
+ name "C"
199
+ end
200
+
201
+ interface = GraphQL::InterfaceType.define do
202
+ name "AInterface"
203
+ orphan_types [b_type]
204
+ end
205
+
206
+ another_interface = GraphQL::InterfaceType.define do
207
+ name "AnotherIterface"
208
+ orphan_types [b_type, c_type]
209
+ end
210
+
211
+ result = traversal([interface, another_interface]).type_map
212
+ expected = {
213
+ "Boolean" => GraphQL::BOOLEAN_TYPE,
214
+ "String" => GraphQL::STRING_TYPE,
215
+ "AInterface" => interface,
216
+ "AnotherIterface" => another_interface,
217
+ "B" => b_type,
218
+ "C" => c_type
219
+ }
220
+ assert_equal expected, result
221
+ end
191
222
  end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+ require "spec_helper"
3
+
4
+ describe GraphQL::Schema::Union do
5
+ let(:union) { Jazz::PerformingAct }
6
+ describe "type info" do
7
+ it "has some" do
8
+ assert_equal 2, union.possible_types.size
9
+ end
10
+ end
11
+
12
+ describe ".to_graphql" do
13
+ it "creates a UnionType" do
14
+ union = Class.new(GraphQL::Schema::Union) do
15
+ possible_types Jazz::Musician, Jazz::Ensemble
16
+
17
+ def self.name
18
+ "MyUnion"
19
+ end
20
+ end
21
+ union_type = union.to_graphql
22
+ assert_equal "MyUnion", union_type.name
23
+ assert_equal [Jazz::Musician.to_graphql, Jazz::Ensemble.to_graphql], union_type.possible_types
24
+ assert_nil union_type.resolve_type_proc
25
+ end
26
+
27
+ it "can specify a resolve_type method" do
28
+ union = Class.new(GraphQL::Schema::Union) do
29
+ def self.resolve_type(_object, _context)
30
+ "MyType"
31
+ end
32
+
33
+ def self.name
34
+ "MyUnion"
35
+ end
36
+ end
37
+ union_type = union.to_graphql
38
+ assert_equal "MyType", union_type.resolve_type_proc.call(nil, nil)
39
+ end
40
+ end
41
+
42
+ describe "in queries" do
43
+ it "works" do
44
+ query_str = <<-GRAPHQL
45
+ {
46
+ nowPlaying {
47
+ ... on Musician {
48
+ name
49
+ instrument {
50
+ family
51
+ }
52
+ }
53
+ ... on Ensemble {
54
+ name
55
+ }
56
+ }
57
+ }
58
+ GRAPHQL
59
+
60
+ res = Jazz::Schema.execute(query_str)
61
+ expected_data = { "name" => "Bela Fleck and the Flecktones" }
62
+ assert_equal expected_data, res["data"]["nowPlaying"]
63
+ end
64
+ end
65
+ end
@@ -333,7 +333,7 @@ describe GraphQL::Schema::Validation do
333
333
  end
334
334
 
335
335
  it "allows null default value for nullable argument" do
336
- assert_equal nil, GraphQL::Schema::Validation.validate(null_default_value)
336
+ assert_nil GraphQL::Schema::Validation.validate(null_default_value)
337
337
  end
338
338
  end
339
339
 
@@ -242,8 +242,8 @@ describe GraphQL::Schema::Warden do
242
242
  GRAPHQL
243
243
  res = MaskHelpers.query_with_mask(query_string, mask)
244
244
  assert_equal "Query", res["data"]["__schema"]["queryType"]["name"]
245
- assert_equal nil, res["data"]["__schema"]["mutationType"]
246
- assert_equal nil, res["data"]["__schema"]["subscriptionType"]
245
+ assert_nil res["data"]["__schema"]["mutationType"]
246
+ assert_nil res["data"]["__schema"]["subscriptionType"]
247
247
  type_names = res["data"]["__schema"]["types"].map { |t| t["name"] }
248
248
  refute type_names.include?("Mutation")
249
249
  refute type_names.include?("Subscription")
@@ -344,7 +344,7 @@ describe GraphQL::Schema::Warden do
344
344
  res = MaskHelpers.run_query(query_string, only: whitelist)
345
345
 
346
346
  # It's not visible by name
347
- assert_equal nil, res["data"]["Phoneme"]
347
+ assert_nil res["data"]["Phoneme"]
348
348
 
349
349
  # It's not visible in `__schema`
350
350
  all_type_names = type_names(res)
@@ -423,7 +423,7 @@ describe GraphQL::Schema::Warden do
423
423
 
424
424
  res = MaskHelpers.query_with_mask(query_string, mask)
425
425
  type = res["data"]["__type"]
426
- assert_equal nil, type
426
+ assert_nil type
427
427
  end
428
428
  end
429
429
  end
@@ -543,7 +543,7 @@ describe GraphQL::Schema::Warden do
543
543
 
544
544
  res = MaskHelpers.query_with_mask(query_string, mask)
545
545
 
546
- assert_equal nil, res["data"]["WithinInput"], "The type isn't accessible by name"
546
+ assert_nil res["data"]["WithinInput"], "The type isn't accessible by name"
547
547
 
548
548
  languages_arg_names = res["data"]["Query"]["fields"].find { |f| f["name"] == "languages" }["args"].map { |a| a["name"] }
549
549
  refute_includes languages_arg_names, "within", "Arguments that point to it are gone"
@@ -666,7 +666,7 @@ describe GraphQL::Schema::Warden do
666
666
  it "is additive with query filters" do
667
667
  query_except = ->(member, ctx) { member.metadata[:hidden_input_object_type] }
668
668
  res = schema.execute(query_str, except: query_except)
669
- assert_equal nil, res["data"]["input"]
669
+ assert_nil res["data"]["input"]
670
670
  enum_values = res["data"]["enum"]["enumValues"].map { |v| v["name"] }
671
671
  refute_includes enum_values, "TRILL"
672
672
  end
@@ -695,13 +695,13 @@ describe GraphQL::Schema::Warden do
695
695
  only: [visible_enum_value, visible_abstract_type],
696
696
  except: [hidden_input_object, hidden_type],
697
697
  )
698
- assert_equal nil, res["data"]["input"]
698
+ assert_nil res["data"]["input"]
699
699
  enum_values = res["data"]["enum"]["enumValues"].map { |v| v["name"] }
700
700
  assert_equal 5, enum_values.length
701
701
  refute_includes enum_values, "TRILL"
702
702
  # These are also filtered out:
703
703
  assert_equal 0, res["data"]["abstractType"]["interfaces"].length
704
- assert_equal nil, res["data"]["type"]
704
+ assert_nil res["data"]["type"]
705
705
  end
706
706
  end
707
707
 
@@ -712,7 +712,7 @@ describe GraphQL::Schema::Warden do
712
712
  except: hidden_input_object,
713
713
  }
714
714
  res = MaskHelpers.run_query(query_str, context: { filters: filters })
715
- assert_equal nil, res["data"]["input"]
715
+ assert_nil res["data"]["input"]
716
716
  enum_values = res["data"]["enum"]["enumValues"].map { |v| v["name"] }
717
717
  assert_equal 5, enum_values.length
718
718
  refute_includes enum_values, "TRILL"
@@ -727,13 +727,13 @@ describe GraphQL::Schema::Warden do
727
727
  except: [hidden_input_object, hidden_type],
728
728
  }
729
729
  res = MaskHelpers.run_query(query_str, context: { filters: filters })
730
- assert_equal nil, res["data"]["input"]
730
+ assert_nil res["data"]["input"]
731
731
  enum_values = res["data"]["enum"]["enumValues"].map { |v| v["name"] }
732
732
  assert_equal 5, enum_values.length
733
733
  refute_includes enum_values, "TRILL"
734
734
  # These are also filtered out:
735
735
  assert_equal 0, res["data"]["abstractType"]["interfaces"].length
736
- assert_equal nil, res["data"]["type"]
736
+ assert_nil res["data"]["type"]
737
737
  end
738
738
  end
739
739
  end