add guard to granting credits and add spec (#2926)

This commit is contained in:
Jess Lee 2019-05-21 17:14:51 -04:00 committed by Ben Halpern
parent e33c376789
commit 27bd5ed4e2
2 changed files with 19 additions and 3 deletions

View file

@ -14,7 +14,8 @@ class CreditsController < ApplicationController
def create
@number_to_purchase = params[:credit][:number_to_purchase].to_i
make_payment
return unless make_payment
credit_objects = []
@number_to_purchase.times do
if params[:user_type] == "organization"
@ -34,9 +35,11 @@ class CreditsController < ApplicationController
find_or_create_card
update_user_stripe_info
create_charge
true
rescue Stripe::CardError => e
flash[:error] = e.message
redirect_to "/credits/purchase"
false
end
def find_or_create_customer

View file

@ -43,11 +43,11 @@ RSpec.describe "Credits", type: :request do
it "creates unspent credits" do
post "/credits", params: {
credit: {
number_to_purchase: 20
number_to_purchase: 25
},
stripe_token: stripe_helper.generate_card_token
}
expect(user.credits.where(spent: false).size).to eq(20)
expect(user.credits.where(spent: false).size).to eq(25)
end
it "makes a valid Stripe charge" do
@ -142,5 +142,18 @@ RSpec.describe "Credits", type: :request do
expect(org_admin.credits.where(spent: false).size).to eq 0
end
end
context "when payment fails" do
it "does not reward credits" do
StripeMock.prepare_error(Stripe::CardError.new(2, 3, 4), :new_charge)
post "/credits", params: {
credit: {
number_to_purchase: 25
},
stripe_token: stripe_helper.generate_card_token
}
expect(user.credits.where(spent: false).size).to eq(0)
end
end
end
end