44if RUN_RACTOR_TESTS
55 describe GraphQL ::Schema ::RactorShareable do
66 class RactorExampleSchema < GraphQL ::Schema
7+ class CustomError < RuntimeError ; end
8+
9+ class SomeEnum < GraphQL ::Schema ::Enum
10+ value :A
11+ value :B
12+ end
713 class Query < GraphQL ::Schema ::Object
814 field :i , Int , fallback_value : 1
15+ field :e , SomeEnum , fallback_value : "A"
16+
17+ field :error_1 , String
18+
19+ def error_1
20+ raise GraphQL ::ExecutionError , "Boom!"
21+ end
22+
23+ field :error_2 , String
24+
25+ def error_2
26+ raise CustomError
27+ end
928 end
29+
1030 query ( Query )
1131 validate_timeout ( nil ) # Timeout doesn't work in non-main Ractors
1232 use GraphQL ::Schema ::Visibility , preload : true , profiles : { nil => { } }
13-
33+ rescue_from ( CustomError ) { "Something went wrong" }
1434 extend GraphQL ::Schema ::RactorShareable
1535 end
1636
1737 it "can access some basic GraphQL objects" do
1838 ractor = Ractor . new do
1939 parent = Ractor . receive
20- query = GraphQL ::Query . new ( RactorExampleSchema , "{ __typename }" )
40+ query = GraphQL ::Query . new ( RactorExampleSchema , "{ __typename i e }" )
2141 parent . send ( query . class . name )
2242 result = query . result . to_h
2343 parent . send ( result )
@@ -28,21 +48,63 @@ class Query < GraphQL::Schema::Object
2848 end
2949 ractor . send ( Ractor . current )
3050 assert_equal "GraphQL::Query" , Ractor . receive
31- assert_equal ( { "data" => { "__typename" => "Query" } } , Ractor . receive )
51+ expected_result = {
52+ "data" => {
53+ "__typename" => "Query" ,
54+ "i" => 1 ,
55+ "e" => "A"
56+ }
57+ }
58+ assert_graphql_equal expected_result , Ractor . receive
59+ end
60+
61+ it "can handle runtime errors" do
62+ ractor = Ractor . new do
63+ parent = Ractor . receive
64+ result = RactorExampleSchema . execute ( "{ error1 error2 }" )
65+ parent . send ( result . to_h )
66+ rescue StandardError => err
67+ puts err . message
68+ puts err . backtrace
69+ parent . send ( err )
70+ end
71+ ractor . send ( Ractor . current )
72+ expected_result = {
73+ "errors" => [
74+ {
75+ "message" => "Boom!" ,
76+ "locations" => [ { "line" => 1 , "column" => 3 } ] ,
77+ "path" => [ "error1" ]
78+ }
79+ ] ,
80+ "data" => {
81+ "error1" => nil ,
82+ "error2" => "Something went wrong"
83+ }
84+ }
85+ assert_graphql_equal expected_result , Ractor . receive
3286 end
3387
3488 it "can get schema members by name" do
35- skip "Doesn't work yet"
3689 ractor = Ractor . new do
3790 parent = Ractor . receive
3891 parent . send ( RactorExampleSchema . get_field ( "Query" , "__typename" ) . class . name )
92+ parent . send ( RactorExampleSchema . get_type ( "Query" ) . class . name )
93+ parent . send ( RactorExampleSchema . get_field ( "Query" , "i" ) . class . name )
94+ parent . send ( [
95+ RactorExampleSchema . query . graphql_name ,
96+ RactorExampleSchema . mutation
97+ ] )
3998 rescue StandardError => err
4099 puts err . message
41100 puts err . backtrace
42- parent . send ( err )
101+ parent . send ( err . message )
43102 end
44103 ractor . send ( Ractor . current )
45- assert_equal "GraphQL::Field" , Ractor . receive
104+ assert_equal "GraphQL::Schema::Field" , Ractor . receive
105+ assert_equal "Class" , Ractor . receive
106+ assert_equal "GraphQL::Schema::Field" , Ractor . receive
107+ assert_equal [ "Query" , nil ] , Ractor . receive
46108 end
47109
48110 it "can parse a schema string to ast" do
0 commit comments