Repository URL to install this package:
|
Version:
4.0.0.pre.3 ▾
|
require 'rails_helper'
RSpec.describe Core::Utils::Payments do
it 'has a valid Payments object' do
user = create(:core_user)
payment = described_class.new(user, 'abc')
expect(payment.user).to eq user
expect(payment.source).to eq 'abc'
expect(Stripe.api_key).to eq Core.configuration.stripe_token
end
it 'can store details for a new user' do
VCR.use_cassette('stipe_new_user_details') do
user = create(:core_user, name: 'Payments Details Test User')
source = { number: '4242424242424242', exp_month: '12',
exp_year: '2015', cvc: '111' }
payment = described_class.new(user, source)
customer_id = payment.store_details
expect(customer_id).not_to be_nil
user.reload
expect(user.stripe_customer_id).not_to be_nil
end
end
it 'can process payments for a new user' do
VCR.use_cassette('stripe_new_user_payment') do
user = create(:core_user, name: 'Payments Test User',
email: 'stripe@getfitter.co')
# source can either be a Hash (like this) or a hashed value from a lib.
source = { number: '4242424242424242', exp_month: '12',
exp_year: '2015', cvc: '111' }
payment = described_class.new(user, source)
charge = payment.process(100, 'Test Payment')
expect(charge).to be_an_instance_of Stripe::Charge
expect(charge.status).to eq 'paid'
expect(charge.amount).to eq 100
expect(charge.description).to eq 'Test Payment'
end
end
it 'can process payments for an existing user' do
VCR.use_cassette('stripe_existing_user_payment') do
user = create(:core_user, name: 'Payments Test User',
email: 'stripe@getfitter.co',
stripe_customer_id: 'cus_5jQXWYZ5STSVkt')
# don't provide a source because it's an existing customer
payment = described_class.new(user)
charge = payment.process(100, 'Test Payment')
expect(charge).to be_an_instance_of Stripe::Charge
expect(charge.status).to eq 'paid'
expect(charge.amount).to eq 100
expect(charge.description).to eq 'Test Payment'
expect(charge.customer).to eq 'cus_5jQXWYZ5STSVkt'
end
end
it 'raises a custom error class on failure' do
VCR.use_cassette('stripe_invalid_card_payment') do
user = create(:core_user, name: 'Payments Test User',
email: 'stripe@getfitter.co')
# provide not quite enough information to make the charge
source = { number: '4242424242424242' }
payment = described_class.new(user, source)
expect { payment.process(100, 'Test') }.to raise_error(
Core::Utils::PaymentError, "Your card's expiration year is invalid.")
end
end
end