diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb index 4ca328a5b1..1aa21bf193 100644 --- a/app/models/spree/order_decorator.rb +++ b/app/models/spree/order_decorator.rb @@ -102,6 +102,13 @@ Spree::Order.class_eval do end end + def remove_variant(variant) + line_items(:reload) + current_item = find_line_item_by_variant(variant) + current_item.destroy + end + + # Overridden to support max_quantity def add_variant(variant, quantity = 1, max_quantity = nil, currency = nil) line_items(:reload) diff --git a/spec/models/spree/order_spec.rb b/spec/models/spree/order_spec.rb index d86916e24e..e50a64a4d9 100644 --- a/spec/models/spree/order_spec.rb +++ b/spec/models/spree/order_spec.rb @@ -329,6 +329,22 @@ describe Spree::Order do end end + describe "removing an item from the order" do + let(:order) { create(:order) } + let(:v1) { create(:variant) } + let(:v2) { create(:variant) } + + before do + order.add_variant v1 + order.add_variant v2 + end + + it "removes the variant's line item" do + order.remove_variant v1 + order.line_items(:reload).map(&:variant).should == [v2] + end + end + describe "emptying the order" do it "removes shipping method" do subject.shipping_method = create(:shipping_method)