require 'spec_helper' describe Spree::Address do let(:address) { build(:address) } let(:enterprise_address) { build(:address, enterprise: build(:enterprise)) } describe "associations" do it { is_expected.to have_one(:enterprise) } end describe "delegation" do it { is_expected.to delegate(:name).to(:state).with_prefix } end describe "destroy" do it "can be deleted" do expect { address.destroy }.to_not raise_error end it "cannot be deleted with associated enterprise" do expect do enterprise_address.destroy end.to raise_error ActiveRecord::DeleteRestrictionError end end describe "#full_name_reverse" do it "joins last name and first name" do address.firstname = "Jane" address.lastname = "Doe" expect(address.full_name_reverse).to eq("Doe Jane") end it "is last name when first name is blank" do address.firstname = "" address.lastname = "Doe" expect(address.full_name_reverse).to eq("Doe") end it "is first name when last name is blank" do address.firstname = "Jane" address.lastname = "" expect(address.full_name_reverse).to eq("Jane") end end describe "geocode address" do it "should include address1, address2, zipcode, city, state and country" do expect(address.geocode_address).to include(address.address1) expect(address.geocode_address).to include(address.address2) expect(address.geocode_address).to include(address.zipcode) expect(address.geocode_address).to include(address.city) expect(address.geocode_address).to include(address.state.name) expect(address.geocode_address).to include(address.country.name) end it "should not include empty fields" do address.address2 = nil address.city = "" expect(address.geocode_address.split(',').length).to eql(4) end end describe "full address" do let(:address) { FactoryBot.build(:address) } it "should include address1, address2, zipcode, city and state" do expect(address.full_address).to include(address.address1) expect(address.full_address).to include(address.address2) expect(address.full_address).to include(address.zipcode) expect(address.full_address).to include(address.city) expect(address.full_address).to include(address.state.name) expect(address.full_address).not_to include(address.country.name) end it "should not include empty fields" do address.address2 = nil address.city = "" expect(address.full_address.split(',').length).to eql(3) end end describe "setters" do it "lets us set a country" do expect do Spree::Address.new.country = "A country" end.to raise_error ActiveRecord::AssociationTypeMismatch end end end