Files
openfoodnetwork/spec/requests/spree/admin/payments_spec.rb
2024-05-09 12:24:41 +10:00

137 lines
3.9 KiB
Ruby

# frozen_string_literal: true
require "spec_helper"
RSpec.describe Spree::Admin::PaymentsController, type: :request do
let(:user) { order.user }
let(:order) { create(:completed_order_with_fees) }
before do
sign_in create(:admin_user)
end
describe "PUT /admin/orders/:order_number/payments/:id/fire" do
let(:payment) do
create(
:payment,
payment_method: stripe_payment_method,
order:,
response_code: "pi_123",
amount: order.total,
state: "completed"
)
end
let(:stripe_payment_method) do
create(:stripe_sca_payment_method, distributors: [order.distributor])
end
let(:headers) { { HTTP_REFERER: spree.admin_order_payments_url(order) } }
before do
order.update(payments: [])
order.payments << payment
end
context "with no event parameter" do
it "redirect to payments page" do
put(
"/admin/orders/#{order.number}/payments/#{order.payments.first.id}/fire",
params: {},
headers:
)
expect(response).to redirect_to(spree.admin_order_payments_url(order))
end
end
context "with no payment source" do
it "redirect to payments page" do
allow(payment).to receive(:payment_source).and_return(nil)
put(
"/admin/orders/#{order.number}/payments/#{order.payments.first.id}/fire?e=void",
params: {},
headers:
)
expect(response).to redirect_to(spree.admin_order_payments_url(order))
end
end
context "with 'void' parameter" do
before do
allow(Spree::Payment).to receive(:find).and_return(payment)
end
it "calls void_transaction! on payment" do
expect(payment).to receive(:void_transaction!)
put(
"/admin/orders/#{order.number}/payments/#{order.payments.first.id}/fire?e=void",
params: {},
headers:
)
end
it "redirect to payments page" do
allow(payment).to receive(:void_transaction!).and_return(true)
put(
"/admin/orders/#{order.number}/payments/#{order.payments.first.id}/fire?e=void",
params: {},
headers:
)
expect(response).to redirect_to(spree.admin_order_payments_url(order))
expect(flash[:success]).to eq "Payment Updated"
end
context "when void_transaction! fails" do
it "set an error flash message" do
allow(payment).to receive(:void_transaction!).and_return(false)
put(
"/admin/orders/#{order.number}/payments/#{order.payments.first.id}/fire?e=void",
params: {},
headers:
)
expect(response).to redirect_to(spree.admin_order_payments_url(order))
expect(flash[:error]).to eq "Could not update the payment"
end
end
end
context "when something unexpected happen" do
before do
allow(Spree::Payment).to receive(:find).and_return(payment)
allow(payment).to receive(:void_transaction!).and_raise(StandardError, "Unexpected !")
end
it "log the error message" do
# The redirect_do also calls Rails.logger.error
expect(Rails.logger).to receive(:error).with("Unexpected !").ordered
expect(Rails.logger).to receive(:error).with(/Redirected/).ordered
expect(Bugsnag).to receive(:notify).with(StandardError)
put(
"/admin/orders/#{order.number}/payments/#{order.payments.first.id}/fire?e=void",
params: {},
headers: { HTTP_REFERER: spree.admin_order_payments_url(order) }
)
expect(flash[:error]).to eq "Unexpected !"
end
it "redirect to payments page" do
put(
"/admin/orders/#{order.number}/payments/#{order.payments.first.id}/fire?e=void",
params: {},
headers:
)
expect(response).to redirect_to(spree.admin_order_payments_url(order))
end
end
end
end