42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/graphql/testing/helpers.rb', line 42
def run_graphql_field(schema, field_path, object, arguments: {}, context: {}, ast_node: nil, lookahead: nil)
type_name, *field_names = field_path.split(".")
dummy_query = GraphQL::Query.new(schema, "{ __typename }", context: context)
query_context = dummy_query.context
object_type = dummy_query.types.type(type_name) if object_type
graphql_result = object
field_names.each do |field_name|
inner_object = graphql_result
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) if visible_field
dummy_query.context.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..empty?
= {}
visible_field..each do ||
[] = case
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: `#{.inspect}`. Open an issue on GitHub to request it: https://github.com/rmosolgo/graphql-ruby/issues/new"
end
end
field_args = field_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) if unfiltered_type
raise TypeNotVisibleError.new(type_name: type_name)
else
raise TypeNotDefinedError.new(type_name: type_name)
end
end
end
|