Skip to content

Commit f999522

Browse files
committed
Add test for error in resolve_type
1 parent cb92bf8 commit f999522

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

spec/graphql/execution_error_spec.rb

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,101 @@
400400
assert_equal(expected_errors, result["errors"])
401401
end
402402

403+
describe "when ExecutionError is raised in resolve_type" do
404+
let(:schema) do
405+
test_type = Class.new(GraphQL::Schema::Object) do
406+
graphql_name "Test"
407+
field :dummy, GraphQL::Types::Boolean
408+
end
409+
410+
test_union = Class.new(GraphQL::Schema::Union) do
411+
graphql_name "TestUnion"
412+
possible_types test_type
413+
end
414+
415+
query_type = Class.new(GraphQL::Schema::Object) do
416+
graphql_name "Query"
417+
418+
field :test, test_union
419+
define_method(:test) do
420+
1
421+
end
422+
end
423+
424+
Class.new(GraphQL::Schema) do
425+
query query_type
426+
427+
define_singleton_method(:resolve_type) do |abstract_type, obj, ctx|
428+
raise GraphQL::ExecutionError.new("resolve_type")
429+
end
430+
end
431+
end
432+
433+
it "return execution error with location and path" do
434+
query = "{ test { ...on Test { dummy } } }"
435+
result = schema.execute(query)
436+
expected_result = {
437+
"errors"=>[
438+
{
439+
"message"=>"resolve_type",
440+
"locations"=>[{"line"=>1, "column"=>3}],
441+
"path"=>["test"]
442+
}
443+
],
444+
"data"=>{"test"=>nil}
445+
}
446+
assert_equal(expected_result, result.to_h)
447+
end
448+
449+
describe "when using DataLoaders" do
450+
let(:schema) do
451+
test_type = Class.new(GraphQL::Schema::Object) do
452+
graphql_name "Test"
453+
field :dummy, GraphQL::Types::Boolean
454+
end
455+
456+
test_union = Class.new(GraphQL::Schema::Union) do
457+
graphql_name "TestUnion"
458+
possible_types test_type
459+
end
460+
461+
query_type = Class.new(GraphQL::Schema::Object) do
462+
graphql_name "Query"
463+
464+
field :test, test_union
465+
define_method(:test) do
466+
1
467+
end
468+
end
469+
470+
Class.new(GraphQL::Schema) do
471+
query query_type
472+
use GraphQL::Dataloader
473+
474+
define_singleton_method(:resolve_type) do |abstract_type, obj, ctx|
475+
raise GraphQL::ExecutionError.new("resolve_type")
476+
end
477+
end
478+
end
479+
480+
it "return execution error with location and path" do
481+
query = "{ test { ...on Test { dummy } } }"
482+
result = schema.execute(query)
483+
expected_result = {
484+
"errors"=>[
485+
{
486+
"message"=>"resolve_type",
487+
"locations"=>[{"line"=>1, "column"=>3}],
488+
"path"=>["test"]
489+
}
490+
],
491+
"data"=>{"test"=>nil}
492+
}
493+
assert_equal(expected_result, result.to_h)
494+
end
495+
end
496+
end
497+
403498
describe "when using DataLoaders" do
404499
let(:schema) do
405500
item_error_loader = Class.new(GraphQL::Dataloader::Source) do

0 commit comments

Comments
 (0)