mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Handle #refund! as we do with #credit!
This commit is contained in:
@@ -147,7 +147,7 @@ module Spree
|
||||
record_response(response)
|
||||
|
||||
if response.success?
|
||||
self.class.create(order: order,
|
||||
self.class.create!(order: order,
|
||||
source: self,
|
||||
payment_method: payment_method,
|
||||
amount: refund_amount.abs * -1,
|
||||
|
||||
@@ -142,23 +142,23 @@ describe Spree::Admin::PaymentsController, type: :controller do
|
||||
end
|
||||
|
||||
describe '#fire' do
|
||||
let(:payment_method) do
|
||||
create(
|
||||
:stripe_sca_payment_method,
|
||||
distributor_ids: [create(:distributor_enterprise).id],
|
||||
preferred_enterprise_id: create(:enterprise).id
|
||||
)
|
||||
end
|
||||
let(:order) { create(:order, state: 'complete') }
|
||||
let(:payment) do
|
||||
create(:payment, order: order, payment_method: payment_method, amount: order.total)
|
||||
end
|
||||
|
||||
let(:successful_response) { ActiveMerchant::Billing::Response.new(true, "Yay!") }
|
||||
|
||||
context 'on credit event' do
|
||||
let(:payment_method) do
|
||||
create(
|
||||
:stripe_sca_payment_method,
|
||||
distributor_ids: [create(:distributor_enterprise).id],
|
||||
preferred_enterprise_id: create(:enterprise).id
|
||||
)
|
||||
end
|
||||
let(:order) { create(:order, state: 'complete') }
|
||||
let(:payment) do
|
||||
create(:payment, order: order, payment_method: payment_method, amount: order.total)
|
||||
end
|
||||
|
||||
let(:params) { { e: 'credit', order_id: order.number, id: payment.id } }
|
||||
|
||||
let(:successful_response) { ActiveMerchant::Billing::Response.new(true, "Yay!") }
|
||||
|
||||
before do
|
||||
allow(request).to receive(:referer) { 'http://foo.com' }
|
||||
allow(Spree::Payment).to receive(:find).with(payment.id.to_s) { payment }
|
||||
@@ -191,5 +191,41 @@ describe Spree::Admin::PaymentsController, type: :controller do
|
||||
expect(flash[:success]).to eq(I18n.t(:payment_updated))
|
||||
end
|
||||
end
|
||||
|
||||
context 'on refund event' do
|
||||
let(:params) { { e: 'refund', order_id: order.number, id: payment.id } }
|
||||
|
||||
before do
|
||||
allow(request).to receive(:referer) { 'http://foo.com' }
|
||||
allow(Spree::Payment).to receive(:find).with(payment.id.to_s) { payment }
|
||||
end
|
||||
|
||||
it 'handles gateway errors' do
|
||||
allow(payment.payment_method)
|
||||
.to receive(:refund).and_raise(Spree::Core::GatewayError, 'error message')
|
||||
|
||||
spree_put :fire, params
|
||||
|
||||
expect(flash[:error]).to eq('error message')
|
||||
expect(response).to redirect_to('http://foo.com')
|
||||
end
|
||||
|
||||
it 'handles validation errors' do
|
||||
allow(payment).to receive(:refund!).and_raise(StandardError, 'validation error')
|
||||
|
||||
spree_put :fire, params
|
||||
|
||||
expect(flash[:error]).to eq('validation error')
|
||||
expect(response).to redirect_to('http://foo.com')
|
||||
end
|
||||
|
||||
it 'displays a success message and redirects to the referer' do
|
||||
allow(payment_method).to receive(:refund) { successful_response }
|
||||
|
||||
spree_put :fire, params
|
||||
|
||||
expect(flash[:success]).to eq(I18n.t(:payment_updated))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -725,7 +725,7 @@ describe Spree::Payment do
|
||||
end
|
||||
end
|
||||
|
||||
describe "refunding" do
|
||||
describe "refund!" do
|
||||
let(:payment) { create(:payment) }
|
||||
let(:success) { double(success?: true, authorization: 'abc123') }
|
||||
let(:failure) { double(success?: false) }
|
||||
|
||||
Reference in New Issue
Block a user