mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-31 21:37:16 +00:00
137 lines
3.9 KiB
Ruby
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
|