describe BikePOA::Helpers::ForceField do describe 'force integer' do class DummySubject < Hashie::Dash include BikePOA::Helpers::ForceField property :normal property :number force_integer :number end describe "when setting property directly" do let(:dummy) { DummySubject.new } it "accepts any value that is castable to integer" do expect { dummy.number = '42' }.to_not raise_error(ArgumentError) expect { dummy.number = 42 }.to_not raise_error(ArgumentError) expect { dummy.number = 42.0 }.to_not raise_error(ArgumentError) end it "raises when the value is not castable to integer" do expect { dummy.number = "abc" }.to raise_error(ArgumentError) expect { dummy.number = "a12" }.to raise_error(ArgumentError) end it 'lets you put anything into non-forced fields' do expect { DummySubject.new(normal: 'abc1123') }.to_not raise_error end end describe "when loading the Dash from a hash" do it 'accepts values castable to integer' do expect { DummySubject.new(number: '678') }.to_not raise_error(ArgumentError) end it "raises when one of the forced-fields is invalid" do expect { DummySubject.new(number: "abc") }.to raise_error(ArgumentError) end it 'lets you put anything into non-forced fields' do expect { DummySubject.new(normal: 'abc1123') }.to_not raise_error end end end end