spec/grape/validations_spec.rb in grape-0.17.0 vs spec/grape/validations_spec.rb in grape-0.18.0
- old
+ new
@@ -272,10 +272,32 @@
end
expect(subject.route_setting(:declared_params)).to eq([items: [:key]])
end
end
+ # Ensure there is no leakage between declared Array types and
+ # subsequent Hash types
+ context 'required with an Array and a Hash block' do
+ before do
+ subject.params do
+ requires :cats, type: Array[String], default: []
+ requires :items, type: Hash do
+ requires :key
+ end
+ end
+ subject.get '/required' do
+ 'required works'
+ end
+ end
+
+ it 'does not output index [0] for Hash types' do
+ get '/required', cats: ['Garfield'], items: { foo: 'bar' }
+ expect(last_response.status).to eq(400)
+ expect(last_response.body).to eq('items[key] is missing')
+ end
+ end
+
context 'required with a Hash block' do
before do
subject.params do
requires :items, type: Hash do
requires :key
@@ -288,9 +310,15 @@
it 'errors when param not present' do
get '/required'
expect(last_response.status).to eq(400)
expect(last_response.body).to eq('items is missing, items[key] is missing')
+ end
+
+ it 'errors when nested param not present' do
+ get '/required', items: { foo: 'bar' }
+ expect(last_response.status).to eq(400)
+ expect(last_response.body).to eq('items[key] is missing')
end
it 'errors when param is not a Hash' do
get '/required', items: 'hello'
expect(last_response.status).to eq(400)