Skip to content

Commit 8e0b232

Browse files
authored
Merge pull request #1978 from ruby-grape/chore/coercion-tests
more unit tests for coercion
2 parents 348a7c3 + d3d767c commit 8e0b232

File tree

2 files changed

+16
-53
lines changed

2 files changed

+16
-53
lines changed

spec/grape/validations/types/primitive_coercer_spec.rb

+14-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,20 @@
1111
context 'Boolean' do
1212
let(:type) { Grape::API::Boolean }
1313

14-
it 'coerces to Boolean' do
15-
expect(subject.call(0)).to eq(false)
14+
[true, 'true', 1].each do |val|
15+
it "coerces '#{val}' to true" do
16+
expect(subject.call(val)).to eq(true)
17+
end
18+
end
19+
20+
[false, 'false', 0].each do |val|
21+
it "coerces '#{val}' to false" do
22+
expect(subject.call(val)).to eq(false)
23+
end
24+
end
25+
26+
it 'returns an error when the given value cannot be coerced' do
27+
expect(subject.call(123)).to be_instance_of(Grape::Validations::Types::InvalidValue)
1628
end
1729
end
1830

spec/grape/validations/validators/coerce_spec.rb

+2-51
Original file line numberDiff line numberDiff line change
@@ -294,66 +294,17 @@ def self.parsed?(value)
294294
end
295295
end
296296

297-
it 'Bool' do
298-
subject.params do
299-
requires :bool, coerce: Grape::API::Boolean
300-
end
301-
subject.get '/bool' do
302-
params[:bool].class
303-
end
304-
305-
get '/bool', bool: 1
306-
expect(last_response.status).to eq(200)
307-
expect(last_response.body).to eq('TrueClass')
308-
309-
get '/bool', bool: 0
310-
expect(last_response.status).to eq(200)
311-
expect(last_response.body).to eq('FalseClass')
312-
313-
get '/bool', bool: 'false'
314-
expect(last_response.status).to eq(200)
315-
expect(last_response.body).to eq('FalseClass')
316-
317-
get '/bool', bool: 'true'
318-
expect(last_response.status).to eq(200)
319-
expect(last_response.body).to eq('TrueClass')
320-
end
321-
322297
it 'Boolean' do
323298
subject.params do
324-
optional :boolean, type: Boolean, default: true
299+
requires :boolean, type: Boolean
325300
end
326301
subject.get '/boolean' do
327302
params[:boolean].class
328303
end
329304

330-
get '/boolean'
305+
get '/boolean', boolean: 1
331306
expect(last_response.status).to eq(200)
332307
expect(last_response.body).to eq('TrueClass')
333-
334-
get '/boolean', boolean: true
335-
expect(last_response.status).to eq(200)
336-
expect(last_response.body).to eq('TrueClass')
337-
338-
get '/boolean', boolean: false
339-
expect(last_response.status).to eq(200)
340-
expect(last_response.body).to eq('FalseClass')
341-
342-
get '/boolean', boolean: 'true'
343-
expect(last_response.status).to eq(200)
344-
expect(last_response.body).to eq('TrueClass')
345-
346-
get '/boolean', boolean: 'false'
347-
expect(last_response.status).to eq(200)
348-
expect(last_response.body).to eq('FalseClass')
349-
350-
get '/boolean', boolean: 123
351-
expect(last_response.status).to eq(400)
352-
expect(last_response.body).to eq('boolean is invalid')
353-
354-
get '/boolean', boolean: '123'
355-
expect(last_response.status).to eq(400)
356-
expect(last_response.body).to eq('boolean is invalid')
357308
end
358309

359310
it 'Rack::Multipart::UploadedFile' do

0 commit comments

Comments
 (0)