@@ -395,6 +395,60 @@ def initialize(value)
395
395
end
396
396
end
397
397
398
+ context 'nested structures within hashes' do
399
+ it 'allows nesting of optional arrays within hashes' do
400
+ subject . params do
401
+ optional :data , type : Hash do
402
+ optional :array , type : Array do
403
+ optional :name , type : String
404
+ end
405
+ end
406
+ end
407
+ subject . post ( '/nesty' ) { declared ( params ) . to_json }
408
+
409
+ post '/nesty' , { data : { } }
410
+ expect ( last_response . status ) . to eq 201
411
+ # {"data"=>{"array"=>{"name"=>nil}}}
412
+ expect ( JSON . parse ( last_response . body ) [ 'data' ] [ 'array' ] ) . not_to be_a Hash
413
+ end
414
+
415
+ it 'allows nesting of optional arrays within hashes, JSON-style' do
416
+ subject . format :json
417
+ subject . params do
418
+ optional :data , type : JSON do
419
+ optional :array , type : Array [ JSON ] do
420
+ optional :name , type : String
421
+ end
422
+ end
423
+ end
424
+ subject . post ( '/nesty' ) { declared ( params ) }
425
+
426
+ body = { data : { } } . to_json
427
+ post '/nesty' , body , "CONTENT_TYPE" => "application/json"
428
+
429
+ expect ( last_response . status ) . to eq 201
430
+ # {"data"=>{"array"=>{"name"=>nil}}}
431
+ expect ( JSON . parse ( last_response . body ) [ 'data' ] [ 'array' ] ) . not_to be_a Hash
432
+ end
433
+
434
+ it "doesn't try to add deeply nested optional hashes" do
435
+ # this may be working as intended?
436
+ subject . params do
437
+ optional :data , type : JSON do
438
+ optional :json , type : JSON do
439
+ optional :name , type : String
440
+ end
441
+ end
442
+ end
443
+ subject . post ( '/nesty' ) { declared ( params ) . to_json }
444
+
445
+ post '/nesty' , { data : { } }
446
+ expect ( last_response . status ) . to eq 201
447
+ # {"data"=>{"json"=>{"name"=>nil}}}
448
+ expect ( JSON . parse ( last_response . body ) [ 'data' ] [ 'json' ] [ 'nested_array' ] ) . not_to be_a Hash
449
+ end
450
+ end
451
+
398
452
context 'when validations are dependent on a parameter' do
399
453
before do
400
454
subject . params do
0 commit comments