WIP: ProxyOrders don't require an order, fixing remainder of specs

This commit is contained in:
Rob Harrington
2016-12-12 11:36:02 +11:00
parent be8fa1f4e4
commit 875557dc9d
7 changed files with 66 additions and 29 deletions

View File

@@ -48,6 +48,7 @@ class StandingOrderForm
future_and_undated_orders.each(&:save)
raise ActiveRecord::Rollback unless standing_order.save
true
end
end

View File

@@ -5,13 +5,13 @@ class ProxyOrder < ActiveRecord::Base
delegate :number, :completed_at, :total, to: :order, allow_nil: true
scope :closed, -> { joins(order: :order_cycle).merge(OrderCycle.closed) }
scope :not_closed, -> { joins(order: :order_cycle).merge(OrderCycle.not_closed) }
scope :closed, -> { joins(:order_cycle).merge(OrderCycle.closed) }
scope :not_closed, -> { joins(:order_cycle).merge(OrderCycle.not_closed) }
scope :not_canceled, where('proxy_orders.canceled_at IS NULL')
def state
return 'canceled' if canceled?
order.state
order ? order.state : 'cart'
end
def canceled?
@@ -22,7 +22,7 @@ class ProxyOrder < ActiveRecord::Base
return false unless order_cycle.orders_close_at.andand > Time.zone.now
transaction do
self.update_column(:canceled_at, Time.zone.now)
order.send('cancel')
order.send('cancel') if order
true
end
end
@@ -31,7 +31,7 @@ class ProxyOrder < ActiveRecord::Base
return false unless order_cycle.orders_close_at.andand > Time.zone.now
transaction do
self.update_column(:canceled_at, nil)
order.send('resume')
order.send('resume') if order
true
end
end

View File

@@ -70,7 +70,7 @@ describe Admin::ProxyOrdersController, type: :controller do
let!(:shipping_method) { create(:shipping_method) }
let!(:standing_order) { create(:standing_order, shop: shop, with_items: true) }
let!(:proxy_order) { create(:proxy_order, standing_order: standing_order, order_cycle: order_cycle) }
let(:order) { proxy_order.order }
let(:order) { proxy_order.initialise_order! }
before do
# Processing order to completion

View File

@@ -13,9 +13,9 @@ feature 'Standing Orders' do
before { quick_login_as user }
context 'listing standing orders' do
let!(:standing_order) { create(:standing_order, shop: shop, with_items: true, with_orders: true) }
let!(:standing_order2) { create(:standing_order, shop: shop2, with_items: true, with_orders: true) }
let!(:standing_order_unmanaged) { create(:standing_order, shop: shop_unmanaged, with_items: true, with_orders: true) }
let!(:standing_order) { create(:standing_order, shop: shop, with_items: true, with_proxy_orders: true) }
let!(:standing_order2) { create(:standing_order, shop: shop2, with_items: true, with_proxy_orders: true) }
let!(:standing_order_unmanaged) { create(:standing_order, shop: shop_unmanaged, with_items: true, with_proxy_orders: true) }
it "passes the smoke test" do
visit spree.admin_path

View File

@@ -28,7 +28,7 @@ describe StandingOrderConfirmJob do
describe "processing an order" do
let(:proxy_order) { create(:proxy_order, standing_order: standing_order1) }
let(:order) { proxy_order.order }
let(:order) { proxy_order.initialise_order! }
before do
while !order.completed? do break unless order.next! end

View File

@@ -67,9 +67,9 @@ describe StandingOrderPlacementJob do
end
describe "processing a standing order order" do
let(:standing_order) { create(:standing_order, with_orders: true, with_items: true) }
let(:proxy_order) { standing_order.proxy_orders.first }
let!(:order) { proxy_order.order }
let(:standing_order) { create(:standing_order, with_items: true) }
let(:proxy_order) { create(:proxy_order, standing_order: standing_order) }
let!(:order) { proxy_order.initialise_order! }
let(:changes) { {} }
let!(:job) { StandingOrderPlacementJob.new(proxy_order.order_cycle) }

View File

@@ -6,11 +6,20 @@ describe ProxyOrder, type: :model do
let(:standing_order) { create(:standing_order) }
context "when the order cycle is not yet closed" do
let(:proxy_order) { create(:proxy_order, standing_order: standing_order, order: order, order_cycle: order_cycle) }
before { order_cycle.update_attributes(orders_open_at: 1.day.ago, orders_close_at: 3.days.from_now) }
context "and an order has not been initialised" do
let(:order) { nil }
it "returns true and sets canceled_at to the current time" do
expect(proxy_order.cancel).to be true
expect(proxy_order.reload.canceled_at).to be_within(5.seconds).of Time.now
end
end
context "and the order has already been completed" do
let(:order) { create(:completed_order_with_totals) }
let(:proxy_order) { create(:proxy_order, standing_order: standing_order, order: order, order_cycle: order_cycle) }
it "returns true and sets canceled_at to the current time, and cancels the order" do
expect(proxy_order.cancel).to be true
@@ -21,7 +30,6 @@ describe ProxyOrder, type: :model do
context "and the order has not already been completed" do
let(:order) { create(:order) }
let(:proxy_order) { create(:proxy_order, standing_order: standing_order, order: order, order_cycle: order_cycle) }
it "returns true and sets canceled_at to the current time" do
expect(proxy_order.cancel).to be true
@@ -32,15 +40,26 @@ describe ProxyOrder, type: :model do
end
context "when the order cycle is already closed" do
let(:order) { create(:order) }
let(:proxy_order) { create(:proxy_order, standing_order: standing_order, order: order, order_cycle: order_cycle) }
before { order_cycle.update_attributes(orders_open_at: 3.days.ago, orders_close_at: 1.minute.ago) }
it "returns false and does nothing" do
expect(proxy_order.cancel).to be false
expect(proxy_order.reload.canceled_at).to be nil
expect(order.reload.state).to eq 'cart'
context "and an order has not been initialised" do
let(:order) { nil }
it "returns false and does nothing" do
expect(proxy_order.cancel).to be false
expect(proxy_order.reload.canceled_at).to be nil
end
end
context "and an order has been initialised" do
let(:order) { create(:order) }
it "returns false and does nothing" do
expect(proxy_order.cancel).to be false
expect(proxy_order.reload.canceled_at).to be nil
expect(order.reload.state).to eq 'cart'
end
end
end
end
@@ -48,20 +67,23 @@ describe ProxyOrder, type: :model do
describe "resume" do
let!(:payment_method) { create(:payment_method) }
let(:order) { create(:order_with_totals, shipping_method: create(:shipping_method)) }
let(:proxy_order) { create(:proxy_order, order: order) }
let(:proxy_order) { create(:proxy_order, order: order, canceled_at: Time.zone.now) }
let(:order_cycle) { proxy_order.order_cycle}
before do
# Processing order to completion
while !order.completed? do break unless order.next! end
proxy_order.update_attribute(:canceled_at, Time.zone.now)
end
context "when the order cycle is not yet closed" do
before { order_cycle.update_attributes(orders_open_at: 1.day.ago, orders_close_at: 3.days.from_now) }
context "and the order has not been initialised" do
let(:order) { nil }
it "returns true and clears canceled_at" do
expect(proxy_order.resume).to be true
expect(proxy_order.reload.canceled_at).to be nil
end
end
context "and the order has already been cancelled" do
before { while !order.completed? do break unless order.next! end }
before { order.cancel }
it "returns true, clears canceled_at and resumes the order" do
@@ -72,6 +94,8 @@ describe ProxyOrder, type: :model do
end
context "and the order has not been cancelled" do
before { while !order.completed? do break unless order.next! end }
it "returns true and clears canceled_at" do
expect(proxy_order.resume).to be true
expect(proxy_order.reload.canceled_at).to be nil
@@ -83,7 +107,17 @@ describe ProxyOrder, type: :model do
context "when the order cycle is already closed" do
before { order_cycle.update_attributes(orders_open_at: 3.days.ago, orders_close_at: 1.minute.ago) }
context "and the order has not been initialised" do
let(:order) { nil }
it "returns false and does nothing" do
expect(proxy_order.resume).to eq false
expect(proxy_order.reload.canceled_at).to be_within(5.seconds).of Time.now
end
end
context "and the order has been cancelled" do
before { while !order.completed? do break unless order.next! end }
before { order.cancel }
it "returns false and does nothing" do
@@ -94,6 +128,8 @@ describe ProxyOrder, type: :model do
end
context "and the order has not been cancelled" do
before { while !order.completed? do break unless order.next! end }
it "returns false and does nothing" do
expect(proxy_order.resume).to eq false
expect(proxy_order.reload.canceled_at).to be_within(5.seconds).of Time.now