diff --git a/spec/grape/validations/validators/coerce_spec.rb b/spec/grape/validations/validators/coerce_spec.rb index 6767ae21f6..3f8046f8ad 100644 --- a/spec/grape/validations/validators/coerce_spec.rb +++ b/spec/grape/validations/validators/coerce_spec.rb @@ -706,6 +706,44 @@ def self.parse(_val) expect(JSON.parse(last_response.body)).to eq([1, 1, 1, 1]) end + context 'Array type and coerce_with should' do + before do + subject.params do + optional :arr, type: Array, coerce_with: (lambda do |val| + if val.nil? + [] + else + val + end + end) + end + subject.get '/' do + params[:arr].class.to_s + end + end + + it 'coerce nil value to array' do + get '/', arr: nil + + expect(last_response.status).to eq(200) + expect(last_response.body).to eq('Array') + end + + it 'not coerce missing field' do + get '/' + + expect(last_response.status).to eq(200) + expect(last_response.body).to eq('NilClass') + end + + it 'coerce array as array' do + get '/', arr: [] + + expect(last_response.status).to eq(200) + expect(last_response.body).to eq('Array') + end + end + it 'uses parse where available' do subject.params do requires :ints, type: Array, coerce_with: JSON do