mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-10 03:30:22 +00:00
WIP: ProxyOrders don't require an order, fixing remainder of specs
This commit is contained in:
@@ -48,6 +48,7 @@ class StandingOrderForm
|
||||
future_and_undated_orders.each(&:save)
|
||||
|
||||
raise ActiveRecord::Rollback unless standing_order.save
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) }
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user