From 724d5a2ca01ce1654a2a5865bb061cb808f0ce7a Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 28 Oct 2024 14:32:06 +1100 Subject: [PATCH] Add spec for creating a payment from admin page --- spec/requests/spree/admin/payments_spec.rb | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/spec/requests/spree/admin/payments_spec.rb b/spec/requests/spree/admin/payments_spec.rb index 18a2a4f75c..70c9dd752b 100644 --- a/spec/requests/spree/admin/payments_spec.rb +++ b/spec/requests/spree/admin/payments_spec.rb @@ -10,6 +10,68 @@ RSpec.describe Spree::Admin::PaymentsController, type: :request do sign_in create(:admin_user) end + describe "POST /admin/orders/:order_number/payments.json" do + let(:params) do + { + payment: { + payment_method_id: payment_method.id, amount: order.total + } + } + end + let(:payment_method) do + create(:payment_method, distributors: [order.distributor]) + end + + it "creates a payment" do + expect { + post("/admin/orders/#{order.number}/payments.json", params:) + }.to change { order.payments.count }.by(1) + end + + it "redirect to payments page" do + post("/admin/orders/#{order.number}/payments.json", params:) + + expect(response).to redirect_to(spree.admin_order_payments_path(order)) + expect(flash[:success]).to eq "Payment has been successfully created!" + end + + context "when failing to create payment" do + it "redirects to payments page" do + payment_mock = instance_double(Spree::Payment) + allow(order.payments).to receive(:build).and_return(payment_mock) + allow(payment_mock).to receive(:save).and_return(false) + + post("/admin/orders/#{order.number}/payments.json", params:) + + expect(response).to redirect_to(spree.admin_order_payments_path(order)) + end + end + + context "when a getway error happens" do + let(:payment_method) do + create(:stripe_sca_payment_method, distributors: [order.distributor]) + end + + it "redirect to payments page" do + allow(Spree::Order).to receive(:find_by!).and_return(order) + + stripe_sca_payment_authorize = + instance_double(OrderManagement::Order::StripeScaPaymentAuthorize) + allow(OrderManagement::Order::StripeScaPaymentAuthorize).to receive(:new) + .and_return(stripe_sca_payment_authorize) + # Simulate an error + allow(stripe_sca_payment_authorize).to receive(:call!) do + order.errors.add(:base, "authorization_failure") + end + + post("/admin/orders/#{order.number}/payments.json", params:) + + expect(response).to redirect_to(spree.admin_order_payments_path(order)) + expect(flash[:error]).to eq("Authorization Failure") + end + end + end + describe "PUT /admin/orders/:order_number/payments/:id/fire" do let(:payment) do create(