diff --git a/app/models/calculator/weight.rb b/app/models/calculator/weight.rb index ae65026a46..410a53b2f8 100644 --- a/app/models/calculator/weight.rb +++ b/app/models/calculator/weight.rb @@ -12,19 +12,5 @@ module Calculator total_weight = line_items.sum { |li| ((li.variant.andand.weight || 0) * li.quantity) } total_weight * preferred_per_kg end - - private - - def line_items_for(object) - if object.respond_to? :order - object.order.line_items - elsif object.respond_to? :line_items - object.line_items - elsif object.respond_to?(:variant) && object.respond_to?(:quantity) - [object] - else - raise "Unknown object type: #{object.inspect}" - end - end end end diff --git a/app/models/spree/calculator_decorator.rb b/app/models/spree/calculator_decorator.rb index f8be4d00ef..29db0a5c0d 100644 --- a/app/models/spree/calculator_decorator.rb +++ b/app/models/spree/calculator_decorator.rb @@ -1,18 +1,20 @@ module Spree Calculator.class_eval do - private # Given an object which might be an Order or a LineItem (amongst # others), return a collection of line items. def line_items_for(object) - if object.respond_to? :line_items + if object.is_a?(Spree::LineItem) + [object] + elsif object.respond_to? :line_items object.line_items + elsif object.order.present? + object.order.line_items else [object] end end - end end diff --git a/spec/lib/open_food_network/enterprise_fee_calculator_spec.rb b/spec/lib/open_food_network/enterprise_fee_calculator_spec.rb index 01b97346f7..ae79303b8d 100644 --- a/spec/lib/open_food_network/enterprise_fee_calculator_spec.rb +++ b/spec/lib/open_food_network/enterprise_fee_calculator_spec.rb @@ -1,3 +1,4 @@ +require 'spec_helper' require 'open_food_network/enterprise_fee_calculator' module OpenFoodNetwork diff --git a/spec/models/calculator/weight_spec.rb b/spec/models/calculator/weight_spec.rb index dee2f3d067..c45da8850a 100644 --- a/spec/models/calculator/weight_spec.rb +++ b/spec/models/calculator/weight_spec.rb @@ -2,13 +2,13 @@ require 'spec_helper' describe Calculator::Weight do it "computes shipping cost for an order by total weight" do - variant1 = double(:variant, weight: 10) - variant2 = double(:variant, weight: 20) - variant3 = double(:variant, weight: nil) + variant1 = build(:variant, weight: 10) + variant2 = build(:variant, weight: 20) + variant3 = build(:variant, weight: nil) - line_item1 = double(:line_item, variant: variant1, quantity: 1) - line_item2 = double(:line_item, variant: variant2, quantity: 3) - line_item3 = double(:line_item, variant: variant3, quantity: 5) + line_item1 = build(:line_item, variant: variant1, quantity: 1) + line_item2 = build(:line_item, variant: variant2, quantity: 3) + line_item3 = build(:line_item, variant: variant3, quantity: 5) order = double(:order, line_items: [line_item1, line_item2, line_item3]) @@ -17,20 +17,20 @@ describe Calculator::Weight do end it "computes shipping cost for a line item" do - variant = double(:variant, weight: 10) + variant = build(:variant, weight: 10) - line_item = double(:line_item, variant: variant, quantity: 2) + line_item = build(:line_item, variant: variant, quantity: 2) subject.set_preference(:per_kg, 10) expect(subject.compute(line_item)).to eq(10 * 2 * 10) end it "computes shipping cost for an object with an order" do - variant1 = double(:variant, weight: 10) - variant2 = double(:variant, weight: 5) + variant1 = build(:variant, weight: 10) + variant2 = build(:variant, weight: 5) - line_item1 = double(:line_item, variant: variant1, quantity: 1) - line_item2 = double(:line_item, variant: variant2, quantity: 2) + line_item1 = build(:line_item, variant: variant1, quantity: 1) + line_item2 = build(:line_item, variant: variant2, quantity: 2) order = double(:order, line_items: [line_item1, line_item2]) object_with_order = double(:object_with_order, order: order) diff --git a/spec/models/spree/calculator/flat_percent_item_total_spec.rb b/spec/models/spree/calculator/flat_percent_item_total_spec.rb index 998b5fca2a..72fe29d9d1 100644 --- a/spec/models/spree/calculator/flat_percent_item_total_spec.rb +++ b/spec/models/spree/calculator/flat_percent_item_total_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' describe Spree::Calculator::FlatPercentItemTotal do let(:calculator) { Spree::Calculator::FlatPercentItemTotal.new } - let(:line_item) { instance_double(Spree::LineItem, amount: 10) } + let(:line_item) { build(:line_item, price: 10, quantity: 1) } before { calculator.stub :preferred_flat_percent => 10 } diff --git a/spec/models/spree/calculator/flexi_rate_spec.rb b/spec/models/spree/calculator/flexi_rate_spec.rb index 6659da86fd..b821f4fc74 100644 --- a/spec/models/spree/calculator/flexi_rate_spec.rb +++ b/spec/models/spree/calculator/flexi_rate_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe Spree::Calculator::FlexiRate do - let(:line_item) { instance_double(Spree::LineItem, amount: 10, quantity: quantity) } + let(:line_item) { build(:line_item, quantity: quantity) } let(:calculator) do Spree::Calculator::FlexiRate.new( preferred_first_item: 2, diff --git a/spec/models/spree/calculator/per_item_spec.rb b/spec/models/spree/calculator/per_item_spec.rb index 7f483372d5..a50c5264b3 100644 --- a/spec/models/spree/calculator/per_item_spec.rb +++ b/spec/models/spree/calculator/per_item_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' describe Spree::Calculator::PerItem do let(:calculator) { Spree::Calculator::PerItem.new(preferred_amount: 10) } let(:shipping_calculable) { double(:calculable) } - let(:line_item) { double(:line_item, quantity: 5, product: double(:product)) } + let(:line_item) { build(:line_item, quantity: 5) } it "correctly calculates on a single line item object" do calculator.stub(calculable: shipping_calculable)