Skip to content

Commit

Permalink
Always pass CVV on card update for Braintree Blue
Browse files Browse the repository at this point in the history
Always passing the CVV allows for "updating a credit card and explicitly
verifying the card" at the same time:
https://www.braintreepayments.com/docs/ruby/general/card_verification#credit_card_api
  • Loading branch information
shayfrendt committed Jun 15, 2012
1 parent 7ea6cdf commit 0836d0c
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/active_merchant/billing/gateways/braintree_blue.rb
Expand Up @@ -105,6 +105,7 @@ def update(vault_id, creditcard, options = {})
credit_card_params = merge_credit_card_options({
:credit_card => {
:number => creditcard.number,
:cvv => creditcard.verification_value,
:expiration_month => creditcard.month.to_s.rjust(2, "0"),
:expiration_year => creditcard.year.to_s
}
Expand Down
30 changes: 30 additions & 0 deletions test/unit/gateways/braintree_blue_test.rb
Expand Up @@ -150,6 +150,36 @@ def test_store_with_billing_address_options
@gateway.store(credit_card("41111111111111111111"), :billing_address => billing_address)
end

def test_update_with_cvv
stored_credit_card = mock(:token => "token", :default? => true)
customer = mock(:credit_cards => [stored_credit_card], :id => '123')
Braintree::Customer.stubs(:find).with('vault_id').returns(customer)
BraintreeBlueGateway.any_instance.stubs(:customer_hash)

result = Braintree::SuccessfulResult.new(:customer => customer)
Braintree::Customer.expects(:update).with do |vault, params|
assert_equal "567", params[:credit_card][:cvv]
[vault, params]
end.returns(result)

@gateway.update('vault_id', credit_card("41111111111111111111", :verification_value => "567"))
end

def test_update_with_verify_card_true
stored_credit_card = mock(:token => "token", :default? => true)
customer = mock(:credit_cards => [stored_credit_card], :id => '123')
Braintree::Customer.stubs(:find).with('vault_id').returns(customer)
BraintreeBlueGateway.any_instance.stubs(:customer_hash)

result = Braintree::SuccessfulResult.new(:customer => customer)
Braintree::Customer.expects(:update).with do |vault, params|
assert_equal true, params[:credit_card][:options][:verify_card]
[vault, params]
end.returns(result)

@gateway.update('vault_id', credit_card("41111111111111111111"), :verify_card => true)
end

def test_merge_credit_card_options_ignores_bad_option
params = {:first_name => 'John', :credit_card => {:cvv => '123'}}
options = {:verify_card => true, :bogus => 'ignore me'}
Expand Down

0 comments on commit 0836d0c

Please sign in to comment.