Merge pull request #3971 from Matt-Yorkley/basket_errors

Avoid `undefined method 'order'` errors when removing lineitems from basket
This commit is contained in:
Luis Ramos
2019-06-26 15:33:26 +01:00
committed by GitHub
2 changed files with 45 additions and 1 deletions

View File

@@ -9,7 +9,7 @@ module Spree
[object]
elsif object.respond_to? :line_items
object.line_items
elsif object.order.present?
elsif object.respond_to?(:order) && object.order.present?
object.order.line_items
else
[object]

View File

@@ -0,0 +1,44 @@
require 'spec_helper'
module Spree
describe Calculator do
let(:calculator) { Spree::Calculator.new }
let!(:enterprise) { create(:enterprise) }
let!(:order) { create(:order) }
let!(:shipment) { create(:shipment) }
let!(:line_item) { create(:line_item, order: order) }
let!(:line_item2) { create(:line_item, order: order) }
before do
order.line_items << line_item
order.line_items << line_item2
order.shipments = [shipment]
end
describe "#line_items_for" do
it "returns the line item if given a line item" do
result = calculator.__send__(:line_items_for, line_item)
expect(result).to eq [line_item]
end
it "returns line items if given an object with line items" do
result = calculator.__send__(:line_items_for, order)
expect(result).to eq [line_item, line_item2]
end
it "returns line items if given an object with an order" do
result = calculator.__send__(:line_items_for, shipment)
expect(result).to eq [line_item, line_item2]
end
it "returns the original object if given anything else" do
result = calculator.__send__(:line_items_for, enterprise)
expect(result).to eq [enterprise]
end
end
end
end