test/unit/order_state_test.rb in spree-0.10.2 vs test/unit/order_state_test.rb in spree-0.11.0
- old
+ new
@@ -1,150 +1,177 @@
require 'test_helper'
class OrderStateTest < ActiveSupport::TestCase
+ should "be in_progress initially" do
+ assert Order.new.in_progress?
+ end
context "Order" do
- setup do
- @order = create_complete_order
- @order.checkout.update_attribute("state", "complete")
-
- #only want one line item for ease of testing
- @order.line_items.destroy_all
- Factory(:line_item, :order => @order, :variant => Factory(:variant), :quantity => 2, :price => 100.00)
- @order.reload
- @order.save
-
- @checkout.payment.update_attributes(:payable => @order, :amount => @order.total)
-
- #make sure totals get recalculated
- @order.reload
- @order.save
+ setup do
+ @order = Order.create!
+ @order.line_items << Factory(:line_item,:order=>@order,:price=>100, :quantity=>5)
+ @order.checkout.ship_address = Factory(:address)
+ @order.checkout.shipping_method = Factory(:shipping_method)
+ @order.update_totals
+ @order.payments = [Factory(:payment, :payable=>@order, :amount=>500)]
+ @order.save!
end
- should "be in_progress initally" do
- assert @order.in_progress?
- end
-
context "with a complete checkout and payment" do
- setup do
+ setup do
@order.complete!
@order.update_totals!
end
should_change("@order.state", :from => "in_progress", :to => "new") { @order.state }
-
+
should "allow cancel" do
assert @order.can_cancel?
end
-
+
should "not allow resume" do
assert !@order.can_resume?
end
-
+
context "when canceled" do
setup do
@order.cancel!
end
-
+
should_change("@order.state", :from => "new", :to => "canceled") { @order.state }
-
+ should_change("@order.inventory_units.size", :to => 0) { @order.inventory_units.size }
+
+ should "change all shipments to pending" do
+ assert @order.shipments.all?(&:pending?)
+ end
+
should "allow resume" do
assert @order.can_resume?
end
-
+
context "and then resumed" do
setup do
@order.resume!
end
-
+
should_change("@order.state", :from => "canceled", :to => "new") { @order.state }
+
+ should "all shipments still be pending" do
+ assert @order.shipments.all?(&:pending?)
+ end
end
end
-
+
context "when paid" do
setup do
@order.pay!
end
-
+
should "allow ship" do
assert @order.can_ship?
end
-
+
+ context "and canceled" do
+ setup do
+ @order.cancel!
+ end
+
+ should_change("@order.state", :from => "paid", :to => "canceled") { @order.state }
+ should_change("@order.inventory_units.size", :to => 0) { @order.inventory_units.size }
+
+ should "change all shipments to pending" do
+ assert @order.shipments.all?(&:pending?)
+ end
+
+ context "and then resumed" do
+ setup do
+ @order.resume!
+ @order.shipments.reload
+ end
+
+ should_change("@order.state", :from => "canceled", :to => "paid") { @order.state }
+
+ should "change all shipments to ready_to_ship" do
+ assert @order.shipments.all?(&:ready_to_ship?)
+ end
+ end
+ end
+
context "and all shipments are shipped" do
setup do
shipment = @order.shipment.reload
shipment.ship!
@order.reload
end
-
+
should_change("@order.state", :from => "paid", :to => "shipped") { @order.state }
-
+
context "and a return_authorization with all inventory_units returned" do
setup do
ra = ReturnAuthorization.new(:order => @order, :amount => 50.00)
ra.add_variant(@order.line_items.first.variant_id, @order.line_items.first.quantity)
ra.save!
@order.reload
end
-
+
should_change("@order.state", :from => "shipped", :to => "awaiting_return") { @order.state }
-
+
context "and received" do
setup do
@order.return_authorizations.first.receive!
@order.reload
end
-
+
should_change("@order.state", :from => "awaiting_return", :to => "credit_owed") { @order.state }
-
+
context "and a negative payment is created" do
- setup do
+ setup do
@order.payments.create!(:amount => -50.00, :payment_method => Gateway.current)
#@creditcard.credit(50.00, @creditcard.authorization)
@order.reload
end
-
+
should_change("@order.state", :from => "credit_owed", :to => "returned") { @order.state }
end
-
+
end
-
+
end
-
+
context "and a return_authorization with not all inventory_units are returned is created" do
setup do
ra = ReturnAuthorization.new(:order => @order, :amount => 50.00)
ra.add_variant(@order.line_items.first.variant_id, (@order.line_items.first.quantity - 1))
ra.save!
@order.reload
end
-
+
should_change("@order.state", :from => "shipped", :to => "awaiting_return") { @order.state }
-
+
context "and received" do
setup do
@order.return_authorizations.first.receive!
@order.reload
end
-
+
should_change("@order.state", :from => "awaiting_return", :to => "credit_owed") { @order.state }
-
+
context "and a negative payment is created" do
- setup do
+ setup do
@order.payments.create!(:amount => -50.00, :payment_method => Gateway.current)
@order.reload
end
-
+
should_change("@order.state", :from => "credit_owed", :to => "shipped") { @order.state }
end
-
+
end
-
+
end
-
+
end
-
-
+
+
context "and an additional charge is added" do
setup do
@credit = Factory(:charge, :amount => 3.00, :order => @order)
@order.update_totals!
@order.reload
@@ -154,36 +181,36 @@
context "and a payment is created" do
setup do
Factory(:payment, :payable => @order, :amount => 3.00)
end
-
+
should_change("@order.state", :from => "balance_due", :to => "paid") { @order.state }
end
end
-
+
context "and an additional credit is added" do
setup do
@credit = Factory(:credit, :amount => 2.00, :order => @order)
@order.update_totals!
@order.reload
end
should_change("@order.state", :from => "paid", :to => "credit_owed") { @order.state }
context "and a negative payment is created" do
- setup do
+ setup do
@order.payments.create!(:amount => -2.00, :payment_method => Gateway.current)
- @order.update_totals!
+ @order.update_totals!
@order.reload
- end
+ end
should_change("@order.state", :from => "credit_owed", :to => "paid") { @order.state }
end
end
-
+
end
end
end
\ No newline at end of file