graphql 1.9.11 → 1.9.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (286) hide show
  1. checksums.yaml +4 -4
  2. data/lib/graphql/analysis/ast/query_complexity.rb +0 -8
  3. data/lib/graphql/analysis/ast/query_depth.rb +0 -8
  4. data/lib/graphql/analysis/ast/visitor.rb +26 -24
  5. data/lib/graphql/execution.rb +1 -0
  6. data/lib/graphql/execution/errors.rb +60 -0
  7. data/lib/graphql/execution/interpreter/runtime.rb +21 -17
  8. data/lib/graphql/static_validation/rules/fields_will_merge.rb +15 -8
  9. data/lib/graphql/version.rb +1 -1
  10. metadata +5 -556
  11. data/spec/dummy/Gemfile +0 -12
  12. data/spec/dummy/README.md +0 -24
  13. data/spec/dummy/Rakefile +0 -7
  14. data/spec/dummy/app/assets/config/manifest.js +0 -1
  15. data/spec/dummy/app/assets/javascripts/application.js +0 -66
  16. data/spec/dummy/app/channels/application_cable/channel.rb +0 -5
  17. data/spec/dummy/app/channels/application_cable/connection.rb +0 -5
  18. data/spec/dummy/app/channels/graphql_channel.rb +0 -116
  19. data/spec/dummy/app/controllers/application_controller.rb +0 -4
  20. data/spec/dummy/app/controllers/pages_controller.rb +0 -5
  21. data/spec/dummy/app/helpers/application_helper.rb +0 -3
  22. data/spec/dummy/app/jobs/application_job.rb +0 -3
  23. data/spec/dummy/app/views/layouts/application.html.erb +0 -12
  24. data/spec/dummy/app/views/pages/show.html +0 -16
  25. data/spec/dummy/bin/bundle +0 -4
  26. data/spec/dummy/bin/rails +0 -5
  27. data/spec/dummy/bin/rake +0 -5
  28. data/spec/dummy/bin/setup +0 -31
  29. data/spec/dummy/bin/update +0 -27
  30. data/spec/dummy/bin/yarn +0 -12
  31. data/spec/dummy/config.ru +0 -6
  32. data/spec/dummy/config/application.rb +0 -30
  33. data/spec/dummy/config/boot.rb +0 -4
  34. data/spec/dummy/config/cable.yml +0 -10
  35. data/spec/dummy/config/environment.rb +0 -6
  36. data/spec/dummy/config/environments/development.rb +0 -40
  37. data/spec/dummy/config/environments/production.rb +0 -76
  38. data/spec/dummy/config/environments/test.rb +0 -37
  39. data/spec/dummy/config/initializers/application_controller_renderer.rb +0 -9
  40. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -8
  41. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -6
  42. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -5
  43. data/spec/dummy/config/initializers/inflections.rb +0 -17
  44. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  45. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -10
  46. data/spec/dummy/config/locales/en.yml +0 -33
  47. data/spec/dummy/config/puma.rb +0 -57
  48. data/spec/dummy/config/routes.rb +0 -4
  49. data/spec/dummy/config/secrets.yml +0 -32
  50. data/spec/dummy/package.json +0 -5
  51. data/spec/dummy/public/404.html +0 -67
  52. data/spec/dummy/public/422.html +0 -67
  53. data/spec/dummy/public/500.html +0 -66
  54. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  55. data/spec/dummy/public/apple-touch-icon.png +0 -0
  56. data/spec/dummy/public/favicon.ico +0 -0
  57. data/spec/dummy/public/robots.txt +0 -1
  58. data/spec/dummy/test/application_system_test_case.rb +0 -6
  59. data/spec/dummy/test/system/action_cable_subscription_test.rb +0 -45
  60. data/spec/dummy/test/test_helper.rb +0 -4
  61. data/spec/fixtures/upgrader/account.original.rb +0 -19
  62. data/spec/fixtures/upgrader/account.transformed.rb +0 -20
  63. data/spec/fixtures/upgrader/blame_range.original.rb +0 -43
  64. data/spec/fixtures/upgrader/blame_range.transformed.rb +0 -30
  65. data/spec/fixtures/upgrader/date_time.original.rb +0 -24
  66. data/spec/fixtures/upgrader/date_time.transformed.rb +0 -23
  67. data/spec/fixtures/upgrader/delete_project.original.rb +0 -28
  68. data/spec/fixtures/upgrader/delete_project.transformed.rb +0 -27
  69. data/spec/fixtures/upgrader/gist_order_field.original.rb +0 -14
  70. data/spec/fixtures/upgrader/gist_order_field.transformed.rb +0 -13
  71. data/spec/fixtures/upgrader/increment_count.original.rb +0 -59
  72. data/spec/fixtures/upgrader/increment_count.transformed.rb +0 -50
  73. data/spec/fixtures/upgrader/mutation.original.rb +0 -28
  74. data/spec/fixtures/upgrader/mutation.transformed.rb +0 -28
  75. data/spec/fixtures/upgrader/photo.original.rb +0 -10
  76. data/spec/fixtures/upgrader/photo.transformed.rb +0 -12
  77. data/spec/fixtures/upgrader/release_order.original.rb +0 -15
  78. data/spec/fixtures/upgrader/release_order.transformed.rb +0 -14
  79. data/spec/fixtures/upgrader/starrable.original.rb +0 -49
  80. data/spec/fixtures/upgrader/starrable.transformed.rb +0 -46
  81. data/spec/fixtures/upgrader/subscribable.original.rb +0 -55
  82. data/spec/fixtures/upgrader/subscribable.transformed.rb +0 -51
  83. data/spec/fixtures/upgrader/type_x.original.rb +0 -65
  84. data/spec/fixtures/upgrader/type_x.transformed.rb +0 -56
  85. data/spec/graphql/analysis/analyze_query_spec.rb +0 -261
  86. data/spec/graphql/analysis/ast/field_usage_spec.rb +0 -51
  87. data/spec/graphql/analysis/ast/max_query_complexity_spec.rb +0 -120
  88. data/spec/graphql/analysis/ast/max_query_depth_spec.rb +0 -134
  89. data/spec/graphql/analysis/ast/query_complexity_spec.rb +0 -299
  90. data/spec/graphql/analysis/ast/query_depth_spec.rb +0 -108
  91. data/spec/graphql/analysis/ast_spec.rb +0 -296
  92. data/spec/graphql/analysis/field_usage_spec.rb +0 -62
  93. data/spec/graphql/analysis/max_query_complexity_spec.rb +0 -102
  94. data/spec/graphql/analysis/max_query_depth_spec.rb +0 -103
  95. data/spec/graphql/analysis/query_complexity_spec.rb +0 -301
  96. data/spec/graphql/analysis/query_depth_spec.rb +0 -81
  97. data/spec/graphql/argument_spec.rb +0 -159
  98. data/spec/graphql/authorization_spec.rb +0 -974
  99. data/spec/graphql/backtrace_spec.rb +0 -206
  100. data/spec/graphql/base_type_spec.rb +0 -171
  101. data/spec/graphql/boolean_type_spec.rb +0 -21
  102. data/spec/graphql/compatibility/execution_specification_spec.rb +0 -4
  103. data/spec/graphql/compatibility/lazy_execution_specification_spec.rb +0 -4
  104. data/spec/graphql/compatibility/query_parser_specification_spec.rb +0 -6
  105. data/spec/graphql/compatibility/schema_parser_specification_spec.rb +0 -6
  106. data/spec/graphql/define/assign_argument_spec.rb +0 -61
  107. data/spec/graphql/define/instance_definable_spec.rb +0 -203
  108. data/spec/graphql/directive/skip_directive_spec.rb +0 -9
  109. data/spec/graphql/directive_spec.rb +0 -295
  110. data/spec/graphql/enum_type_spec.rb +0 -158
  111. data/spec/graphql/execution/execute_spec.rb +0 -303
  112. data/spec/graphql/execution/instrumentation_spec.rb +0 -212
  113. data/spec/graphql/execution/interpreter_spec.rb +0 -485
  114. data/spec/graphql/execution/lazy/lazy_method_map_spec.rb +0 -57
  115. data/spec/graphql/execution/lazy_spec.rb +0 -247
  116. data/spec/graphql/execution/lookahead_spec.rb +0 -390
  117. data/spec/graphql/execution/multiplex_spec.rb +0 -222
  118. data/spec/graphql/execution/typecast_spec.rb +0 -47
  119. data/spec/graphql/execution_error_spec.rb +0 -329
  120. data/spec/graphql/field_spec.rb +0 -246
  121. data/spec/graphql/float_type_spec.rb +0 -16
  122. data/spec/graphql/function_spec.rb +0 -152
  123. data/spec/graphql/id_type_spec.rb +0 -33
  124. data/spec/graphql/input_object_type_spec.rb +0 -25
  125. data/spec/graphql/int_type_spec.rb +0 -35
  126. data/spec/graphql/interface_type_spec.rb +0 -196
  127. data/spec/graphql/internal_representation/print_spec.rb +0 -41
  128. data/spec/graphql/internal_representation/rewrite_spec.rb +0 -381
  129. data/spec/graphql/introspection/directive_type_spec.rb +0 -66
  130. data/spec/graphql/introspection/input_value_type_spec.rb +0 -144
  131. data/spec/graphql/introspection/introspection_query_spec.rb +0 -64
  132. data/spec/graphql/introspection/schema_type_spec.rb +0 -57
  133. data/spec/graphql/introspection/type_type_spec.rb +0 -155
  134. data/spec/graphql/language/block_string_spec.rb +0 -70
  135. data/spec/graphql/language/definition_slice_spec.rb +0 -226
  136. data/spec/graphql/language/document_from_schema_definition_spec.rb +0 -770
  137. data/spec/graphql/language/equality_spec.rb +0 -84
  138. data/spec/graphql/language/generation_spec.rb +0 -38
  139. data/spec/graphql/language/lexer_spec.rb +0 -153
  140. data/spec/graphql/language/nodes_spec.rb +0 -67
  141. data/spec/graphql/language/parser_spec.rb +0 -183
  142. data/spec/graphql/language/printer_spec.rb +0 -215
  143. data/spec/graphql/language/visitor_spec.rb +0 -419
  144. data/spec/graphql/list_type_spec.rb +0 -57
  145. data/spec/graphql/non_null_type_spec.rb +0 -48
  146. data/spec/graphql/object_type_spec.rb +0 -197
  147. data/spec/graphql/query/arguments_spec.rb +0 -346
  148. data/spec/graphql/query/context_spec.rb +0 -292
  149. data/spec/graphql/query/executor_spec.rb +0 -341
  150. data/spec/graphql/query/literal_input_spec.rb +0 -91
  151. data/spec/graphql/query/result_spec.rb +0 -29
  152. data/spec/graphql/query/serial_execution/value_resolution_spec.rb +0 -109
  153. data/spec/graphql/query_spec.rb +0 -803
  154. data/spec/graphql/rake_task_spec.rb +0 -59
  155. data/spec/graphql/scalar_type_spec.rb +0 -66
  156. data/spec/graphql/schema/argument_spec.rb +0 -186
  157. data/spec/graphql/schema/build_from_definition_spec.rb +0 -1197
  158. data/spec/graphql/schema/catchall_middleware_spec.rb +0 -32
  159. data/spec/graphql/schema/directive/feature_spec.rb +0 -81
  160. data/spec/graphql/schema/directive/transform_spec.rb +0 -39
  161. data/spec/graphql/schema/enum_spec.rb +0 -83
  162. data/spec/graphql/schema/enum_value_spec.rb +0 -24
  163. data/spec/graphql/schema/field_extension_spec.rb +0 -159
  164. data/spec/graphql/schema/field_spec.rb +0 -319
  165. data/spec/graphql/schema/finder_spec.rb +0 -135
  166. data/spec/graphql/schema/input_object_spec.rb +0 -421
  167. data/spec/graphql/schema/instrumentation_spec.rb +0 -43
  168. data/spec/graphql/schema/interface_spec.rb +0 -215
  169. data/spec/graphql/schema/introspection_system_spec.rb +0 -80
  170. data/spec/graphql/schema/list_spec.rb +0 -73
  171. data/spec/graphql/schema/loader_spec.rb +0 -350
  172. data/spec/graphql/schema/member/accepts_definition_spec.rb +0 -115
  173. data/spec/graphql/schema/member/build_type_spec.rb +0 -63
  174. data/spec/graphql/schema/member/scoped_spec.rb +0 -217
  175. data/spec/graphql/schema/member/type_system_helpers_spec.rb +0 -63
  176. data/spec/graphql/schema/middleware_chain_spec.rb +0 -57
  177. data/spec/graphql/schema/mutation_spec.rb +0 -150
  178. data/spec/graphql/schema/non_null_spec.rb +0 -46
  179. data/spec/graphql/schema/object_spec.rb +0 -355
  180. data/spec/graphql/schema/printer_spec.rb +0 -883
  181. data/spec/graphql/schema/relay_classic_mutation_spec.rb +0 -252
  182. data/spec/graphql/schema/rescue_middleware_spec.rb +0 -88
  183. data/spec/graphql/schema/resolver_spec.rb +0 -743
  184. data/spec/graphql/schema/scalar_spec.rb +0 -101
  185. data/spec/graphql/schema/subscription_spec.rb +0 -505
  186. data/spec/graphql/schema/timeout_middleware_spec.rb +0 -188
  187. data/spec/graphql/schema/timeout_spec.rb +0 -206
  188. data/spec/graphql/schema/traversal_spec.rb +0 -222
  189. data/spec/graphql/schema/type_expression_spec.rb +0 -39
  190. data/spec/graphql/schema/union_spec.rb +0 -72
  191. data/spec/graphql/schema/unique_within_type_spec.rb +0 -44
  192. data/spec/graphql/schema/validation_spec.rb +0 -355
  193. data/spec/graphql/schema/warden_spec.rb +0 -926
  194. data/spec/graphql/schema_spec.rb +0 -169
  195. data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +0 -466
  196. data/spec/graphql/static_validation/rules/argument_names_are_unique_spec.rb +0 -44
  197. data/spec/graphql/static_validation/rules/arguments_are_defined_spec.rb +0 -112
  198. data/spec/graphql/static_validation/rules/directives_are_defined_spec.rb +0 -35
  199. data/spec/graphql/static_validation/rules/directives_are_in_valid_locations_spec.rb +0 -42
  200. data/spec/graphql/static_validation/rules/fields_are_defined_on_type_spec.rb +0 -167
  201. data/spec/graphql/static_validation/rules/fields_have_appropriate_selections_spec.rb +0 -66
  202. data/spec/graphql/static_validation/rules/fields_will_merge_spec.rb +0 -740
  203. data/spec/graphql/static_validation/rules/fragment_names_are_unique_spec.rb +0 -28
  204. data/spec/graphql/static_validation/rules/fragment_spreads_are_possible_spec.rb +0 -52
  205. data/spec/graphql/static_validation/rules/fragment_types_exist_spec.rb +0 -42
  206. data/spec/graphql/static_validation/rules/fragments_are_finite_spec.rb +0 -123
  207. data/spec/graphql/static_validation/rules/fragments_are_named_spec.rb +0 -24
  208. data/spec/graphql/static_validation/rules/fragments_are_on_composite_types_spec.rb +0 -56
  209. data/spec/graphql/static_validation/rules/fragments_are_used_spec.rb +0 -61
  210. data/spec/graphql/static_validation/rules/mutation_root_exists_spec.rb +0 -39
  211. data/spec/graphql/static_validation/rules/no_definitions_are_present_spec.rb +0 -62
  212. data/spec/graphql/static_validation/rules/operation_names_are_valid_spec.rb +0 -82
  213. data/spec/graphql/static_validation/rules/required_arguments_are_present_spec.rb +0 -98
  214. data/spec/graphql/static_validation/rules/required_input_object_attributes_are_present_spec.rb +0 -86
  215. data/spec/graphql/static_validation/rules/subscription_root_exists_spec.rb +0 -34
  216. data/spec/graphql/static_validation/rules/unique_directives_per_location_spec.rb +0 -188
  217. data/spec/graphql/static_validation/rules/variable_default_values_are_correctly_typed_spec.rb +0 -196
  218. data/spec/graphql/static_validation/rules/variable_names_are_unique_spec.rb +0 -23
  219. data/spec/graphql/static_validation/rules/variable_usages_are_allowed_spec.rb +0 -236
  220. data/spec/graphql/static_validation/rules/variables_are_input_types_spec.rb +0 -78
  221. data/spec/graphql/static_validation/rules/variables_are_used_and_defined_spec.rb +0 -81
  222. data/spec/graphql/static_validation/type_stack_spec.rb +0 -29
  223. data/spec/graphql/static_validation/validator_spec.rb +0 -204
  224. data/spec/graphql/string_type_spec.rb +0 -80
  225. data/spec/graphql/subscriptions/serialize_spec.rb +0 -49
  226. data/spec/graphql/subscriptions_spec.rb +0 -540
  227. data/spec/graphql/tracing/new_relic_tracing_spec.rb +0 -84
  228. data/spec/graphql/tracing/platform_tracing_spec.rb +0 -141
  229. data/spec/graphql/tracing/prometheus_tracing_spec.rb +0 -42
  230. data/spec/graphql/tracing/scout_tracing_spec.rb +0 -17
  231. data/spec/graphql/tracing/skylight_tracing_spec.rb +0 -63
  232. data/spec/graphql/tracing_spec.rb +0 -52
  233. data/spec/graphql/types/big_int_spec.rb +0 -24
  234. data/spec/graphql/types/iso_8601_date_time_spec.rb +0 -137
  235. data/spec/graphql/types/relay/base_edge_spec.rb +0 -33
  236. data/spec/graphql/union_type_spec.rb +0 -211
  237. data/spec/graphql/upgrader/member_spec.rb +0 -583
  238. data/spec/graphql/upgrader/schema_spec.rb +0 -82
  239. data/spec/integration/mongoid/graphql/relay/mongo_relation_connection_spec.rb +0 -528
  240. data/spec/integration/mongoid/spec_helper.rb +0 -2
  241. data/spec/integration/mongoid/star_trek/data.rb +0 -126
  242. data/spec/integration/mongoid/star_trek/schema.rb +0 -424
  243. data/spec/integration/rails/data.rb +0 -110
  244. data/spec/integration/rails/generators/base_generator_test.rb +0 -7
  245. data/spec/integration/rails/generators/graphql/enum_generator_spec.rb +0 -30
  246. data/spec/integration/rails/generators/graphql/install_generator_spec.rb +0 -238
  247. data/spec/integration/rails/generators/graphql/interface_generator_spec.rb +0 -34
  248. data/spec/integration/rails/generators/graphql/loader_generator_spec.rb +0 -59
  249. data/spec/integration/rails/generators/graphql/mutation_generator_spec.rb +0 -71
  250. data/spec/integration/rails/generators/graphql/object_generator_spec.rb +0 -54
  251. data/spec/integration/rails/generators/graphql/scalar_generator_spec.rb +0 -28
  252. data/spec/integration/rails/generators/graphql/union_generator_spec.rb +0 -67
  253. data/spec/integration/rails/graphql/input_object_spec.rb +0 -19
  254. data/spec/integration/rails/graphql/input_object_type_spec.rb +0 -364
  255. data/spec/integration/rails/graphql/query/variables_spec.rb +0 -375
  256. data/spec/integration/rails/graphql/relay/array_connection_spec.rb +0 -309
  257. data/spec/integration/rails/graphql/relay/base_connection_spec.rb +0 -101
  258. data/spec/integration/rails/graphql/relay/connection_instrumentation_spec.rb +0 -80
  259. data/spec/integration/rails/graphql/relay/connection_resolve_spec.rb +0 -79
  260. data/spec/integration/rails/graphql/relay/connection_type_spec.rb +0 -106
  261. data/spec/integration/rails/graphql/relay/edge_spec.rb +0 -10
  262. data/spec/integration/rails/graphql/relay/mutation_spec.rb +0 -387
  263. data/spec/integration/rails/graphql/relay/node_spec.rb +0 -263
  264. data/spec/integration/rails/graphql/relay/page_info_spec.rb +0 -111
  265. data/spec/integration/rails/graphql/relay/range_add_spec.rb +0 -117
  266. data/spec/integration/rails/graphql/relay/relation_connection_spec.rb +0 -837
  267. data/spec/integration/rails/graphql/schema_spec.rb +0 -507
  268. data/spec/integration/rails/graphql/tracing/active_support_notifications_tracing_spec.rb +0 -62
  269. data/spec/integration/rails/spec_helper.rb +0 -25
  270. data/spec/spec_helper.rb +0 -116
  271. data/spec/support/dummy/data.rb +0 -45
  272. data/spec/support/dummy/schema.rb +0 -519
  273. data/spec/support/error_bubbling_helpers.rb +0 -23
  274. data/spec/support/global_id.rb +0 -23
  275. data/spec/support/jazz.rb +0 -778
  276. data/spec/support/lazy_helpers.rb +0 -192
  277. data/spec/support/magic_cards/schema.graphql +0 -33
  278. data/spec/support/minimum_input_object.rb +0 -21
  279. data/spec/support/new_relic.rb +0 -27
  280. data/spec/support/parser/filename_example.graphql +0 -5
  281. data/spec/support/parser/filename_example_error_1.graphql +0 -4
  282. data/spec/support/parser/filename_example_error_2.graphql +0 -5
  283. data/spec/support/parser/filename_example_invalid_utf8.graphql +0 -1
  284. data/spec/support/skylight.rb +0 -39
  285. data/spec/support/star_wars/schema.rb +0 -464
  286. data/spec/support/static_validation_helpers.rb +0 -32
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
- require "spec_helper"
3
-
4
- describe GraphQL::Tracing::ActiveSupportNotificationsTracing do
5
- let(:schema) {
6
- StarWars::Schema.redefine {
7
- tracer GraphQL::Tracing::ActiveSupportNotificationsTracing
8
- }
9
- }
10
-
11
- it "pushes through AS::N" do
12
- traces = []
13
-
14
- callback = ->(name, started, finished, id, data) {
15
- path_str = if data.key?(:field)
16
- " (#{data[:field].path})"
17
- elsif data.key?(:context)
18
- " (#{data[:context].irep_node.owner_type}.#{data[:context].field.name})"
19
- else
20
- ""
21
- end
22
- traces << "#{name}#{path_str}"
23
- }
24
-
25
- query_string = <<-GRAPHQL
26
- query Bases($id1: ID!, $id2: ID!){
27
- b1: batchedBase(id: $id1) { name }
28
- b2: batchedBase(id: $id2) { name }
29
- }
30
- GRAPHQL
31
- first_id = StarWars::Base.first.id
32
- last_id = StarWars::Base.last.id
33
-
34
- ActiveSupport::Notifications.subscribed(callback, /^graphql/) do
35
- schema.execute(query_string, variables: {
36
- "id1" => first_id,
37
- "id2" => last_id,
38
- })
39
- end
40
-
41
- expected_traces = [
42
- "graphql.lex",
43
- "graphql.parse",
44
- "graphql.validate",
45
- "graphql.analyze_query",
46
- "graphql.analyze_multiplex",
47
- "graphql.execute_field (Query.batchedBase)",
48
- "graphql.execute_field (Query.batchedBase)",
49
- "graphql.execute_query",
50
- "graphql.lazy_loader",
51
- "graphql.execute_field_lazy (Query.batchedBase)",
52
- "graphql.execute_field (Base.name)",
53
- "graphql.execute_field_lazy (Query.batchedBase)",
54
- "graphql.execute_field (Base.name)",
55
- "graphql.execute_field_lazy (Base.name)",
56
- "graphql.execute_field_lazy (Base.name)",
57
- "graphql.execute_query_lazy",
58
- "graphql.execute_multiplex",
59
- ]
60
- assert_equal expected_traces, traces
61
- end
62
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
- require "rake"
3
- require "rails/all"
4
- require "rails/generators"
5
- require "sequel"
6
-
7
- if ENV['DATABASE'] == 'POSTGRESQL'
8
- require 'pg'
9
- else
10
- require "jdbc/sqlite3" if RUBY_ENGINE == 'jruby'
11
- require "sqlite3" if RUBY_ENGINE == 'ruby'
12
- end
13
-
14
- require_relative "generators/base_generator_test"
15
- require_relative "data"
16
-
17
- def with_active_record_log
18
- io = StringIO.new
19
- prev_logger = ActiveRecord::Base.logger
20
- ActiveRecord::Base.logger = Logger.new(io)
21
- yield
22
- io.string
23
- ensure
24
- ActiveRecord::Base.logger = prev_logger
25
- end
@@ -1,116 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rubygems'
4
- require 'bundler'
5
- Bundler.require
6
-
7
- # Print full backtrace for failiures:
8
- ENV["BACKTRACE"] = "1"
9
- # Set this env var to use Interpreter for fixture schemas.
10
- # Eventually, interpreter will be the default.
11
- TESTING_INTERPRETER = ENV["TESTING_INTERPRETER"]
12
- TESTING_RESCUE_FROM = !TESTING_INTERPRETER
13
-
14
- require "codeclimate-test-reporter"
15
- CodeClimate::TestReporter.start
16
-
17
- require "graphql"
18
- require "rake"
19
- require "graphql/rake_task"
20
- require "benchmark"
21
- require "pry"
22
- require "minitest/autorun"
23
- require "minitest/focus"
24
- require "minitest/reporters"
25
-
26
- Minitest::Reporters.use! Minitest::Reporters::DefaultReporter.new(color: true)
27
-
28
- Minitest::Spec.make_my_diffs_pretty!
29
-
30
- # Filter out Minitest backtrace while allowing backtrace from other libraries
31
- # to be shown.
32
- Minitest.backtrace_filter = Minitest::BacktraceFilter.new
33
-
34
- # This is for convenient access to metadata in test definitions
35
- assign_metadata_key = ->(target, key, value) { target.metadata[key] = value }
36
- assign_metadata_flag = ->(target, flag) { target.metadata[flag] = true }
37
- GraphQL::Schema.accepts_definitions(set_metadata: assign_metadata_key)
38
- GraphQL::BaseType.accepts_definitions(metadata: assign_metadata_key)
39
- GraphQL::BaseType.accepts_definitions(metadata2: assign_metadata_key)
40
- GraphQL::Field.accepts_definitions(metadata: assign_metadata_key)
41
- GraphQL::Argument.accepts_definitions(metadata: assign_metadata_key)
42
- GraphQL::Argument.accepts_definitions(metadata_flag: assign_metadata_flag)
43
- GraphQL::EnumType::EnumValue.accepts_definitions(metadata: assign_metadata_key)
44
-
45
- # Can be used as a GraphQL::Schema::Warden for some purposes, but allows nothing
46
- module NothingWarden
47
- def self.enum_values(enum_type)
48
- []
49
- end
50
- end
51
-
52
- # Use this when a schema requires a `resolve_type` hook
53
- # but you know it won't be called
54
- NO_OP_RESOLVE_TYPE = ->(type, obj, ctx) {
55
- raise "this should never be called"
56
- }
57
-
58
- # Load dependencies
59
- ['Mongoid', 'Rails'].each do |integration|
60
- begin
61
- Object.const_get(integration)
62
- Dir["#{File.dirname(__FILE__)}/integration/#{integration.downcase}/**/*.rb"].each do |f|
63
- require f
64
- end
65
- rescue NameError
66
- # ignore
67
- end
68
- end
69
-
70
- # Load support files
71
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each do |f|
72
- require f
73
- end
74
-
75
- def star_trek_query(string, variables={}, context: {})
76
- StarTrek::Schema.execute(string, variables: variables, context: context)
77
- end
78
-
79
- def star_wars_query(string, variables={}, context: {})
80
- StarWars::Schema.execute(string, variables: variables, context: context)
81
- end
82
-
83
- def with_bidirectional_pagination
84
- prev_value = GraphQL::Relay::ConnectionType.bidirectional_pagination
85
- GraphQL::Relay::ConnectionType.bidirectional_pagination = true
86
- yield
87
- ensure
88
- GraphQL::Relay::ConnectionType.bidirectional_pagination = prev_value
89
- end
90
-
91
- module TestTracing
92
- class << self
93
- def clear
94
- traces.clear
95
- end
96
-
97
- def with_trace
98
- clear
99
- yield
100
- traces
101
- end
102
-
103
- def traces
104
- @traces ||= []
105
- end
106
-
107
- def trace(key, data)
108
- data[:key] = key
109
- data[:path] ||= data.key?(:context) ? data[:context].path : nil
110
- result = yield
111
- data[:result] = result
112
- traces << data
113
- result
114
- end
115
- end
116
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'ostruct'
3
- module Dummy
4
- module Data
5
- Cheese = Struct.new(:id, :flavor, :origin, :fat_content, :source) do
6
- def ==(other)
7
- # This is buggy on purpose -- it shouldn't be called during execution.
8
- other.id == id
9
- end
10
-
11
- # Alias for when this is treated as milk in EdibleAsMilkInterface
12
- def fatContent # rubocop:disable Naming/MethodName
13
- fat_content
14
- end
15
- end
16
-
17
- Milk = Struct.new(:id, :fat_content, :origin, :source, :flavors)
18
- Cow = Struct.new(:id, :name, :last_produced_dairy)
19
- Goat = Struct.new(:id, :name, :last_produced_dairy)
20
- end
21
-
22
- CHEESES = {
23
- 1 => Data::Cheese.new(1, "Brie", "France", 0.19, 1),
24
- 2 => Data::Cheese.new(2, "Gouda", "Netherlands", 0.3, 1),
25
- 3 => Data::Cheese.new(3, "Manchego", "Spain", 0.065, "SHEEP")
26
- }
27
-
28
- MILKS = {
29
- 1 => Data::Milk.new(1, 0.04, "Antiquity", 1, ["Natural", "Chocolate", "Strawberry"]),
30
- }
31
-
32
- DAIRY = OpenStruct.new(
33
- id: 1,
34
- cheese: CHEESES[1],
35
- milks: [MILKS[1]]
36
- )
37
-
38
- COWS = {
39
- 1 => Data::Cow.new(1, "Billy", MILKS[1])
40
- }
41
-
42
- GOATS = {
43
- 1 => Data::Goat.new(1, "Gilly", MILKS[1]),
44
- }
45
- end
@@ -1,519 +0,0 @@
1
- # frozen_string_literal: true
2
- require "graphql"
3
- require_relative "./data"
4
- module Dummy
5
- class NoSuchDairyError < StandardError; end
6
-
7
- GraphQL::Field.accepts_definitions(joins: GraphQL::Define.assign_metadata_key(:joins))
8
- GraphQL::BaseType.accepts_definitions(class_names: GraphQL::Define.assign_metadata_key(:class_names))
9
-
10
- class BaseField < GraphQL::Schema::Field
11
- accepts_definition :joins
12
- end
13
-
14
- class AdminField < GraphQL::Schema::Field
15
- def visible?(context)
16
- context[:admin] == true
17
- end
18
- end
19
-
20
- module BaseInterface
21
- include GraphQL::Schema::Interface
22
- end
23
-
24
- class BaseObject < GraphQL::Schema::Object
25
- field_class BaseField
26
- accepts_definition :class_names
27
- end
28
-
29
- class BaseUnion < GraphQL::Schema::Union
30
- end
31
-
32
- class BaseEnum < GraphQL::Schema::Enum
33
- end
34
-
35
- class BaseInputObject < GraphQL::Schema::InputObject
36
- end
37
-
38
- class BaseScalar < GraphQL::Schema::Scalar
39
- end
40
-
41
- module LocalProduct
42
- include BaseInterface
43
- description "Something that comes from somewhere"
44
- field :origin, String, null: false,
45
- description: "Place the thing comes from"
46
- end
47
-
48
- module Edible
49
- include BaseInterface
50
- description "Something you can eat, yum"
51
- field :fat_content, Float, null: false, description: "Percentage which is fat"
52
- field :origin, String, null: false, description: "Place the edible comes from"
53
- field :self_as_edible, Edible, null: true
54
- def self_as_edible
55
- object
56
- end
57
- end
58
-
59
- module EdibleAsMilk
60
- include Edible
61
- description "Milk :+1:"
62
- def self.resolve_type(obj, ctx)
63
- Milk
64
- end
65
- end
66
-
67
- class DairyAnimal < BaseEnum
68
- description "An animal which can yield milk"
69
- value("COW", "Animal with black and white spots", value: 1)
70
- value("DONKEY", "Animal with fur", value: :donkey)
71
- value("GOAT", "Animal with horns")
72
- value("REINDEER", "Animal with horns", value: 'reindeer')
73
- value("SHEEP", "Animal with wool")
74
- value("YAK", "Animal with long hair", deprecation_reason: "Out of fashion")
75
- end
76
-
77
- module AnimalProduct
78
- include BaseInterface
79
- description "Comes from an animal, no joke"
80
- field :source, DairyAnimal, "Animal which produced this product", null: false
81
- end
82
-
83
- class Cheese < BaseObject
84
- class_names ["Cheese"]
85
- description "Cultured dairy product"
86
- implements Edible
87
- implements EdibleAsMilk
88
- implements AnimalProduct
89
- implements LocalProduct
90
-
91
- field :id, Int, "Unique identifier", null: false
92
- field :flavor, String, "Kind of Cheese", null: false
93
- field :origin, String, "Place the cheese comes from", null: false
94
-
95
- field :source, DairyAnimal,
96
- "Animal which produced the milk for this cheese",
97
- null: false
98
-
99
- field :similar_cheese, Cheese, "Cheeses like this one", null: true do
100
- # metadata test
101
- joins [:cheeses, :milks]
102
- argument :source, [DairyAnimal], required: true
103
- argument :nullableSource, [DairyAnimal], required: false, default_value: [1]
104
- end
105
-
106
- def similar_cheese(source:, nullable_source:)
107
- # get the strings out:
108
- sources = source
109
- if sources.include?("YAK")
110
- raise NoSuchDairyError.new("No cheeses are made from Yak milk!")
111
- else
112
- CHEESES.values.find { |cheese| sources.include?(cheese.source) }
113
- end
114
- end
115
-
116
- field :nullable_cheese, Cheese, "Cheeses like this one", null: true do
117
- argument :source, [DairyAnimal], required: false
118
- end
119
- def nullable_cheese; raise("NotImplemented"); end
120
-
121
- field :deeply_nullable_cheese, Cheese, "Cheeses like this one", null: true do
122
- argument :source, [[DairyAnimal, null: true], null: true], required: false
123
- end
124
- def deeply_nullable_cheese; raise("NotImplemented"); end
125
-
126
- # Keywords can be used for definition methods
127
- field :fat_content,
128
- type: GraphQL::FLOAT_TYPE,
129
- null: false,
130
- description: "Percentage which is milkfat",
131
- deprecation_reason: "Diet fashion has changed"
132
- end
133
-
134
- class Milk < BaseObject
135
- description "Dairy beverage"
136
- implements Edible
137
- implements EdibleAsMilk
138
- implements AnimalProduct
139
- implements LocalProduct
140
-
141
- field :id, ID, null: false
142
- field :source, DairyAnimal, null: false, description: "Animal which produced this milk"
143
- field :origin, String, null: false, description: "Place the milk comes from"
144
- field :flavors, [String, null: true], null: true, description: "Chocolate, Strawberry, etc" do
145
- argument :limit, Int, required: false
146
- end
147
-
148
- def flavors(limit: nil)
149
- limit ? object.flavors.first(limit) : object.flavors
150
- end
151
-
152
- field :execution_error, String, null: true
153
- def execution_error; raise(GraphQL::ExecutionError, "There was an execution error"); end
154
-
155
- field :all_dairy, ["Dummy::DairyProduct", null: true], null: true
156
- def all_dairy; CHEESES.values + MILKS.values; end
157
- end
158
-
159
- class Beverage < BaseUnion
160
- description "Something you can drink"
161
- possible_types Milk
162
- end
163
-
164
- module Sweetener
165
- include BaseInterface
166
- field :sweetness, Integer, null: true
167
- end
168
-
169
- # No actual data; This type is an "orphan", only accessible through Interfaces
170
- class Honey < BaseObject
171
- description "Sweet, dehydrated bee barf"
172
- field :flower_type, String, "What flower this honey came from", null: true
173
- implements Edible
174
- implements AnimalProduct
175
- implements Sweetener
176
- end
177
-
178
- class Dairy < BaseObject
179
- description "A farm where milk is harvested and cheese is produced"
180
- field :id, ID, null: false
181
- field :cheese, Cheese, null: true
182
- field :milks, [Milk, null: true], null: true
183
- end
184
-
185
- class MaybeNull < BaseObject
186
- description "An object whose fields return nil"
187
- field :cheese, Cheese, null: true
188
- end
189
-
190
- class TracingScalar < BaseObject
191
- description "An object which has traced scalars"
192
-
193
- field :trace_nil, Integer, null: true
194
- field :trace_false, Integer, null: true, trace: false
195
- field :trace_true, Integer, null: true, trace: true
196
- end
197
-
198
- class DairyProduct < BaseUnion
199
- description "Kinds of food made from milk"
200
- # Test that these forms of declaration still work:
201
- possible_types "Dummy::Milk", Cheese
202
- end
203
-
204
- class Cow < BaseObject
205
- description "A bovine animal that produces milk"
206
- field :id, ID, null: false
207
- field :name, String, null: true
208
- field :last_produced_dairy, DairyProduct, null: true
209
-
210
- field :cant_be_null_but_is, String, null: false
211
- def cant_be_null_but_is; nil; end
212
-
213
- field :cant_be_null_but_raises_execution_error, String, null: false
214
- def cant_be_null_but_raises_execution_error; raise(GraphQL::ExecutionError, "BOOM"); end
215
- end
216
-
217
- class Goat < BaseObject
218
- description "An caprinae animal that produces milk"
219
- field :id, ID, null: false
220
- field :name, String, null: true
221
- field :last_produced_dairy, DairyProduct, null: true
222
- end
223
-
224
- class Animal < BaseUnion
225
- description "Species of living things"
226
- possible_types Cow, Goat
227
- end
228
-
229
- class AnimalAsCow < BaseUnion
230
- description "All animals go mooooo!"
231
- possible_types Cow
232
- def self.resolve_type(obj, ctx)
233
- Cow
234
- end
235
- end
236
-
237
- class ResourceOrder < BaseInputObject
238
- graphql_name "ResourceOrderType"
239
- description "Properties used to determine ordering"
240
-
241
- argument :direction, String, required: true, description: "ASC or DESC"
242
- end
243
-
244
- class DairyProductInput < BaseInputObject
245
- description "Properties for finding a dairy product"
246
- argument :source, DairyAnimal, required: true, description: "Where it came from"
247
- argument :origin_dairy, String, required: false, description: "Dairy which produced it", default_value: "Sugar Hollow Dairy"
248
- argument :fat_content, Float, required: false, description: "How much fat it has", default_value: 0.3
249
- argument :organic, Boolean, required: false, default_value: false
250
- argument :order_by, ResourceOrder, required: false, default_value: { direction: "ASC" }, camelize: false
251
- end
252
-
253
- class DeepNonNull < BaseObject
254
- field :non_null_int, Integer, null: false do
255
- argument :returning, Integer, required: false
256
- end
257
- def non_null_int(returning: nil)
258
- returning
259
- end
260
-
261
- field :deep_non_null, DeepNonNull, null: false
262
- def deep_non_null; :deep_non_null; end
263
- end
264
-
265
- class Time < BaseScalar
266
- description "Time since epoch in seconds"
267
-
268
- def self.coerce_input(value, ctx)
269
- Time.at(Float(value))
270
- rescue ArgumentError
271
- raise GraphQL::CoercionError, 'cannot coerce to Float'
272
- end
273
-
274
- def self.coerce_result(value, ctx)
275
- value.to_f
276
- end
277
- end
278
-
279
- class FetchItem < GraphQL::Schema::Resolver
280
- class << self
281
- attr_accessor :data
282
- end
283
-
284
- def self.build(type:, data:, id_type: "Int")
285
- Class.new(self) do
286
- self.data = data
287
- type(type, null: true)
288
- description("Find a #{type.name} by id")
289
- argument :id, id_type, required: true
290
- end
291
- end
292
-
293
- def resolve(id:)
294
- id_string = id.to_s # Cheese has Int type, Milk has ID type :(
295
- _id, item = self.class.data.find { |item_id, _item| item_id.to_s == id_string }
296
- item
297
- end
298
- end
299
-
300
- class GetSingleton < GraphQL::Schema::Resolver
301
- class << self
302
- attr_accessor :data
303
- end
304
-
305
- def self.build(type:, data:)
306
- Class.new(self) do
307
- description("Find the only #{type.name}")
308
- type(type, null: true)
309
- self.data = data
310
- end
311
- end
312
-
313
- def resolve
314
- self.class.data
315
- end
316
- end
317
-
318
- class DairyAppQuery < BaseObject
319
- graphql_name "Query"
320
- description "Query root of the system"
321
- # Returns `root_value:`
322
- field :root, String, null: true
323
- def root
324
- object
325
- end
326
- field :cheese, resolver: FetchItem.build(type: Cheese, data: CHEESES)
327
- field :milk, resolver: FetchItem.build(type: Milk, data: MILKS, id_type: "ID")
328
- field :dairy, resolver: GetSingleton.build(type: Dairy, data: DAIRY)
329
- field :from_source, [Cheese, null: true], null: true, description: "Cheese from source" do
330
- argument :source, DairyAnimal, required: false, default_value: 1
331
- end
332
- def from_source(source:)
333
- CHEESES.values.select { |c| c.source == source }
334
- end
335
-
336
- field :favorite_edible, Edible, null: true, description: "My favorite food"
337
- def favorite_edible
338
- MILKS[1]
339
- end
340
-
341
- field :cow, resolver: GetSingleton.build(type: Cow, data: COWS[1])
342
- field :search_dairy, DairyProduct, null: false do
343
- description "Find dairy products matching a description"
344
- # This is a list just for testing 😬
345
- argument :product, [DairyProductInput, null: true], required: false, default_value: [{source: "SHEEP"}]
346
- argument :expires_after, Time, required: false
347
- end
348
-
349
- def search_dairy(product:, expires_after: nil)
350
- source = product[0][:source]
351
- products = CHEESES.values + MILKS.values
352
- if !source.nil?
353
- products = products.select { |pr| pr.source == source }
354
- end
355
- products.first
356
- end
357
-
358
- field :all_animal, [Animal, null: true], null: false
359
- def all_animal
360
- COWS.values + GOATS.values
361
- end
362
-
363
- field :all_animal_as_cow, [AnimalAsCow, null: true], null: false, resolver_method: :all_animal
364
-
365
- field :all_dairy, [DairyProduct, null: true], null: true do
366
- argument :execution_error_at_index, Integer, required: false
367
- end
368
- def all_dairy(execution_error_at_index: nil)
369
- result = CHEESES.values + MILKS.values
370
- if execution_error_at_index
371
- result[execution_error_at_index] = GraphQL::ExecutionError.new("missing dairy")
372
- end
373
- result
374
- end
375
-
376
- field :all_edible, [Edible, null: true], null: true
377
- def all_edible
378
- CHEESES.values + MILKS.values
379
- end
380
-
381
- field :all_edible_as_milk, [EdibleAsMilk, null: true], null: true, resolver_method: :all_edible
382
-
383
- field :error, String, null: true, description: "Raise an error"
384
- def error
385
- raise("This error was raised on purpose")
386
- end
387
-
388
- field :execution_error, String, null: true
389
- def execution_error
390
- raise(GraphQL::ExecutionError, "There was an execution error")
391
- end
392
-
393
- field :value_with_execution_error, Integer, null: false, extras: [:execution_errors]
394
- def value_with_execution_error(execution_errors:)
395
- execution_errors.add("Could not fetch latest value")
396
- 0
397
- end
398
-
399
- field :multiple_errors_on_non_nullable_field, String, null: false
400
- def multiple_errors_on_non_nullable_field
401
- [
402
- GraphQL::ExecutionError.new("This is an error message for some error."),
403
- GraphQL::ExecutionError.new("This is another error message for a different error.")
404
- ]
405
- end
406
-
407
- field :multiple_errors_on_non_nullable_list_field, [String], null: false
408
- def multiple_errors_on_non_nullable_list_field
409
- [
410
- GraphQL::ExecutionError.new("The first error message for a field defined to return a list of strings."),
411
- GraphQL::ExecutionError.new("The second error message for a field defined to return a list of strings.")
412
- ]
413
- end
414
-
415
- field :execution_error_with_options, Integer, null: true
416
- def execution_error_with_options
417
- GraphQL::ExecutionError.new("Permission Denied!", options: { "code" => "permission_denied" })
418
- end
419
-
420
- field :execution_error_with_extensions, Integer, null: true
421
- def execution_error_with_extensions
422
- GraphQL::ExecutionError.new("Permission Denied!", extensions: { "code" => "permission_denied" })
423
- end
424
-
425
- # To test possibly-null fields
426
- field :maybe_null, MaybeNull, null: true
427
- def maybe_null
428
- OpenStruct.new(cheese: nil)
429
- end
430
-
431
- field :tracing_scalar, TracingScalar, null: true
432
- def tracing_scalar
433
- OpenStruct.new(
434
- trace_nil: 2,
435
- trace_false: 3,
436
- trace_true: 5,
437
- )
438
- end
439
-
440
- field :deep_non_null, DeepNonNull, null: false
441
- def deep_non_null; :deep_non_null; end
442
- end
443
-
444
- class AdminDairyAppQuery < BaseObject
445
- field_class AdminField
446
-
447
- field :admin_only_message, String, null: true
448
- def admin_only_message
449
- "This field is only visible to admin"
450
- end
451
- end
452
-
453
- GLOBAL_VALUES = []
454
-
455
- class ReplaceValuesInput < BaseInputObject
456
- argument :values, [Integer], required: true, method_access: false
457
- end
458
-
459
- class DairyAppMutation < BaseObject
460
- graphql_name "Mutation"
461
- description "The root for mutations in this schema"
462
- field :push_value, [Integer], null: false, description: "Push a value onto a global array :D" do
463
- argument :value, Integer, required: true, as: :val
464
- end
465
- def push_value(val:)
466
- GLOBAL_VALUES << val
467
- GLOBAL_VALUES
468
- end
469
-
470
- field :replaceValues, [Integer], "Replace the global array with new values", null: false do
471
- argument :input, ReplaceValuesInput, required: true
472
- end
473
-
474
- def replace_values(input:)
475
- GLOBAL_VALUES.clear
476
- GLOBAL_VALUES.concat(input[:values])
477
- GLOBAL_VALUES
478
- end
479
- end
480
-
481
- class Subscription < BaseObject
482
- field :test, String, null: true
483
- def test; "Test"; end
484
- end
485
-
486
- class Schema < GraphQL::Schema
487
- query DairyAppQuery
488
- mutation DairyAppMutation
489
- subscription Subscription
490
- max_depth 5
491
- # TODO why is `.graphql_definition` required here?
492
- orphan_types Honey, Beverage.graphql_definition
493
-
494
- rescue_from(NoSuchDairyError) { |err| err.message }
495
-
496
- def self.resolve_type(type, obj, ctx)
497
- Schema.types[obj.class.name.split("::").last]
498
- end
499
-
500
- # This is used to confirm that the hook is called:
501
- MAGIC_INT_COERCE_VALUE = -1
502
-
503
- def self.type_error(err, ctx)
504
- if err.is_a?(GraphQL::IntegerEncodingError) && err.integer_value == 99**99
505
- MAGIC_INT_COERCE_VALUE
506
- else
507
- super
508
- end
509
- end
510
-
511
- if TESTING_INTERPRETER
512
- use GraphQL::Execution::Interpreter
513
- end
514
- end
515
-
516
- class AdminSchema < GraphQL::Schema
517
- query AdminDairyAppQuery
518
- end
519
- end