From 439bfd024e12c37eaf9e88d1c8c68b53ed750a33 Mon Sep 17 00:00:00 2001 From: Lorenzo Fermi Date: Fri, 20 Mar 2020 15:08:42 +0100 Subject: [PATCH 1/8] Reorder #persist_order_address spec --- .../spree/concerns/user_address_book_spec.rb | 54 ++++++++----------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/core/spec/models/spree/concerns/user_address_book_spec.rb b/core/spec/models/spree/concerns/user_address_book_spec.rb index 07f989d8648..66e5b75c0f1 100644 --- a/core/spec/models/spree/concerns/user_address_book_spec.rb +++ b/core/spec/models/spree/concerns/user_address_book_spec.rb @@ -289,25 +289,15 @@ module Spree end context "#persist_order_address" do - it 'will save the bill/ship_address reference if it can' do - order = create :order - user.persist_order_address(order) - - expect( user.bill_address_id ).to eq order.bill_address_id - expect( user.ship_address_id ).to eq order.ship_address_id - expect( user.bill_address_id ).not_to eq user.ship_address_id - end - context "when automatic_default_address preference is at a default of true" do - before do - stub_spree_preferences(automatic_default_address: true) - expect(user).to receive(:save_in_address_book).with(kind_of(Hash), true) - expect(user).to receive(:save_in_address_book).with(kind_of(Hash), false) - end + let(:order) { build :order } - it "does set the default: true flag" do - order = build(:order) + it 'will save both bill/ship_address references' do user.persist_order_address(order) + + expect( user.bill_address_id ).to eq order.bill_address_id + expect( user.ship_address_id ).to eq order.ship_address_id + expect( user.bill_address_id ).not_to eq user.ship_address_id end end @@ -324,7 +314,7 @@ module Spree end end - context "when address is nil" do + context "when one order address is nil" do context "when automatic_default_address preference is at a default of true" do before do stub_spree_preferences(automatic_default_address: true) @@ -345,26 +335,26 @@ module Spree user.persist_order_address(order) end end - end - context "when automatic_default_address preference is false" do - before do - stub_spree_preferences(automatic_default_address: false) - expect(user).to receive(:save_in_address_book).with(kind_of(Hash), false).once - end + context "when automatic_default_address preference is false " do + before do + stub_spree_preferences(automatic_default_address: false) + expect(user).to receive(:save_in_address_book).with(kind_of(Hash), false).once + end - it "does not call save_in_address_book on ship address" do - order = build(:order) - order.ship_address = nil + it "does not call save_in_address_book on ship address" do + order = build(:order) + order.ship_address = nil - user.persist_order_address(order) - end + user.persist_order_address(order) + end - it "does not call save_in_address_book on bill address" do - order = build(:order) - order.bill_address = nil + it "does not call save_in_address_book on bill address" do + order = build(:order) + order.bill_address = nil - user.persist_order_address(order) + user.persist_order_address(order) + end end end end From d4794f8a5a9271d1e1d56993d925bacd6a2e43cc Mon Sep 17 00:00:00 2001 From: Lorenzo Fermi Date: Fri, 20 Mar 2020 16:43:44 +0100 Subject: [PATCH 2/8] Redefin bill_address association on user --- .../concerns/spree/user_address_book.rb | 19 ++++++++------- core/app/models/spree/user_address.rb | 1 + ...d_default_billng_flag_to_user_addresses.rb | 5 ++++ .../spree/concerns/user_address_book_spec.rb | 24 +++++++++++++------ 4 files changed, 33 insertions(+), 16 deletions(-) create mode 100644 core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb diff --git a/core/app/models/concerns/spree/user_address_book.rb b/core/app/models/concerns/spree/user_address_book.rb index b1ea00d3e68..8ed72eb7d0d 100644 --- a/core/app/models/concerns/spree/user_address_book.rb +++ b/core/app/models/concerns/spree/user_address_book.rb @@ -10,22 +10,22 @@ def find_first_by_address_values(address_attrs) detect { |ua| ua.address == Spree::Address.new(address_attrs) } end - # @note this method enforces only one default address per user - def mark_default(user_address) + def mark_default(user_address, address_kind = :shipping) # the checks of persisted? allow us to build a User and associate Addresses at once + default_flag = address_kind == :shipping ? :default : :default_billing ActiveRecord::Base.transaction do (self - [user_address]).each do |ua| # update_all would be nice, but it bypasses ActiveRecord callbacks - ua.persisted? ? ua.update!(default: false) : ua.default = false + ua.persisted? ? ua.update!(default_flag => false) : ua.send(default_flag, false) end - user_address.persisted? ? user_address.update!(default: true, archived: false) : user_address.default = true + user_address.persisted? ? user_address.update!({ default_flag => true, :archived => false }) : user_address.write_attribute(default_flag, true) end end end has_many :addresses, through: :user_addresses - # bill_address is only minimally used now, but we can't get rid of it without a major version release - belongs_to :bill_address, class_name: 'Spree::Address', optional: true + has_one :default_user_bill_address, ->{ default_billing }, class_name: 'Spree::UserAddress', foreign_key: 'user_id' + has_one :bill_address, through: :default_user_bill_address, source: :address has_one :default_user_address, ->{ default }, class_name: 'Spree::UserAddress', foreign_key: 'user_id' has_one :default_address, through: :default_user_address, source: :address @@ -79,7 +79,8 @@ def persist_order_address(order) if order.bill_address address = save_in_address_book( order.bill_address.attributes, - order.ship_address.nil? && Spree::Config.automatic_default_address + Spree::Config.automatic_default_address, + :billing ) self.bill_address_id = address.id if address && address.persisted? end @@ -92,7 +93,7 @@ def persist_order_address(order) # treated as value equality to de-dup among existing Addresses # @param default set whether or not this address will show up from # #default_address or not - def save_in_address_book(address_attributes, default = false) + def save_in_address_book(address_attributes, default = false, address_kind = :shipping) return nil unless address_attributes.present? address_attributes = address_attributes.to_h.with_indifferent_access @@ -106,7 +107,7 @@ def save_in_address_book(address_attributes, default = false) end user_address = prepare_user_address(new_address) - user_addresses.mark_default(user_address) if default || first_one + user_addresses.mark_default(user_address, address_kind) if default || first_one if persisted? user_address.save! diff --git a/core/app/models/spree/user_address.rb b/core/app/models/spree/user_address.rb index 3e60b46fd82..331c2bf616c 100644 --- a/core/app/models/spree/user_address.rb +++ b/core/app/models/spree/user_address.rb @@ -16,6 +16,7 @@ class UserAddress < Spree::Base scope :all_historical, -> { unscope(where: :archived) } scope :default, -> { where(default: true) } + scope :default_billing, -> { where(default_billing: true) } scope :active, -> { where(archived: false) } default_scope -> { order([default: :desc, updated_at: :desc]) } diff --git a/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb b/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb new file mode 100644 index 00000000000..4aa97278d2e --- /dev/null +++ b/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb @@ -0,0 +1,5 @@ +class AddDefaultBillngFlagToUserAddresses < ActiveRecord::Migration[6.0] + def change + add_column :spree_user_addresses, :default_billing, :boolean, default: false + end +end diff --git a/core/spec/models/spree/concerns/user_address_book_spec.rb b/core/spec/models/spree/concerns/user_address_book_spec.rb index 66e5b75c0f1..779d35f8850 100644 --- a/core/spec/models/spree/concerns/user_address_book_spec.rb +++ b/core/spec/models/spree/concerns/user_address_book_spec.rb @@ -298,19 +298,27 @@ module Spree expect( user.bill_address_id ).to eq order.bill_address_id expect( user.ship_address_id ).to eq order.ship_address_id expect( user.bill_address_id ).not_to eq user.ship_address_id + + expect( user.bill_address).to eq order.bill_address + expect( user.ship_address).to eq order.ship_address end end context "when automatic_default_address preference is false" do + let(:order) { build :order } + before do stub_spree_preferences(automatic_default_address: false) - expect(user).to receive(:save_in_address_book).with(kind_of(Hash), false).twice - # and not the optional 2nd argument end - it "does not set the default: true flag" do - order = build(:order) + it "will save only the default ship address on user as it is the first address at all" do user.persist_order_address(order) + + expect( user.bill_address_id ).to eq order.bill_address_id + expect( user.ship_address_id ).to eq order.ship_address_id + + expect( user.bill_address).to be_nil + expect( user.ship_address).to eq order.ship_address end end @@ -318,13 +326,13 @@ module Spree context "when automatic_default_address preference is at a default of true" do before do stub_spree_preferences(automatic_default_address: true) - expect(user).to receive(:save_in_address_book).with(kind_of(Hash), true).once end it "does not call save_in_address_book on ship address" do order = build(:order) order.ship_address = nil + expect(user).to receive(:save_in_address_book).with(kind_of(Hash), true, :billing).once user.persist_order_address(order) end @@ -332,20 +340,21 @@ module Spree order = build(:order) order.bill_address = nil + expect(user).to receive(:save_in_address_book).with(kind_of(Hash), true).once user.persist_order_address(order) end end - context "when automatic_default_address preference is false " do + context "when automatic_default_address preference is false" do before do stub_spree_preferences(automatic_default_address: false) - expect(user).to receive(:save_in_address_book).with(kind_of(Hash), false).once end it "does not call save_in_address_book on ship address" do order = build(:order) order.ship_address = nil + expect(user).to receive(:save_in_address_book).with(kind_of(Hash), false, :billing).once user.persist_order_address(order) end @@ -353,6 +362,7 @@ module Spree order = build(:order) order.bill_address = nil + expect(user).to receive(:save_in_address_book).with(kind_of(Hash), false).once user.persist_order_address(order) end end From d649e803985f89894de49e4e8cf6b9be8f8911ea Mon Sep 17 00:00:00 2001 From: Lorenzo Fermi Date: Fri, 20 Mar 2020 17:06:14 +0100 Subject: [PATCH 3/8] Complete bill_address association with setter --- .../models/concerns/spree/user_address_book.rb | 6 ++++-- .../spree/concerns/user_address_book_spec.rb | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/core/app/models/concerns/spree/user_address_book.rb b/core/app/models/concerns/spree/user_address_book.rb index 8ed72eb7d0d..b1473f367e8 100644 --- a/core/app/models/concerns/spree/user_address_book.rb +++ b/core/app/models/concerns/spree/user_address_book.rb @@ -34,8 +34,8 @@ def mark_default(user_address, address_kind = :shipping) def bill_address=(address) # stow a copy in our address book too - address = save_in_address_book(address.attributes) if address - super(address) + be_default = Spree::Config.automatic_default_address + save_in_address_book(address.attributes, be_default, :billing) if address end def bill_address_attributes=(attributes) @@ -119,6 +119,8 @@ def save_in_address_book(address_attributes, default = false, address_kind = :sh user_addresses.reset association(:default_user_address).reset association(:default_address).reset + association(:default_user_bill_address).reset + association(:bill_address).reset end user_address.address diff --git a/core/spec/models/spree/concerns/user_address_book_spec.rb b/core/spec/models/spree/concerns/user_address_book_spec.rb index 779d35f8850..743e5f1452d 100644 --- a/core/spec/models/spree/concerns/user_address_book_spec.rb +++ b/core/spec/models/spree/concerns/user_address_book_spec.rb @@ -398,5 +398,22 @@ module Spree expect(user.ship_address).to eq(address) end end + + describe "bill_address=" do + let!(:user) { create(:user) } + let!(:address) { create(:address) } + + # https://github.com/solidusio/solidus/issuesÃŽ/1241 + it "resets the association and persists" do + # Load (which will cache) the has_one association + expect(user.bill_address).to be_nil + + user.update!(bill_address: address) + expect(user.bill_address).to eq(address) + + user.reload + expect(user.bill_address).to eq(address) + end + end end end From ada9e961264a587401424de91137f5f372d3c41f Mon Sep 17 00:00:00 2001 From: Lorenzo Fermi Date: Fri, 20 Mar 2020 17:48:01 +0100 Subject: [PATCH 4/8] Deprecate #mark_default_address --- .../concerns/spree/user_address_book.rb | 14 +++++- .../spree/concerns/user_address_book_spec.rb | 47 +++++++++++++++++++ 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/core/app/models/concerns/spree/user_address_book.rb b/core/app/models/concerns/spree/user_address_book.rb index b1473f367e8..afffd8efe7a 100644 --- a/core/app/models/concerns/spree/user_address_book.rb +++ b/core/app/models/concerns/spree/user_address_book.rb @@ -73,7 +73,7 @@ def persist_order_address(order) order.ship_address.attributes, Spree::Config.automatic_default_address ) - self.ship_address_id = address.id if address && address.persisted? + self.ship_address_id = address.id if address&.persisted? end if order.bill_address @@ -82,7 +82,7 @@ def persist_order_address(order) Spree::Config.automatic_default_address, :billing ) - self.bill_address_id = address.id if address && address.persisted? + self.bill_address_id = address.id if address&.persisted? end save! # In case the ship_address_id or bill_address_id was set @@ -127,9 +127,19 @@ def save_in_address_book(address_attributes, default = false, address_kind = :sh end def mark_default_address(address) + puts "Hey, this method is deprecated and it sets the ship_address only! Please start using #mark_default_ship_address for that" + + mark_default_ship_address(address) + end + + def mark_default_ship_address(address) user_addresses.mark_default(user_addresses.find_by(address: address)) end + def mark_default_bill_address(address) + user_addresses.mark_default(user_addresses.find_by(address: address), :billing) + end + def remove_from_address_book(address_id) user_address = user_addresses.find_by(address_id: address_id) if user_address diff --git a/core/spec/models/spree/concerns/user_address_book_spec.rb b/core/spec/models/spree/concerns/user_address_book_spec.rb index 743e5f1452d..ca1e64c7c15 100644 --- a/core/spec/models/spree/concerns/user_address_book_spec.rb +++ b/core/spec/models/spree/concerns/user_address_book_spec.rb @@ -415,5 +415,52 @@ module Spree expect(user.bill_address).to eq(address) end end + + describe "#mark_default_address" do + let(:address) { build :address } + + it "calls #mark_default_ship_address and warns user of deprecation" do + expect(user).to receive(:mark_default_ship_address) + + expect { + user.mark_default_address(address) + } + .to output("Hey, this method is deprecated and it sets the ship_address only! Please start using #mark_default_ship_address for that\n").to_stdout + end + end + + describe "#mark_default_ship_address" do + let(:address) { build :address } + let(:user_address) { double } + let(:user_addresses) { double } + + before do + allow(user).to receive(:user_addresses).and_return user_addresses + allow(user_addresses).to receive(:find_by).and_return user_address + end + + it "calls #mark_default with default address kind" do + expect(user_addresses).to receive(:mark_default).with(user_address) + + user.mark_default_ship_address(address) + end + end + + describe "#mark_default_bill_address" do + let(:address) { build :address } + let(:user_address) { double } + let(:user_addresses) { double } + + before do + allow(user).to receive(:user_addresses).and_return user_addresses + allow(user_addresses).to receive(:find_by).and_return user_address + end + + it "calls #mark_default with billing address kind" do + expect(user_addresses).to receive(:mark_default).with(user_address, :billing) + + user.mark_default_bill_address(address) + end + end end end From 88a374feb710a64c2dcd334b10d4c8d7533206d7 Mon Sep 17 00:00:00 2001 From: Lorenzo Fermi Date: Fri, 20 Mar 2020 17:58:09 +0100 Subject: [PATCH 5/8] Add magic comment to migration --- .../20200320144521_add_default_billng_flag_to_user_addresses.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb b/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb index 4aa97278d2e..549888fcb7d 100644 --- a/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +++ b/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: true class AddDefaultBillngFlagToUserAddresses < ActiveRecord::Migration[6.0] def change add_column :spree_user_addresses, :default_billing, :boolean, default: false From f20d5f939d6ae3e2c68e3cbfb507ee9a8b931610 Mon Sep 17 00:00:00 2001 From: Lorenzo Fermi Date: Fri, 20 Mar 2020 18:54:57 +0100 Subject: [PATCH 6/8] Fix attribute update --- core/app/models/concerns/spree/user_address_book.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/app/models/concerns/spree/user_address_book.rb b/core/app/models/concerns/spree/user_address_book.rb index afffd8efe7a..ce49b72ad2c 100644 --- a/core/app/models/concerns/spree/user_address_book.rb +++ b/core/app/models/concerns/spree/user_address_book.rb @@ -15,7 +15,7 @@ def mark_default(user_address, address_kind = :shipping) default_flag = address_kind == :shipping ? :default : :default_billing ActiveRecord::Base.transaction do (self - [user_address]).each do |ua| # update_all would be nice, but it bypasses ActiveRecord callbacks - ua.persisted? ? ua.update!(default_flag => false) : ua.send(default_flag, false) + ua.persisted? ? ua.update!({ default_flag => false }) : ua.write_attribute(default_flag, false) end user_address.persisted? ? user_address.update!({ default_flag => true, :archived => false }) : user_address.write_attribute(default_flag, true) end From 189138c7c8e90a87f56aa4edf4e6d703b3b298a6 Mon Sep 17 00:00:00 2001 From: Lorenzo Fermi Date: Fri, 20 Mar 2020 22:36:05 +0100 Subject: [PATCH 7/8] Trick Circle CI into accepted migration version --- .../20200320144521_add_default_billng_flag_to_user_addresses.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb b/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb index 549888fcb7d..e8435fbc598 100644 --- a/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +++ b/core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -class AddDefaultBillngFlagToUserAddresses < ActiveRecord::Migration[6.0] +class AddDefaultBillngFlagToUserAddresses < ActiveRecord::Migration[5.2] def change add_column :spree_user_addresses, :default_billing, :boolean, default: false end From ae300ca42ef95dd6bcb190907756910de12b322b Mon Sep 17 00:00:00 2001 From: Lorenzo Fermi Date: Sat, 21 Mar 2020 16:56:55 +0100 Subject: [PATCH 8/8] Test #save_in_address_book behaviour more thoroughly --- .../spree/concerns/user_address_book_spec.rb | 138 +++++++++++++++--- 1 file changed, 114 insertions(+), 24 deletions(-) diff --git a/core/spec/models/spree/concerns/user_address_book_spec.rb b/core/spec/models/spree/concerns/user_address_book_spec.rb index ca1e64c7c15..55d9098f5c6 100644 --- a/core/spec/models/spree/concerns/user_address_book_spec.rb +++ b/core/spec/models/spree/concerns/user_address_book_spec.rb @@ -11,7 +11,7 @@ module Spree let!(:user) { create(:user) } describe "#save_in_address_book" do - context "saving a default address" do + context "saving a default (shipping) address" do let(:user_address) { user.user_addresses.find_first_by_address_values(address.attributes) } subject { user.save_in_address_book(address.attributes, true) } @@ -30,6 +30,17 @@ module Spree it "sets the UserAddress default flag to true" do subject expect(user_address.default).to eq true + expect(user_address.default_billing).to be_falsey + end + + context "billing address" do + subject { user.save_in_address_book(address.attributes, true, :billing) } + + it "sets the UserAddress default_billing flag to true" do + subject + expect(user_address.default).to be_falsey + expect(user_address.default_billing).to eq true + end end it "adds the address to the user's the associated addresses" do @@ -37,30 +48,67 @@ module Spree end end - context "user already has a default address" do + context "user already has default addresses" do let(:address) { create(:address) } let(:original_default_address) { create(:ship_address) } + let(:original_default_bill_address) { create(:bill_address) } let(:original_user_address) { user.user_addresses.find_first_by_address_values(original_default_address.attributes) } + let(:original_user_bill_address) { user.user_addresses.find_first_by_address_values(original_default_bill_address.attributes) } before do user.user_addresses.create(address: original_default_address, default: true) + user.user_addresses.create(address: original_default_bill_address, default_billing: true) end - it "makes all the other associated addresses not be the default" do - expect { subject }.to change { original_user_address.reload.default }.from(true).to(false) + context "saving a shipping address" do + context "makes all the other associated shipping addresses not be the default and ignores the billing ones" do + it do + expect { subject }.to change { original_user_address.reload.default }.from(true).to(false) + end + it do + expect { subject }.not_to change { original_user_bill_address.reload.default_billing } + end + end + + context "an odd flip-flop corner case discovered running backfill rake task" do + before do + user.save_in_address_book(original_default_address.attributes, true) + user.save_in_address_book(address.attributes, true) + end + + it "handles setting 2 addresses as default without a reload of user" do + user.save_in_address_book(original_default_address.attributes, true) + user.save_in_address_book(address.attributes, true) + expect(user.addresses.count).to eq 3 + expect(user.default_address.address1).to eq address.address1 + end + end end - context "an odd flip-flop corner case discovered running backfill rake task" do - before do - user.save_in_address_book(original_default_address.attributes, true) - user.save_in_address_book(address.attributes, true) + context "saving a billing address" do + subject { user.save_in_address_book(address.attributes, true, :billing) } + + context "makes all the other associated billing addresses not be the default and ignores the shipping ones" do + it do + expect { subject }.not_to change { original_user_address.reload.default } + end + it do + expect { subject }.to change { original_user_bill_address.reload.default_billing }.from(true).to(false) + end end - it "handles setting 2 addresses as default without a reload of user" do - user.save_in_address_book(original_default_address.attributes, true) - user.save_in_address_book(address.attributes, true) - expect(user.addresses.count).to eq 2 - expect(user.default_address.address1).to eq address.address1 + context "an odd flip-flop corner case discovered running backfill rake task" do + before do + user.save_in_address_book(original_default_bill_address.attributes, true, :billing) + user.save_in_address_book(address.attributes, true, :billing) + end + + it "handles setting 2 addresses as default without a reload of user" do + user.save_in_address_book(original_default_address.attributes, true, :billing) + user.save_in_address_book(address.attributes, true, :billing) + expect(user.addresses.count).to eq 3 + expect(user.bill_address.address1).to eq address.address1 + end end end end @@ -72,8 +120,15 @@ module Spree user.user_addresses.create(address: address, default: false) end - it "properly sets the default flag" do - expect(subject).to eq user.default_address + context "properly sets the default flag" do + context "shipping address" do + it { expect(subject).to eq user.default_address } + end + + context "billing address" do + subject { user.save_in_address_book(address.attributes, true, :billing) } + it { expect(subject).to eq user.bill_address } + end end context "and changing another address field at the same time" do @@ -93,8 +148,15 @@ module Spree expect(subject.id).to_not eq address.id end - it "is the new default" do - expect(subject).to eq user.default_address + context "is the new default" do + context "shipping address" do + it { expect(subject).to eq user.default_address } + end + + context "billing address" do + subject { user.save_in_address_book(address.attributes, true, :billing) } + it { expect(subject).to eq user.bill_address } + end end end end @@ -136,16 +198,31 @@ module Spree context "it is not the first address" do before { user.user_addresses.create!(address: create(:address)) } - it "sets the UserAddress default flag to false" do + + it "sets the UserAddress default flags to false" do expect { subject }.to change { Spree::UserAddress.count }.by(1) expect(user_address.default).to eq false + expect(user_address.default_billing).to eq false end end context "it is the first address" do - it "sets the UserAddress default flag to true" do - subject - expect(user_address.default).to eq true + context "shipping address" do + it "sets the UserAddress default flag to true" do + subject + expect(user_address.default).to eq true + expect(user_address.default_billing).to be_falsey + end + end + + context "billing address" do + subject { user.save_in_address_book(address.attributes, false, :billing) } + + it "sets the UserAddress default flag to true" do + subject + expect(user_address.default).to be_falsey + expect(user_address.default_billing).to eq true + end end end @@ -167,9 +244,22 @@ module Spree expect(subject).to eq address end - it "sets it as default" do - subject - expect(user.default_address).to eq address + context "sets it as default" do + context "shipping address" do + it do + subject + expect(user.default_address).to eq address + end + end + + context "billing address" do + subject { user.save_in_address_book(address.attributes, true, :billing) } + + it do + subject + expect(user.bill_address).to eq address + end + end end context "via an edit to another address" do