mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
ProxyOrders belong to order cycles
This commit is contained in:
@@ -21,8 +21,8 @@ class StandingOrderForm
|
||||
validate_price_estimates
|
||||
standing_order.assign_attributes(params)
|
||||
|
||||
initialise_orders!
|
||||
remove_obsolete_orders!
|
||||
initialise_proxy_orders!
|
||||
remove_obsolete_proxy_orders!
|
||||
|
||||
orders.update_all(customer_id: customer_id, email: customer.andand.email, distributor_id: shop_id)
|
||||
|
||||
@@ -80,6 +80,7 @@ class StandingOrderForm
|
||||
order.update_distribution_charge!
|
||||
create_payment_for(order)
|
||||
|
||||
order.save
|
||||
order
|
||||
end
|
||||
|
||||
@@ -103,24 +104,24 @@ class StandingOrderForm
|
||||
end
|
||||
end
|
||||
|
||||
def initialise_orders!
|
||||
def initialise_proxy_orders!
|
||||
uninitialised_order_cycle_ids.each do |order_cycle_id|
|
||||
orders << create_order_for(order_cycle_id)
|
||||
proxy_orders << ProxyOrder.new(standing_order: standing_order, order_cycle_id: order_cycle_id, order: create_order_for(order_cycle_id))
|
||||
end
|
||||
end
|
||||
|
||||
def uninitialised_order_cycle_ids
|
||||
not_closed_in_range_order_cycles.pluck(:id) - orders.map(&:order_cycle_id)
|
||||
not_closed_in_range_order_cycles.pluck(:id) - proxy_orders.map(&:order_cycle_id)
|
||||
end
|
||||
|
||||
def remove_obsolete_orders!
|
||||
proxy_orders.where(order_id: obsolete_orders).destroy_all
|
||||
def remove_obsolete_proxy_orders!
|
||||
obsolete_proxy_orders.destroy_all
|
||||
end
|
||||
|
||||
def obsolete_orders
|
||||
def obsolete_proxy_orders
|
||||
in_range_order_cycle_ids = in_range_order_cycles.pluck(:id)
|
||||
return orders unless in_range_order_cycle_ids.any?
|
||||
orders.where('order_cycle_id NOT IN (?)', in_range_order_cycle_ids)
|
||||
return proxy_orders unless in_range_order_cycle_ids.any?
|
||||
proxy_orders.where('order_cycle_id NOT IN (?)', in_range_order_cycle_ids)
|
||||
end
|
||||
|
||||
def not_closed_in_range_order_cycles
|
||||
|
||||
@@ -8,8 +8,8 @@ class StandingOrderSyncJob
|
||||
def perform
|
||||
standing_orders.each do |standing_order|
|
||||
form = StandingOrderForm.new(standing_order)
|
||||
form.send(:initialise_orders!)
|
||||
form.send(:remove_obsolete_orders!)
|
||||
form.send(:initialise_proxy_orders!)
|
||||
form.send(:remove_obsolete_proxy_orders!)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
class ProxyOrder < ActiveRecord::Base
|
||||
belongs_to :order, class_name: 'Spree::Order', dependent: :destroy
|
||||
belongs_to :standing_order
|
||||
belongs_to :order_cycle
|
||||
|
||||
delegate :number, :order_cycle_id, :completed_at, :total, to: :order
|
||||
|
||||
@@ -18,7 +19,7 @@ class ProxyOrder < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def cancel
|
||||
return false unless order.order_cycle.andand.orders_close_at.andand > Time.zone.now
|
||||
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')
|
||||
@@ -27,7 +28,7 @@ class ProxyOrder < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def resume
|
||||
return false unless order.order_cycle.orders_close_at > Time.zone.now
|
||||
return false unless order_cycle.orders_close_at.andand > Time.zone.now
|
||||
transaction do
|
||||
self.update_column(:canceled_at, nil)
|
||||
order.send('resume')
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
class AddOrderCycleIdToProxyOrders < ActiveRecord::Migration
|
||||
def up
|
||||
add_column :proxy_orders, :order_cycle_id, :integer
|
||||
|
||||
ProxyOrder.find_each do |proxy_order|
|
||||
order_cycle_id = proxy_order.order.order_cycle_id
|
||||
proxy_order.update_attribute(:order_cycle_id, order_cycle_id)
|
||||
end
|
||||
|
||||
change_column :proxy_orders, :order_cycle_id, :integer, null: false
|
||||
add_index :proxy_orders, [:order_cycle_id, :standing_order_id], unique: true
|
||||
add_foreign_key :proxy_orders, :order_cycles
|
||||
end
|
||||
|
||||
def down
|
||||
remove_foreign_key :proxy_orders, :order_cycles
|
||||
remove_index :proxy_orders, :order_cycle_id
|
||||
remove_column :proxy_orders, :order_cycle_id
|
||||
end
|
||||
end
|
||||
@@ -355,8 +355,10 @@ ActiveRecord::Schema.define(:version => 20170921065259) do
|
||||
t.datetime "canceled_at"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.integer "order_cycle_id", :null => false
|
||||
end
|
||||
|
||||
add_index "proxy_orders", ["order_cycle_id", "standing_order_id"], :name => "index_proxy_orders_on_order_cycle_id_and_standing_order_id", :unique => true
|
||||
add_index "proxy_orders", ["order_id"], :name => "index_proxy_orders_on_order_id", :unique => true
|
||||
add_index "proxy_orders", ["standing_order_id"], :name => "index_proxy_orders_on_standing_order_id"
|
||||
|
||||
@@ -1253,6 +1255,7 @@ ActiveRecord::Schema.define(:version => 20170921065259) do
|
||||
add_foreign_key "product_distributions", "enterprises", name: "product_distributions_distributor_id_fk", column: "distributor_id"
|
||||
add_foreign_key "product_distributions", "spree_products", name: "product_distributions_product_id_fk", column: "product_id"
|
||||
|
||||
add_foreign_key "proxy_orders", "order_cycles", name: "proxy_orders_order_cycle_id_fk"
|
||||
add_foreign_key "proxy_orders", "spree_orders", name: "order_id_fk", column: "order_id"
|
||||
add_foreign_key "proxy_orders", "standing_orders", name: "standing_order_id_fk"
|
||||
|
||||
|
||||
@@ -7,9 +7,8 @@ describe Admin::ProxyOrdersController, type: :controller do
|
||||
let!(:user) { create(:user, enterprise_limit: 10) }
|
||||
let!(:shop) { create(:distributor_enterprise) }
|
||||
let!(:order_cycle) { create(:simple_order_cycle, orders_close_at: 1.day.from_now) }
|
||||
let!(:order) { create(:order, order_cycle: order_cycle) }
|
||||
let!(:standing_order) { create(:standing_order_with_items, shop: shop, orders: [order]) }
|
||||
let!(:proxy_order) { standing_order.proxy_orders.first }
|
||||
let!(:standing_order) { create(:standing_order_with_items, shop: shop) }
|
||||
let!(:proxy_order) { create(:proxy_order, standing_order: standing_order, order_cycle: order_cycle) }
|
||||
|
||||
before do
|
||||
allow(controller).to receive(:spree_current_user) { user }
|
||||
@@ -68,12 +67,14 @@ describe Admin::ProxyOrdersController, type: :controller do
|
||||
let!(:shop) { create(:distributor_enterprise) }
|
||||
let!(:order_cycle) { create(:simple_order_cycle, orders_close_at: 1.day.from_now) }
|
||||
let!(:payment_method) { create(:payment_method) }
|
||||
let!(:order) { create(:order, shipping_method: create(:shipping_method), order_cycle: order_cycle) }
|
||||
let!(:standing_order) { create(:standing_order_with_items, shop: shop, orders: [order]) }
|
||||
let!(:proxy_order) { standing_order.proxy_orders.first }
|
||||
let!(:shipping_method) { create(:shipping_method) }
|
||||
let!(:standing_order) { create(:standing_order_with_items, shop: shop) }
|
||||
let!(:proxy_order) { create(:proxy_order, standing_order: standing_order, order_cycle: order_cycle) }
|
||||
let(:order) { proxy_order.order }
|
||||
|
||||
before do
|
||||
# Processing order to completion
|
||||
order.update_attribute(:shipping_method_id, shipping_method.id)
|
||||
while !order.completed? do break unless order.next! end
|
||||
proxy_order.update_attribute(:canceled_at, Time.zone.now)
|
||||
order.cancel
|
||||
|
||||
@@ -377,9 +377,8 @@ describe Admin::StandingOrdersController, type: :controller do
|
||||
let!(:user) { create(:user, enterprise_limit: 10) }
|
||||
let!(:shop) { create(:distributor_enterprise) }
|
||||
let!(:order_cycle) { create(:simple_order_cycle, orders_close_at: 1.day.from_now) }
|
||||
let!(:order) { create(:order, order_cycle: order_cycle) }
|
||||
let!(:standing_order) { create(:standing_order_with_items, shop: shop, orders: [order]) }
|
||||
let!(:proxy_order) { standing_order.proxy_orders.first }
|
||||
let!(:standing_order) { create(:standing_order_with_items, shop: shop) }
|
||||
let!(:proxy_order) { create(:proxy_order, standing_order: standing_order, order_cycle: order_cycle) }
|
||||
|
||||
before do
|
||||
allow(controller).to receive(:spree_current_user) { user }
|
||||
|
||||
@@ -166,6 +166,16 @@ FactoryGirl.define do
|
||||
quantity 1
|
||||
end
|
||||
|
||||
factory :proxy_order, :class => ProxyOrder do
|
||||
standing_order
|
||||
order
|
||||
order_cycle
|
||||
after(:create) do |proxy_order, proxy|
|
||||
proxy_order.order.order_cycle = proxy_order.order_cycle
|
||||
proxy_order.order.save!
|
||||
end
|
||||
end
|
||||
|
||||
factory :variant_override, :class => VariantOverride do
|
||||
price 77.77
|
||||
count_on_hand 11111
|
||||
|
||||
@@ -19,9 +19,9 @@ feature 'Standing Orders' do
|
||||
|
||||
before do
|
||||
# initialise standing orders
|
||||
StandingOrderForm.new(standing_order).send(:initialise_orders!)
|
||||
StandingOrderForm.new(standing_order2).send(:initialise_orders!)
|
||||
StandingOrderForm.new(standing_order_unmanaged).send(:initialise_orders!)
|
||||
StandingOrderForm.new(standing_order).send(:initialise_proxy_orders!)
|
||||
StandingOrderForm.new(standing_order2).send(:initialise_proxy_orders!)
|
||||
StandingOrderForm.new(standing_order_unmanaged).send(:initialise_proxy_orders!)
|
||||
end
|
||||
|
||||
it "passes the smoke test" do
|
||||
|
||||
@@ -96,7 +96,7 @@ describe StandingOrderForm do
|
||||
let(:form) { StandingOrderForm.new(standing_order, params) }
|
||||
|
||||
before do
|
||||
form.send(:initialise_orders!)
|
||||
form.send(:initialise_proxy_orders!)
|
||||
form.save
|
||||
end
|
||||
|
||||
@@ -116,12 +116,12 @@ describe StandingOrderForm do
|
||||
let(:form) { StandingOrderForm.new(standing_order, params) }
|
||||
|
||||
context "when the shipping method on an order is the same as the standing order" do
|
||||
before { form.send(:initialise_orders!) }
|
||||
before { form.send(:initialise_proxy_orders!) }
|
||||
|
||||
it "updates the shipping_method on the order and on shipments" do
|
||||
expect(order.shipments.first.shipping_method).to eq shipping_method
|
||||
form.save
|
||||
expect(order.shipping_method).to eq new_shipping_method
|
||||
expect(order.reload.shipping_method).to eq new_shipping_method
|
||||
expect(order.shipments.first.shipping_method).to eq new_shipping_method
|
||||
end
|
||||
end
|
||||
@@ -130,7 +130,7 @@ describe StandingOrderForm do
|
||||
let(:changed_shipping_method) { create(:shipping_method) }
|
||||
|
||||
before do
|
||||
form.send(:initialise_orders!)
|
||||
form.send(:initialise_proxy_orders!)
|
||||
# Updating the shipping method on a shipment updates the shipping method on the order,
|
||||
# and vice-versa via logic in Spree's shipments controller. So updating both here mimics that
|
||||
# behaviour.
|
||||
@@ -155,7 +155,7 @@ describe StandingOrderForm do
|
||||
let(:form) { StandingOrderForm.new(standing_order, params) }
|
||||
|
||||
context "when the payment method on an order is the same as the standing order" do
|
||||
before { form.send(:initialise_orders!) }
|
||||
before { form.send(:initialise_proxy_orders!) }
|
||||
|
||||
it "voids existing payments and creates a new payment with the relevant payment method" do
|
||||
expect(order.payments.reload.first.payment_method).to eq payment_method
|
||||
@@ -173,7 +173,7 @@ describe StandingOrderForm do
|
||||
let(:changed_payment_method) { create(:payment_method) }
|
||||
|
||||
before do
|
||||
form.send(:initialise_orders!)
|
||||
form.send(:initialise_proxy_orders!)
|
||||
order.payments.first.update_attribute(:payment_method_id, changed_payment_method.id)
|
||||
form.save
|
||||
end
|
||||
@@ -191,7 +191,7 @@ describe StandingOrderForm do
|
||||
let(:params) { { begins_at: 1.year.from_now, ends_at: 2.years.from_now } }
|
||||
let(:form) { StandingOrderForm.new(standing_order, params) }
|
||||
|
||||
before { form.send(:initialise_orders!) }
|
||||
before { form.send(:initialise_proxy_orders!) }
|
||||
|
||||
it "removes orders outside the newly specified date range" do
|
||||
expect(standing_order.reload.orders.count).to be 1
|
||||
@@ -213,7 +213,7 @@ describe StandingOrderForm do
|
||||
context "when quantity is less than available stock" do
|
||||
let(:params) { { standing_line_items_attributes: [ { id: sli.id, quantity: 2} ] } }
|
||||
let(:form) { StandingOrderForm.new(standing_order, params) }
|
||||
before { form.send(:initialise_orders!) }
|
||||
before { form.send(:initialise_proxy_orders!) }
|
||||
|
||||
it "updates the line_item quantities and totals on all orders" do
|
||||
expect(standing_order.orders.first.reload.total.to_f).to eq 59.97
|
||||
@@ -227,7 +227,7 @@ describe StandingOrderForm do
|
||||
context "when quantity is greater than available stock" do
|
||||
let(:params) { { standing_line_items_attributes: [ { id: sli.id, quantity: 3} ] } }
|
||||
let(:form) { StandingOrderForm.new(standing_order, params) }
|
||||
before { form.send(:initialise_orders!) }
|
||||
before { form.send(:initialise_proxy_orders!) }
|
||||
|
||||
it "updates the line_item quantities and totals on all orders" do
|
||||
expect(standing_order.orders.first.reload.total.to_f).to eq 59.97
|
||||
@@ -248,7 +248,7 @@ describe StandingOrderForm do
|
||||
|
||||
before do
|
||||
order_cycle.variants << variant
|
||||
form.send(:initialise_orders!)
|
||||
form.send(:initialise_proxy_orders!)
|
||||
end
|
||||
|
||||
it "add the line item and updates the total on all orders" do
|
||||
@@ -267,7 +267,7 @@ describe StandingOrderForm do
|
||||
let(:params) { { standing_line_items_attributes: [ { id: sli.id, _destroy: true } ] } }
|
||||
let(:form) { StandingOrderForm.new(standing_order, params) }
|
||||
|
||||
before { form.send(:initialise_orders!) }
|
||||
before { form.send(:initialise_proxy_orders!) }
|
||||
|
||||
it "removes the line item and updates totals on all orders" do
|
||||
expect(standing_order.orders.first.reload.total.to_f).to eq 59.97
|
||||
|
||||
@@ -9,17 +9,15 @@ describe StandingOrderConfirmJob do
|
||||
let!(:job) { StandingOrderConfirmJob.new(order_cycle1) }
|
||||
|
||||
describe "finding standing_order orders for the specified order cycle" do
|
||||
let(:order1) { create(:order, order_cycle: order_cycle1) } # Incomplete + Linked + OC Matches
|
||||
let(:order2) { create(:order, order_cycle: order_cycle1, completed_at: 5.minutes.ago) } # Complete + Not-Linked + OC Matches
|
||||
let(:order3) { create(:order, order_cycle: order_cycle2, completed_at: 5.minutes.ago) } # Complete + Linked + OC Mismatch
|
||||
let(:order4) { create(:order, order_cycle: order_cycle1, completed_at: 5.minutes.ago) } # Complete + Linked + OC Matches + Cancelled
|
||||
let(:order5) { create(:order, order_cycle: order_cycle1, completed_at: 5.minutes.ago) } # Complete + Linked + OC Matches
|
||||
let(:cancelled_proxy_order) { standing_order1.proxy_orders.find_by_order_id(order4.id) }
|
||||
|
||||
before do
|
||||
standing_order1.orders = [order1, order3, order4, order5]
|
||||
cancelled_proxy_order.update_attribute(:canceled_at, 1.minute.ago)
|
||||
end
|
||||
let(:order1) { create(:order) } # Incomplete + Linked + OC Matches
|
||||
let(:order2) { create(:order, completed_at: 5.minutes.ago) } # Complete + Not-Linked + OC Matches
|
||||
let(:order3) { create(:order, completed_at: 5.minutes.ago) } # Complete + Linked + OC Mismatch
|
||||
let(:order4) { create(:order, completed_at: 5.minutes.ago) } # Complete + Linked + OC Matches + Cancelled
|
||||
let(:order5) { create(:order, completed_at: 5.minutes.ago) } # Complete + Linked + OC Matches
|
||||
let!(:proxy_order1) { create(:proxy_order, order_cycle: order_cycle1, standing_order: standing_order1, order: order1) }
|
||||
let!(:proxy_order3) { create(:proxy_order, order_cycle: order_cycle2, standing_order: standing_order1, order: order3) }
|
||||
let!(:proxy_order4) { create(:proxy_order, order_cycle: order_cycle1, standing_order: standing_order1, order: order4, canceled_at: 1.minute.ago) }
|
||||
let!(:proxy_order5) { create(:proxy_order, order_cycle: order_cycle1, standing_order: standing_order1, order: order5) }
|
||||
|
||||
it "only returns incomplete orders in the relevant order cycle that are linked to a standing order" do
|
||||
orders = job.send(:orders)
|
||||
@@ -28,13 +26,13 @@ describe StandingOrderConfirmJob do
|
||||
end
|
||||
end
|
||||
|
||||
describe "processing a standing order order" do
|
||||
describe "processing an order" do
|
||||
let(:order) { standing_order1.orders.first }
|
||||
|
||||
before do
|
||||
form = StandingOrderForm.new(standing_order1)
|
||||
form.send(:initialise_orders!)
|
||||
while !standing_order1.orders.first.completed? do break unless order.next! end
|
||||
form.send(:initialise_proxy_orders!)
|
||||
while !order.completed? do break unless order.next! end
|
||||
allow(job).to receive(:send_confirm_email).and_call_original
|
||||
Spree::MailMethod.create!(
|
||||
environment: Rails.env,
|
||||
|
||||
@@ -14,30 +14,27 @@ describe StandingOrderPlacementJob do
|
||||
let!(:job) { StandingOrderPlacementJob.new(order_cycle1) }
|
||||
|
||||
describe "finding standing_order orders for the specified order cycle" do
|
||||
let(:order1) { create(:order, order_cycle: order_cycle1, completed_at: 5.minutes.ago) } # Complete + Linked + OC Matches
|
||||
let(:order2) { create(:order, order_cycle: order_cycle1) } # Incomplete + Not-Linked + OC Matches
|
||||
let(:order3) { create(:order, order_cycle: order_cycle2) } # Incomplete + Linked + OC Mismatch
|
||||
let(:order4) { create(:order, order_cycle: order_cycle1) } # Incomplete + Linked + OC Matches + Paused
|
||||
let(:order5) { create(:order, order_cycle: order_cycle1) } # Incomplete + Linked + OC Matches + Cancelled
|
||||
let(:order6) { create(:order, order_cycle: order_cycle1) } # Incomplete + Linked + OC Matches + Yet To Begin
|
||||
let(:order7) { create(:order, order_cycle: order_cycle1) } # Incomplete + Linked + OC Matches + Ended
|
||||
let(:order8) { create(:order, order_cycle: order_cycle1) } # Incomplete + Linked + OC Matches
|
||||
|
||||
before do
|
||||
standing_order1.orders = [order1, order3, order8]
|
||||
standing_order2.orders = [order4]
|
||||
standing_order3.orders = [order5]
|
||||
standing_order4.orders = [order6]
|
||||
standing_order5.orders = [order7]
|
||||
end
|
||||
let(:order1) { create(:order, completed_at: 5.minutes.ago) } # Complete + Linked + OC Matches
|
||||
let(:order2) { create(:order) } # Incomplete + Not-Linked + OC Matches
|
||||
let(:order3) { create(:order) } # Incomplete + Linked + OC Mismatch
|
||||
let(:order4) { create(:order) } # Incomplete + Linked + OC Matches + Paused
|
||||
let(:order5) { create(:order) } # Incomplete + Linked + OC Matches + Cancelled
|
||||
let(:order6) { create(:order) } # Incomplete + Linked + OC Matches + Yet To Begin
|
||||
let(:order7) { create(:order) } # Incomplete + Linked + OC Matches + Ended
|
||||
let(:order8) { create(:order) } # Incomplete + Linked + OC Matches
|
||||
let!(:proxy_order1) { create(:proxy_order, standing_order: standing_order1, order: order1, order_cycle: order_cycle1) }
|
||||
let!(:proxy_order3) { create(:proxy_order, standing_order: standing_order1, order: order3, order_cycle: order_cycle2) }
|
||||
let!(:proxy_order4) { create(:proxy_order, standing_order: standing_order2, order: order4, order_cycle: order_cycle1) }
|
||||
let!(:proxy_order5) { create(:proxy_order, standing_order: standing_order3, order: order5, order_cycle: order_cycle1) }
|
||||
let!(:proxy_order6) { create(:proxy_order, standing_order: standing_order4, order: order6, order_cycle: order_cycle1) }
|
||||
let!(:proxy_order7) { create(:proxy_order, standing_order: standing_order5, order: order7, order_cycle: order_cycle1) }
|
||||
let!(:proxy_order8) { create(:proxy_order, standing_order: standing_order1, order: order8, order_cycle: order_cycle1) }
|
||||
|
||||
it "only returns incomplete orders in the relevant order cycle that are linked to a standing order" do
|
||||
orders = job.send(:orders)
|
||||
expect(orders).to include order8
|
||||
expect(orders).to_not include order1, order2, order3, order4, order5, order6, order7
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
describe "processing an order containing items with insufficient stock" do
|
||||
@@ -71,7 +68,7 @@ describe StandingOrderPlacementJob do
|
||||
|
||||
before do
|
||||
form = StandingOrderForm.new(standing_order1)
|
||||
form.send(:initialise_orders!)
|
||||
form.send(:initialise_proxy_orders!)
|
||||
expect_any_instance_of(Spree::Payment).to_not receive(:process!)
|
||||
allow(job).to receive(:cap_quantity_and_store_changes) { changes }
|
||||
allow(job).to receive(:send_placement_email).and_call_original
|
||||
|
||||
@@ -31,14 +31,14 @@ describe StandingOrderSyncJob do
|
||||
before do
|
||||
allow(job).to receive(:standing_orders) { [standing_order] }
|
||||
allow(StandingOrderForm).to receive(:new) { form }
|
||||
allow(form).to receive(:initialise_orders!)
|
||||
allow(form).to receive(:remove_obsolete_orders!)
|
||||
allow(form).to receive(:initialise_proxy_orders!)
|
||||
allow(form).to receive(:remove_obsolete_proxy_orders!)
|
||||
end
|
||||
|
||||
it "calls initialize_orders! and remove_obsolete_orders! on each form" do
|
||||
it "calls initialize_orders! and remove_obsolete_proxy_orders! on each form" do
|
||||
job.perform
|
||||
expect(form).to have_received(:initialise_orders!).once
|
||||
expect(form).to have_received(:remove_obsolete_orders!).once
|
||||
expect(form).to have_received(:initialise_proxy_orders!).once
|
||||
expect(form).to have_received(:remove_obsolete_proxy_orders!).once
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,14 +3,14 @@ require 'spec_helper'
|
||||
describe ProxyOrder, type: :model do
|
||||
describe "cancel" do
|
||||
let(:order_cycle) { create(:simple_order_cycle) }
|
||||
let(:standing_order) { create(:standing_order, orders: [order]) }
|
||||
let(:proxy_order) { standing_order.proxy_orders.first }
|
||||
let(:standing_order) { create(:standing_order) }
|
||||
|
||||
context "when the order cycle for the order is not yet closed" do
|
||||
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 already been completed" do
|
||||
let(:order) { create(:completed_order_with_totals, order_cycle: order_cycle) }
|
||||
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
|
||||
@@ -20,7 +20,8 @@ describe ProxyOrder, type: :model do
|
||||
end
|
||||
|
||||
context "and the order has not already been completed" do
|
||||
let(:order) { create(:order, order_cycle: order_cycle) }
|
||||
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
|
||||
@@ -30,8 +31,9 @@ describe ProxyOrder, type: :model do
|
||||
end
|
||||
end
|
||||
|
||||
context "when the order cycle for the order is already closed" do
|
||||
let(:order) { create(:order, order_cycle: order_cycle) }
|
||||
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) }
|
||||
|
||||
@@ -41,24 +43,15 @@ describe ProxyOrder, type: :model do
|
||||
expect(order.reload.state).to eq 'cart'
|
||||
end
|
||||
end
|
||||
|
||||
context "when the order cycle for the order does not exist" 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
|
||||
|
||||
describe "resume" do
|
||||
let(:order_cycle) { create(:simple_order_cycle) }
|
||||
let!(:payment_method) { create(:payment_method) }
|
||||
let(:order) { create(:order_with_totals, shipping_method: create(:shipping_method), order_cycle: order_cycle) }
|
||||
let(:standing_order) { create(:standing_order, orders: [order]) }
|
||||
let(:proxy_order) { standing_order.proxy_orders.first }
|
||||
let(:standing_order) { create(:standing_order) }
|
||||
let(:order) { create(:order_with_totals, shipping_method: create(:shipping_method)) }
|
||||
let(:proxy_order) { create(:proxy_order, standing_order: standing_order, order: order, order_cycle: order_cycle) }
|
||||
|
||||
|
||||
before do
|
||||
# Processing order to completion
|
||||
@@ -66,7 +59,7 @@ describe ProxyOrder, type: :model do
|
||||
proxy_order.update_attribute(:canceled_at, Time.zone.now)
|
||||
end
|
||||
|
||||
context "when the order cycle for the order is not yet closed" do
|
||||
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 already been cancelled" do
|
||||
@@ -88,7 +81,7 @@ describe ProxyOrder, type: :model do
|
||||
end
|
||||
end
|
||||
|
||||
context "when the order cycle for the order is already closed" 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 been cancelled" do
|
||||
|
||||
@@ -87,9 +87,9 @@ describe StandingOrder, type: :model do
|
||||
end
|
||||
|
||||
describe "cancel" do
|
||||
let!(:standing_order) { create(:standing_order, orders: [create(:order), create(:order)]) }
|
||||
let!(:proxy_order1) { standing_order.proxy_orders.first }
|
||||
let!(:proxy_order2) { standing_order.proxy_orders.last }
|
||||
let!(:standing_order) { create(:standing_order) }
|
||||
let!(:proxy_order1) { create(:proxy_order, order_cycle: create(:simple_order_cycle)) }
|
||||
let!(:proxy_order2) { create(:proxy_order, order_cycle: create(:simple_order_cycle)) }
|
||||
|
||||
before do
|
||||
allow(standing_order).to receive(:proxy_orders) { [proxy_order1, proxy_order2] }
|
||||
|
||||
Reference in New Issue
Block a user