mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
70 lines
2.3 KiB
Ruby
70 lines
2.3 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe OrderCheckoutRestart do
|
|
let(:order) { create(:order_with_distributor) }
|
|
|
|
describe "#call" do
|
|
context "when the order is already in the 'cart' state" do
|
|
it "does nothing" do
|
|
expect(order).to_not receive(:restart_checkout!)
|
|
OrderCheckoutRestart.new(order).call
|
|
end
|
|
end
|
|
|
|
context "when the order is in a subsequent state" do
|
|
# 'pending' is the only shipment state possible for incomplete orders
|
|
let!(:shipment_pending) { create(:shipment, order: order, state: 'pending') }
|
|
let!(:payment_failed) { create(:payment, order: order, state: 'failed') }
|
|
let!(:payment_checkout) { create(:payment, order: order, state: 'checkout') }
|
|
|
|
before do
|
|
order.update_attribute(:state, "payment")
|
|
end
|
|
|
|
context "when order ship address is nil" do
|
|
before { order.ship_address = nil }
|
|
|
|
it "resets the order state, and clears incomplete shipments and payments" do
|
|
OrderCheckoutRestart.new(order).call
|
|
|
|
expect_cart_state_and_reset_adjustments
|
|
end
|
|
end
|
|
|
|
context "when order ship address is not empty" do
|
|
before { order.ship_address = order.address_from_distributor }
|
|
|
|
it "resets the order state, and clears incomplete shipments and payments" do
|
|
OrderCheckoutRestart.new(order).call
|
|
|
|
expect_cart_state_and_reset_adjustments
|
|
end
|
|
end
|
|
|
|
context "when order ship address is empty" do
|
|
before { order.ship_address = Spree::Address.default }
|
|
|
|
it "does not reset the order state nor clears incomplete shipments and payments" do
|
|
expect do
|
|
OrderCheckoutRestart.new(order).call
|
|
end.to raise_error(StateMachine::InvalidTransition)
|
|
|
|
expect(order.state).to eq 'payment'
|
|
expect(order.shipments.count).to eq 1
|
|
expect(order.adjustments.shipping.count).to eq 0
|
|
expect(order.payments.count).to eq 2
|
|
expect(order.adjustments.payment_fee.count).to eq 2
|
|
end
|
|
end
|
|
|
|
def expect_cart_state_and_reset_adjustments
|
|
expect(order.state).to eq 'cart'
|
|
expect(order.shipments.count).to eq 0
|
|
expect(order.adjustments.shipping.count).to eq 0
|
|
expect(order.payments.count).to eq 1
|
|
expect(order.adjustments.payment_fee.count).to eq 1
|
|
end
|
|
end
|
|
end
|
|
end
|