Skip to content

Commit

Permalink
Merge pull request #1974 from ruby-grape/chore/primitive-coercer-spec
Browse files Browse the repository at this point in the history
more tests for Grape::Validations::Types::PrimitiveCoercer
  • Loading branch information
dblock committed Jan 14, 2020
2 parents 341160c + 020a166 commit 6d2e332
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 2 deletions.
5 changes: 3 additions & 2 deletions lib/grape/validations/types/primitive_coercer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ module Grape
module Validations
module Types
# Coerces the given value to a type defined via a +type+ argument during
# initialization.
# initialization. When +strict+ is true, it doesn't coerce a value but check
# that it has the proper type.
class PrimitiveCoercer < DryTypeCoercer
MAPPING = {
Grape::API::Boolean => DryTypes::Params::Bool,

# unfortunatelly, a +Params+ scope doesn't contain String
# unfortunately, a +Params+ scope doesn't contain String
String => DryTypes::Coercible::String,
BigDecimal => DryTypes::Coercible::Decimal
}.freeze
Expand Down
63 changes: 63 additions & 0 deletions spec/grape/validations/types/primitive_coercer_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# frozen_string_literal: true

require 'spec_helper'

describe Grape::Validations::Types::PrimitiveCoercer do
let(:strict) { false }

subject { described_class.new(type, strict) }

describe '.call' do
context 'Boolean' do
let(:type) { Grape::API::Boolean }

it 'coerces to Boolean' do
expect(subject.call(0)).to eq(false)
end
end

context 'String' do
let(:type) { String }

it 'coerces to String' do
expect(subject.call(10)).to eq('10')
end
end

context 'BigDecimal' do
let(:type) { BigDecimal }

it 'coerces to BigDecimal' do
expect(subject.call(5)).to eq(BigDecimal(5))
end
end

context 'the strict mode' do
let(:strict) { true }

context 'Boolean' do
let(:type) { Grape::API::Boolean }

it 'returns an error when the given value is not Boolean' do
expect(subject.call(1)).to be_instance_of(Grape::Validations::Types::InvalidValue)
end

it 'returns a value as it is when the given value is Boolean' do
expect(subject.call(true)).to eq(true)
end
end

context 'BigDecimal' do
let(:type) { BigDecimal }

it 'returns an error when the given value is not BigDecimal' do
expect(subject.call(1)).to be_instance_of(Grape::Validations::Types::InvalidValue)
end

it 'returns a value as it is when the given value is BigDecimal' do
expect(subject.call(BigDecimal(0))).to eq(BigDecimal(0))
end
end
end
end
end

0 comments on commit 6d2e332

Please sign in to comment.