From 1ef04354fd107d0e3cdaeb46f875406d7f60dc13 Mon Sep 17 00:00:00 2001 From: luisramos0 Date: Thu, 25 Oct 2018 19:09:14 +0100 Subject: [PATCH] Add capacity to weight calculator to calculate based on any object with an order (needed in spree 2 to calculate based on package) --- app/models/open_food_network/calculator/weight.rb | 4 +++- spec/models/calculator/weight_spec.rb | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/models/open_food_network/calculator/weight.rb b/app/models/open_food_network/calculator/weight.rb index 7f0e8807ba..a7e0d8770b 100644 --- a/app/models/open_food_network/calculator/weight.rb +++ b/app/models/open_food_network/calculator/weight.rb @@ -17,7 +17,9 @@ module OpenFoodNetwork private def line_items_for(object) - if object.respond_to? :line_items + 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] diff --git a/spec/models/calculator/weight_spec.rb b/spec/models/calculator/weight_spec.rb index 26ec3125a5..6af473ca54 100644 --- a/spec/models/calculator/weight_spec.rb +++ b/spec/models/calculator/weight_spec.rb @@ -24,4 +24,18 @@ describe OpenFoodNetwork::Calculator::Weight do subject.set_preference(:per_kg, 10) subject.compute(line_item).should == 10*2 * 10 end + + it "computes shipping cost for an object with an order" do + variant_1 = double(:variant, :weight => 10) + variant_2 = double(:variant, :weight => 5) + + line_item_1 = double(:line_item, :variant => variant_1, :quantity => 1) + line_item_2 = double(:line_item, :variant => variant_2, :quantity => 2) + + order = double(:order, :line_items => [line_item_1, line_item_2]) + object_with_order = double(:object_with_order, order: order) + + subject.set_preference(:per_kg, 10) + subject.compute(object_with_order).should == (10*1 + 5*2) * 10 + end end