describe BikePOA::Helpers::ForceField do class DummySubject < Hashie::Dash include BikePOA::Helpers::ForceField property :normal property :number property :name force_integer :number force_utf8 :name end describe 'force utf8' do let(:dummy) { DummySubject.new } describe 'when setting property directly' do it 'encodes a iso-8859-1 value to utf-8' do dummy.name = "Jo\xE3o da Silva" dummy.name.should == "Jo\xC3\xA3o da Silva" end it 'does not try to over-convert an utf-8 value' do dummy.name = "Jo\xC3\xA3o da Silva" dummy.name.should == "Jo\xC3\xA3o da Silva" end end describe "when loading the Dash from a hash" do it 'encodes an iso-8859-1 value to utf-8' do expect { DummySubject.new(number: '678') }.to_not raise_error(ArgumentError) end end end describe 'force integer' do let(:dummy) { DummySubject.new } describe "when setting property directly" do 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