1212
1313 describe "object hooks" do
1414 class ObjectHooksSchema < GraphQL ::Schema
15- class Thing < GraphQL ::Schema ::Object
15+ module Node
16+ include GraphQL ::Schema ::Interface
1617 field :name , String
1718 end
1819
20+ class Thing < GraphQL ::Schema ::Object
21+ implements Node
22+ end
23+
1924 class Query < GraphQL ::Schema ::Object
2025 field :things , [ Thing ] , resolve_static : true
2126
@@ -38,6 +43,14 @@ def self.thing(context, thing:)
3843 def self . thing_name ( context , thing :)
3944 thing . name
4045 end
46+
47+ field :node , Node , resolve_static : true do
48+ argument :id , ID , loads : Node , as : :node
49+ end
50+
51+ def self . node ( context , node :)
52+ node
53+ end
4154 end
4255
4356 query ( Query )
@@ -80,6 +93,14 @@ def object_loaded(argument_definition, object, context)
8093 res = ObjectHooksSchema . execute_next ( "{ thingName(thingId: \" 77\" ) }" )
8194 assert_equal "Thing #77" , res [ "data" ] [ "thingName" ]
8295 assert_equal [ "1 objects as Query" , "Query.thingName.thingId loaded OpenStruct" ] , res . context [ :log ]
96+
97+ res = ObjectHooksSchema . execute_next ( "{ node(id: \" 33\" ) { name } }" )
98+ assert_equal "Thing #33" , res [ "data" ] [ "node" ] [ "name" ]
99+ assert_equal [ "1 objects as Query" , "Query.node.id loaded OpenStruct" , "1 objects as Thing" ] , res . context [ :log ]
100+
101+ partial_res = res . query . run_partials ( [ { path : [ "node" ] , object : OpenStruct . new ( name : "Injected thing" ) , context : { log : [ ] } } ] )
102+ assert_equal "Injected thing" , partial_res [ 0 ] [ "data" ] [ "name" ]
103+ assert_equal [ "1 objects as Thing" ] , partial_res [ 0 ] . context [ :log ]
83104 end
84105 end
85106end
0 commit comments