From 2b0f867ed831e83d6155d0e730b4c8b2df17731d Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 29 Apr 2015 11:42:35 +1000 Subject: [PATCH] new order method ready_to_ship? --- app/models/spree/order_decorator.rb | 5 +++ spec/models/spree/order_spec.rb | 53 +++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb index d5e18c3d9b..f109f730d8 100644 --- a/app/models/spree/order_decorator.rb +++ b/app/models/spree/order_decorator.rb @@ -198,6 +198,11 @@ Spree::Order.class_eval do end end + # Does this order have shipments that can be shipped? + def ready_to_ship? + self.shipments.any?{|s| s.can_ship?} + end + def available_shipping_methods(display_on = nil) Spree::ShippingMethod.all_available(self, display_on) end diff --git a/spec/models/spree/order_spec.rb b/spec/models/spree/order_spec.rb index 3c70c2243c..ecc19f5493 100644 --- a/spec/models/spree/order_spec.rb +++ b/spec/models/spree/order_spec.rb @@ -186,6 +186,59 @@ describe Spree::Order do end end + describe "an order without shipping method" do + let(:order) { create(:order) } + + it "cannot be shipped" do + order.ready_to_ship?.should == false + end + end + + describe "an unpaid order with a shipment" do + let(:order) { create(:order, shipping_method: shipping_method) } + let(:shipping_method) { create(:shipping_method) } + + before do + order.create_shipment! + order.reload + order.state = 'complete' + order.shipment.update!(order) + end + + it "cannot be shipped" do + order.ready_to_ship?.should == false + end + end + + describe "a paid order without a shipment" do + let(:order) { create(:order) } + + before do + order.payment_state = 'paid' + order.state = 'complete' + end + + it "cannot be shipped" do + order.ready_to_ship?.should == false + end + end + + describe "a paid order with a shipment" do + let(:order) { create(:order, shipping_method: shipping_method) } + let(:shipping_method) { create(:shipping_method) } + + before do + order.create_shipment! + order.payment_state = 'paid' + order.state = 'complete' + order.shipment.update!(order) + end + + it "can be shipped" do + order.ready_to_ship?.should == true + end + end + describe "getting the shipping tax" do let(:order) { create(:order, shipping_method: shipping_method) } let(:shipping_method) { create(:shipping_method, calculator: Spree::Calculator::FlatRate.new(preferred_amount: 50.0)) }