require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') describe ISO3166 do let(:data) { {:code => "AD", :country => "ANDORRA"} } let(:different_data) {{:some => 'data'}} let(:iso_3166) { ISO3166.new(data) } it 'is equal to another ISO3166 object if contains the same data' do same_iso_3166 = ISO3166.new(data) different_iso_3166 = ISO3166.new(different_data) iso_3166.should == same_iso_3166 iso_3166.should_not == different_iso_3166 end it 'responds to code' do iso_3166.code.should == 'AD' end it 'responds to country' do iso_3166.country.should == 'ANDORRA' end end describe ISO3166::Codes do context 'validation' do let(:iso_3166) {ISO3166::Codes.new} let(:iso_records) { mock(:values_for => ['US', '123']) } before { ISORecords.stub(:new => iso_records) } context 'on default field' do it 'returns false for a nil value' do iso_3166.validate(nil).should be_false end it 'does not match nil to ""' do iso_records.stub(:values_for => ['']) iso_3166.validate(nil).should be_false end it 'validates a number' do iso_3166.validate(123).should be_true end it 'gets a list of values' do iso_records.should_receive(:values_for).with(:code) iso_3166.validate('US') end end context 'on country field' do it 'gets a list of values' do iso_records.should_receive(:values_for).with(:country) iso_3166.validate('2345', :country) end end context 'on multiple fields' do it 'gets a list of values' do iso_records.should_receive(:values_for).with([:code, :country]) iso_3166.validate('1234', [:code, :country]) end end context 'returns true if the value is valid' do it 'with matching case' do iso_3166.validate('us').should be_true end it 'with different case' do iso_3166.validate('US').should be_true end end it 'returns false if the value is invalid' do iso_records.stub(:values_for => []) iso_3166.validate('BLABLA').should be_false end end end