mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-29 21:17:17 +00:00
Fix bug on calculator_decorator line_items_for where input is line_item with an nil order. Adapted line_items_for so that weight_calculator.line_items_for could be removed.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
require 'spec_helper'
|
||||
require 'open_food_network/enterprise_fee_calculator'
|
||||
|
||||
module OpenFoodNetwork
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 }
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user