diff --git a/engines/order_management/spec/services/order_management/order/updater_spec.rb b/engines/order_management/spec/services/order_management/order/updater_spec.rb index f0df8269af..50c95d5eba 100644 --- a/engines/order_management/spec/services/order_management/order/updater_spec.rb +++ b/engines/order_management/spec/services/order_management/order/updater_spec.rb @@ -141,114 +141,119 @@ module OrderManagement updater.update end - it "is failed if no valid payments" do - allow(order).to receive_message_chain(:payments, :valid, :empty?).and_return(true) + describe "#update_payment_state" do + context "when the order has no valid payments" do + it "is failed" do + allow(order).to receive_message_chain(:payments, :valid, :empty?).and_return(true) - updater.update_payment_state - expect(order.payment_state).to eq('failed') - end - - context "payment total is greater than order total" do - it "is credit_owed" do - order.payment_total = 2 - order.total = 1 - - expect { updater.update_payment_state - }.to change { order.payment_state }.to 'credit_owed' - end - end - - context "order total is greater than payment total" do - it "is credit_owed" do - order.payment_total = 1 - order.total = 2 - - expect { - updater.update_payment_state - }.to change { order.payment_state }.to 'balance_due' - end - end - - context "order total equals payment total" do - it "is paid" do - order.payment_total = 30 - order.total = 30 - - expect { - updater.update_payment_state - }.to change { order.payment_state }.to 'paid' - end - end - - context "order is canceled" do - before do - order.state = 'canceled' - end - - context "and is still unpaid" do - it "is void" do - order.payment_total = 0 - order.total = 30 - expect { - updater.update_payment_state - }.to change { order.payment_state }.to 'void' + expect(order.payment_state).to eq('failed') end end - context "and is paid" do + context "payment total is greater than order total" do it "is credit_owed" do - order.payment_total = 30 - order.total = 30 - allow(order).to receive_message_chain(:payments, :valid, :empty?).and_return(false) - allow(order).to receive_message_chain(:payments, :completed, :empty?).and_return(false) + order.payment_total = 2 + order.total = 1 + expect { updater.update_payment_state }.to change { order.payment_state }.to 'credit_owed' end end - context "and payment is refunded" do - it "is void" do - order.payment_total = 0 - order.total = 30 - allow(order).to receive_message_chain(:payments, :valid, :empty?).and_return(false) - allow(order).to receive_message_chain(:payments, :completed, :empty?).and_return(false) + context "order total is greater than payment total" do + it "is credit_owed" do + order.payment_total = 1 + order.total = 2 + expect { updater.update_payment_state - }.to change { order.payment_state }.to 'void' - end - end - end - - context 'when the set payment_state does not match the last payment_state' do - before { order.payment_state = 'previous_to_paid' } - - context 'and the order is being updated' do - before { allow(order).to receive(:persisted?) { true } } - - it 'creates a new state_change for the order' do - expect { updater.update_payment_state } - .to change { order.state_changes.size }.by(1) + }.to change { order.payment_state }.to 'balance_due' end end - context 'and the order is being created' do - before { allow(order).to receive(:persisted?) { false } } + context "order total equals payment total" do + it "is paid" do + order.payment_total = 30 + order.total = 30 - it 'creates a new state_change for the order' do + expect { + updater.update_payment_state + }.to change { order.payment_state }.to 'paid' + end + end + + context "order is canceled" do + before { order.state = 'canceled' } + + context "and is still unpaid" do + it "is void" do + order.payment_total = 0 + order.total = 30 + + expect { + updater.update_payment_state + }.to change { order.payment_state }.to 'void' + end + end + + context "and is paid" do + it "is credit_owed" do + order.payment_total = 30 + order.total = 30 + allow(order).to receive_message_chain(:payments, :valid, :empty?).and_return(false) + allow(order).to receive_message_chain(:payments, :completed, :empty?).and_return(false) + + expect { + updater.update_payment_state + }.to change { order.payment_state }.to 'credit_owed' + end + end + + context "and payment is refunded" do + it "is void" do + order.payment_total = 0 + order.total = 30 + allow(order).to receive_message_chain(:payments, :valid, :empty?).and_return(false) + allow(order).to receive_message_chain(:payments, :completed, :empty?).and_return(false) + + expect { + updater.update_payment_state + }.to change { order.payment_state }.to 'void' + end + end + end + + context 'when the set payment_state matches the last payment_state' do + before { order.payment_state = 'paid' } + + it 'does not create any state_change' do expect { updater.update_payment_state } .not_to change { order.state_changes.size } end end - end - context 'when the set payment_state matches the last payment_state' do - before { order.payment_state = 'paid' } + context 'when the set payment_state does not match the last payment_state' do + before { order.payment_state = 'previous_to_paid' } - it 'does not create any state_change' do - expect { updater.update_payment_state } - .not_to change { order.state_changes.size } + context 'and the order is being updated' do + before { allow(order).to receive(:persisted?) { true } } + + it 'creates a new state_change for the order' do + expect { updater.update_payment_state } + .to change { order.state_changes.size }.by(1) + end + end + + context 'and the order is being created' do + before { allow(order).to receive(:persisted?) { false } } + + it 'creates a new state_change for the order' do + expect { updater.update_payment_state } + .not_to change { order.state_changes.size } + end + end end end