From 9dd94eaf57e1f6fa5667ba31053b6a9e7e7265f0 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Wed, 8 Aug 2012 15:29:47 +1000 Subject: [PATCH] Weight shipping calculator treats variants without weight defined as zero weight --- app/models/open_food_web/calculator/weight.rb | 2 +- spec/models/calculator/weight_spec.rb | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/models/open_food_web/calculator/weight.rb b/app/models/open_food_web/calculator/weight.rb index be7457008b..f927988886 100644 --- a/app/models/open_food_web/calculator/weight.rb +++ b/app/models/open_food_web/calculator/weight.rb @@ -8,7 +8,7 @@ module OpenFoodWeb end def compute(object) - total_weight = object.line_items.inject(0) { |sum, li| sum + (li.variant.weight * li.quantity) } + total_weight = object.line_items.inject(0) { |sum, li| sum + ((li.variant.andand.weight || 0) * li.quantity) } total_weight * self.preferred_per_kg end end diff --git a/spec/models/calculator/weight_spec.rb b/spec/models/calculator/weight_spec.rb index 31c9e195aa..acd8480d12 100644 --- a/spec/models/calculator/weight_spec.rb +++ b/spec/models/calculator/weight_spec.rb @@ -4,11 +4,13 @@ describe OpenFoodWeb::Calculator::Weight do it "computes shipping cost for an order by total weight" do variant_1 = double(:variant, :weight => 10) variant_2 = double(:variant, :weight => 20) + variant_3 = double(:variant, :weight => nil) line_item_1 = double(:line_item, :variant => variant_1, :quantity => 1) line_item_2 = double(:line_item, :variant => variant_2, :quantity => 3) + line_item_3 = double(:line_item, :variant => variant_3, :quantity => 5) - order = double(:order, :line_items => [line_item_1, line_item_2]) + order = double(:order, :line_items => [line_item_1, line_item_2, line_item_3]) subject.set_preference(:per_kg, 10) subject.compute(order).should == (10*1 + 20*3) * 10