@@ -151,4 +151,55 @@ class TestInput2 < GraphQL::Schema::InputObject
151151 assert_equal ( { a : 1 , b : 2 , input_object : { d : 3 , e : 4 } } , input_object . to_h )
152152 end
153153 end
154+
155+ describe "#dig" do
156+ module InputObjectDigTest
157+ class TestInput1 < GraphQL ::Schema ::InputObject
158+ graphql_name "TestInput1"
159+ argument :d , Int , required : true
160+ argument :e , Int , required : true
161+ end
162+
163+ class TestInput2 < GraphQL ::Schema ::InputObject
164+ graphql_name "TestInput2"
165+ argument :a , Int , required : true
166+ argument :b , Int , required : true
167+ argument :c , TestInput1 , as : :inputObject , required : true
168+ end
169+
170+ TestInput1 . to_graphql
171+ TestInput2 . to_graphql
172+ end
173+ arg_values = { a : 1 , b : 2 , c : { d : 3 , e : 4 } }
174+
175+ input_object = InputObjectDigTest ::TestInput2 . new (
176+ arg_values ,
177+ context : nil ,
178+ defaults_used : Set . new
179+ )
180+ it "returns the value at that key" do
181+ assert_equal 1 , input_object . dig ( "a" )
182+ assert_equal 1 , input_object . dig ( :a )
183+ assert input_object . dig ( "inputObject" ) . is_a? ( GraphQL ::Schema ::InputObject )
184+ end
185+
186+ it "works with nested keys" do
187+ assert_equal 3 , input_object . dig ( "inputObject" , "d" )
188+ assert_equal 3 , input_object . dig ( :inputObject , :d )
189+ assert_equal 3 , input_object . dig ( "inputObject" , :d )
190+ assert_equal 3 , input_object . dig ( :inputObject , "d" )
191+ end
192+
193+ it "returns nil for missing keys" do
194+ assert_nil input_object . dig ( "z" )
195+ assert_nil input_object . dig ( 7 )
196+ end
197+
198+ it "handles underscored keys" do
199+ # TODO - shouldn't this work too?
200+ # assert_equal 3, input_object.dig('input_object', 'd')
201+ assert_equal 3 , input_object . dig ( :input_object , :d )
202+ end
203+
204+ end
154205end
0 commit comments