Files
openfoodnetwork/spec/services/restart_checkout_spec.rb
luisramos0 c4d5eec7fd Covering restart_checkout code with more tests to clarify behaviour with different order.ship_address objects
The edge case here is when ship_address is present but empty, on the checkout_controller we are going to move from using an empty ship_address to using a non-empty one. We keep the original case where this spec was testing with a nil order.ship_address
2019-09-09 17:48:04 +01:00

70 lines
2.3 KiB
Ruby

require 'spec_helper'
describe RestartCheckout 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!)
RestartCheckout.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
RestartCheckout.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
RestartCheckout.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
RestartCheckout.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