Sha256: e34e09aefe18545f132ec29805e00f4aa47ed4e89a9eca884424eede874424ab

Contents?: true

Size: 1.57 KB

Versions: 2

Compression:

Stored size: 1.57 KB

Contents

require 'spec_helper'

RSpec.describe Addresses::Zipcode, type: :model do
  describe 'validation' do
    it { is_expected.to validate_presence_of(:number) }
    it { is_expected.to validate_presence_of(:city_id) }
    it { is_expected.to validate_presence_of(:state_id) }
  end

  describe 'association' do
    it { is_expected.to belong_to(:city) }
    it { is_expected.to belong_to(:neighborhood) }
    it { is_expected.to have_many(:addresses) }
  end

  describe '.find_or_create_by_service', :vcr do
    context 'when the zipcode exists in database' do
      let!(:zipcode) { create :zipcode }
      let!(:searched_zipcode) { Addresses::Zipcode.find_or_create_by_service(zipcode.number) }

      it { expect(searched_zipcode).to eq(zipcode) }
    end

    context 'when the zipcode not exists in database' do
      context 'but the zipcode was found in web service' do
        let!(:searched_zipcode) { Addresses::Zipcode.find_or_create_by_service('05012010') }

        it { expect(searched_zipcode).to be_a_instance_of(Addresses::Zipcode) }
        it { expect(searched_zipcode.number).to eq('05012010') }
        it { expect(searched_zipcode.street).to eq('Rua Ministro Gastão Mesquita') }
      end

      context 'and the zipcode was not found in web service' do
        let!(:searched_zipcode) { Addresses::Zipcode.find_or_create_by_service('99999999') }
        it { expect(searched_zipcode).to be_nil }
      end
    end
  end

  describe '#to_s' do
    let!(:zipcode) { create :zipcode }
    it { expect(zipcode.to_s).to eq("Street name, Neighborhood name. City name - State acronym") }
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
addresses-1.0.2 spec/models/addresses/zipcode_spec.rb
addresses-1.0.1 spec/models/addresses/zipcode_spec.rb