Files
openfoodnetwork/spec/services/process_payment_intent_spec.rb

66 lines
1.8 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
describe ProcessPaymentIntent do
let(:service) { described_class.new }
describe "processing a payment intent" do
let(:customer) { create(:customer) }
let(:order) { create(:order, customer: customer, distributor: customer.enterprise, state: "payment") }
let!(:payment) { create(
:payment,
cvv_response_message: "https://stripe.com/redirect",
response_code: "pi_123",
order: order,
state: "pending")
}
context "an invalid intent" do
let(:invalid_intent) { "invalid" }
let(:service) { ProcessPaymentIntent.new(invalid_intent, order) }
it "does not complete the payment" do
service.call!
expect(payment.reload.state).to eq("pending")
end
end
context "a valid intent" do
let(:valid_intent) { "pi_123" }
let(:service) { ProcessPaymentIntent.new(valid_intent, order) }
before do
allow(order).to receive(:deliver_order_confirmation_email)
end
it "completes the payment" do
service.call!
payment.reload
expect(payment.state).to eq("completed")
expect(payment.cvv_response_message).to be nil
end
it "completes the order" do
service.call!
expect(order.state).to eq("complete")
expect(order).to have_received(:deliver_order_confirmation_email)
end
end
context "payment is in a failed state" do
let(:invalid_intent) { "invalid" }
let(:service) { ProcessPaymentIntent.new(invalid_intent, order) }
before do
payment.update_attribute(:state, "failed")
end
it "does not complete the payment" do
service.call!
expect(payment.reload.state).to eq("failed")
end
end
end
end