diff --git a/app/models/spree/calculator_decorator.rb b/app/models/spree/calculator_decorator.rb index 33c32c901e..5d130d86aa 100644 --- a/app/models/spree/calculator_decorator.rb +++ b/app/models/spree/calculator_decorator.rb @@ -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] diff --git a/spec/models/spree/calculator_spec.rb b/spec/models/spree/calculator_spec.rb new file mode 100644 index 0000000000..2aa8c5d0a8 --- /dev/null +++ b/spec/models/spree/calculator_spec.rb @@ -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