mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
66 lines
1.8 KiB
Ruby
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
|