diff --git a/app/controllers/spree/admin/payments_controller.rb b/app/controllers/spree/admin/payments_controller.rb index 215f69972a..408e6e5c81 100644 --- a/app/controllers/spree/admin/payments_controller.rb +++ b/app/controllers/spree/admin/payments_controller.rb @@ -61,7 +61,7 @@ module Spree else flash[:error] = t(:cannot_perform_operation) end - rescue Spree::Core::GatewayError => e + rescue StandardError => e flash[:error] = e.message ensure redirect_to request.referer diff --git a/app/models/spree/payment/processing.rb b/app/models/spree/payment/processing.rb index 14caece4af..2d01a91aea 100644 --- a/app/models/spree/payment/processing.rb +++ b/app/models/spree/payment/processing.rb @@ -108,7 +108,7 @@ module Spree record_response(response) if response.success? - self.class.create( + self.class.create!( order: order, source: self, payment_method: payment_method, diff --git a/spec/controllers/spree/admin/orders/payments/payments_controller_spec.rb b/spec/controllers/spree/admin/orders/payments/payments_controller_spec.rb index 2acc3da19c..3a04e932d6 100644 --- a/spec/controllers/spree/admin/orders/payments/payments_controller_spec.rb +++ b/spec/controllers/spree/admin/orders/payments/payments_controller_spec.rb @@ -148,8 +148,9 @@ describe Spree::Admin::PaymentsController, type: :controller do let(:params) { { e: 'credit', order_id: order.number, id: payment.id } } + before { allow(request).to receive(:referer) { 'http://foo.com' } } + it 'handles gateway errors' do - allow(request).to receive(:referer) { 'http://foo.com' } allow_any_instance_of(payment_method.class) .to receive(:credit).and_raise(Spree::Core::GatewayError, 'error message') @@ -158,6 +159,16 @@ describe Spree::Admin::PaymentsController, type: :controller do expect(flash[:error]).to eq('error message') expect(response).to redirect_to('http://foo.com') end + + it 'handles validation errors' do + allow(Spree::Payment).to receive(:find).with(payment.id.to_s) { payment } + allow(payment).to receive(:credit!).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 end end end diff --git a/spec/models/spree/payment_spec.rb b/spec/models/spree/payment_spec.rb index 77f09e2ef3..a9027d8d34 100644 --- a/spec/models/spree/payment_spec.rb +++ b/spec/models/spree/payment_spec.rb @@ -391,7 +391,7 @@ describe Spree::Payment do context "when response is successful" do it "should create an offsetting payment" do - Spree::Payment.should_receive(:create) + Spree::Payment.should_receive(:create!) payment.credit! end