diff --git a/app/models/order_cycle.rb b/app/models/order_cycle.rb index 9b706172c8..f722cbbcf4 100644 --- a/app/models/order_cycle.rb +++ b/app/models/order_cycle.rb @@ -294,10 +294,15 @@ class OrderCycle < ApplicationRecord end def distributor_shipping_methods - if simple? || selected_distributor_shipping_methods.none? + if simple? attachable_distributor_shipping_methods else - selected_distributor_shipping_methods + attachable_distributor_shipping_methods.reject do |distributor_shipping_method| + selected_distributor_shipping_methods. + map(&:distributor_id). + include?(distributor_shipping_method.distributor_id) && + !selected_distributor_shipping_methods.include?(distributor_shipping_method) + end end end diff --git a/spec/models/order_cycle_spec.rb b/spec/models/order_cycle_spec.rb index 91b212ca89..3789a4aa1a 100644 --- a/spec/models/order_cycle_spec.rb +++ b/spec/models/order_cycle_spec.rb @@ -672,8 +672,8 @@ describe OrderCycle do context "distributor order cycle i.e. non-simple" do let(:oc) { create(:distributor_order_cycle, distributors: [distributor]) } - it "returns all attachable distributor shipping methods if no preferred shipping methods have - been chosen" do + it "returns all attachable distributor shipping methods if no distributor shipping methods + have been selected specifically" do distributor_shipping_method = create( :shipping_method, distributors: [distributor] @@ -697,6 +697,35 @@ describe OrderCycle do expect(oc.distributor_shipping_methods).to eq [distributor_shipping_method_ii] end + + context "with multiple distributors" do + let(:other_distributor) { create(:distributor_enterprise) } + let(:oc) { create(:distributor_order_cycle, distributors: [distributor, other_distributor]) } + + it "returns all attachable distributor shipping methods for a distributor if no distributor + shipping methods have been selected specifically for that distributor, even if + distributor shipping methods have been selected specifically for a different distributor + on the order cycle" do + distributor_shipping_method = create( + :shipping_method, + distributors: [distributor] + ).distributor_shipping_methods.first + other_distributor_shipping_method_i = create( + :shipping_method, + distributors: [other_distributor] + ).distributor_shipping_methods.first + other_distributor_shipping_method_ii = create( + :shipping_method, + distributors: [other_distributor] + ).distributor_shipping_methods.first + oc.selected_distributor_shipping_methods << other_distributor_shipping_method_i + + expect(oc.distributor_shipping_methods).to eq [ + distributor_shipping_method, + other_distributor_shipping_method_i + ] + end + end end end