module GraphQL::Testing::Helpers
Public Class Methods
# File lib/graphql/testing/helpers.rb, line 18 def self.for(schema_class) SchemaHelpers.for(schema_class) end
Parameters
-
schema_class(Class<GraphQL::Schema>)
Returns
-
Module— A helpers module which always uses the given schema
Public Instance Methods
# File lib/graphql/testing/helpers.rb, line 53 def run_graphql_field(schema, field_path, object, arguments: {}, context: {}, ast_node: nil, lookahead: nil, visibility_profile: nil) ast_node = ast_node #: GraphQL::Language::Nodes::Field? lookahead = lookahead #: GraphQL::Execution::Lookahead? type_name, *field_names = field_path.split(".") dummy_query = GraphQL::Query.new(schema, "{ __typename }", context: context, visibility_profile: visibility_profile) query_context = dummy_query.context dataloader = query_context.dataloader object_type = dummy_query.types.type(type_name) # rubocop:disable Development/ContextIsPassedCop if object_type graphql_result = object field_names.each do |field_name| inner_object = graphql_result dataloader.run_isolated { graphql_result = object_type.wrap(inner_object, query_context) } if graphql_result.nil? return nil end visible_field = dummy_query.types.field(object_type, field_name) # rubocop:disable Development/ContextIsPassedCop if visible_field dataloader.run_isolated { query_context[:current_field] = visible_field field_args = visible_field.coerce_arguments(graphql_result, arguments, query_context) field_args = schema.sync_lazy(field_args) if !visible_field.extras.empty? extra_args = {} visible_field.extras.each do |extra| extra_args[extra] = case extra when :ast_node ast_node ||= GraphQL::Language::Nodes::Field.new(name: visible_field.graphql_name) when :lookahead lookahead ||= begin ast_node ||= GraphQL::Language::Nodes::Field.new(name: visible_field.graphql_name) Execution::Lookahead.new( query: dummy_query, ast_nodes: [ast_node], field: visible_field, ) end else raise ArgumentError, "This extra isn't supported in `run_graphql_field` yet: `#{extra.inspect}`. Open an issue on GitHub to request it: https://github.com/rmosolgo/graphql-ruby/issues/new" end end field_args = field_args.merge_extras(extra_args) end graphql_result = visible_field.resolve(graphql_result, field_args.keyword_arguments, query_context) graphql_result = schema.sync_lazy(graphql_result) } object_type = visible_field.type.unwrap elsif object_type.all_field_definitions.any? { |f| f.graphql_name == field_name } raise FieldNotVisibleError.new(field_name: field_name, type_name: type_name) else raise FieldNotDefinedError.new(type_name: type_name, field_name: field_name) end end graphql_result else unfiltered_type = schema.use_visibility_profile? ? schema.visibility.get_type(type_name) : schema.get_type(type_name) # rubocop:disable Development/ContextIsPassedCop if unfiltered_type raise TypeNotVisibleError.new(type_name: type_name) else raise TypeNotDefinedError.new(type_name: type_name) end end end
# File lib/graphql/testing/helpers.rb, line 120 def with_resolution_context(schema, type:, object:, context:{}, visibility_profile: nil) resolution_context = ResolutionAssertionContext.new( self, schema: schema, type_name: type, object: object, context: context, visibility_profile: visibility_profile, ) yield(resolution_context) end