fake_braintree 0.4.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/Gemfile +3 -5
- data/LICENSE +1 -1
- data/NEWS.md +9 -0
- data/README.md +19 -25
- data/Rakefile +1 -1
- data/fake_braintree.gemspec +4 -6
- data/lib/fake_braintree/address.rb +8 -8
- data/lib/fake_braintree/credit_card.rb +51 -26
- data/lib/fake_braintree/helpers.rb +2 -2
- data/lib/fake_braintree/sinatra_app.rb +4 -3
- data/lib/fake_braintree/version.rb +1 -1
- data/spec/fake_braintree/address_spec.rb +8 -3
- data/spec/fake_braintree/credit_card_spec.rb +26 -22
- data/spec/fake_braintree/customer_spec.rb +20 -20
- data/spec/fake_braintree/registry_spec.rb +2 -2
- data/spec/fake_braintree/subscription_spec.rb +20 -19
- data/spec/fake_braintree/transaction_spec.rb +30 -13
- data/spec/fake_braintree/transparent_redirect_spec.rb +11 -11
- data/spec/fake_braintree_spec.rb +22 -24
- data/spec/spec_helper.rb +7 -10
- data/spec/support/braintree_logging.rb +7 -0
- data/spec/support/matchers/clear_hash_when_cleared.rb +1 -1
- data/spec/support/matchers/have_accessor_for.rb +1 -1
- metadata +20 -46
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3e1f728169a3ebbadce2b17ce18b02573c62bebb
|
|
4
|
+
data.tar.gz: ae270d791ae918780fc6d73876d1262b767b2d9c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8760ad110627da619df7e9d01886f106d43c0e79b820185dce901aabf38c1ca563fc81f9449af1dee11bad69fcc125c3f6cc262314aefd0a24140eab68b1876d
|
|
7
|
+
data.tar.gz: e436d08996cb0b17ef1ab0cd8668dbeb3cd44ef60717b4f69b68fe2f46dddb3d470722b7698b73f6fd7ed25bddef9c17a00312417195272fdcf8edfdba12f87f
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
source 'http://rubygems.org'
|
|
2
2
|
|
|
3
3
|
# Web servers for different platforms
|
|
4
|
-
|
|
5
4
|
platform :jruby do
|
|
6
5
|
gem 'puma'
|
|
7
6
|
end
|
|
@@ -10,12 +9,11 @@ platform :mri do
|
|
|
10
9
|
gem 'thin'
|
|
11
10
|
end
|
|
12
11
|
|
|
13
|
-
# Specify your gem's dependencies in fake_braintree.gemspec
|
|
14
12
|
gemspec
|
|
15
13
|
|
|
16
|
-
# Capybara 2.1.0 requires 1.9.3+ so we install a version that works with
|
|
17
|
-
#
|
|
18
|
-
#
|
|
14
|
+
# Capybara 2.1.0 requires 1.9.3+ so we install a version that works with every
|
|
15
|
+
# Ruby version we test against. This can be removed if we stop testing against
|
|
16
|
+
# 1.9.2.
|
|
19
17
|
gem 'capybara', '~> 2.0.3'
|
|
20
18
|
|
|
21
19
|
if RUBY_VERSION == '1.9.2'
|
data/LICENSE
CHANGED
|
@@ -2,7 +2,7 @@ LICENSE
|
|
|
2
2
|
|
|
3
3
|
The MIT License
|
|
4
4
|
|
|
5
|
-
Copyright (c) 2011-
|
|
5
|
+
Copyright (c) 2011-2014 thoughtbot, inc.
|
|
6
6
|
|
|
7
7
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
8
|
of this software and associated documentation files (the "Software"), to deal
|
data/NEWS.md
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
# HEAD
|
|
2
|
+
|
|
3
|
+
* Remove unused `i18n` gem dependency (#56).
|
|
4
|
+
* Set `credit_card.card_type`, `credit_card.last_4`, and
|
|
5
|
+
`credit_card.unique_number_identifier`. Ensure `credit_card.bin` is always
|
|
6
|
+
set (#47).
|
|
7
|
+
* Support new Braintree credit card API URLs
|
|
8
|
+
* Requires Braintree ~> 2.32 instead of Braintree ~> 2.5.
|
|
9
|
+
|
|
1
10
|
# 0.4.3
|
|
2
11
|
|
|
3
12
|
* Add missing quote.
|
data/README.md
CHANGED
|
@@ -41,6 +41,7 @@ of them (yet).
|
|
|
41
41
|
* `Braintree::Transaction.refund`
|
|
42
42
|
* `Braintree::Transaction.sale`
|
|
43
43
|
* `Braintree::Transaction.void`
|
|
44
|
+
* `Braintree::Transaction.submit_for_settlement`
|
|
44
45
|
|
|
45
46
|
### TransparentRedirect
|
|
46
47
|
* `Braintree::TransparentRedirect.confirm` (only for creating customers)
|
|
@@ -74,29 +75,14 @@ If you're using Cucumber, add this too:
|
|
|
74
75
|
FakeBraintree.clear!
|
|
75
76
|
end
|
|
76
77
|
|
|
77
|
-
|
|
78
|
+
It is advised to run your tests with `js: true` (RSpec) or `@javascript`
|
|
79
|
+
(Cucumber), so that the requests correctly go through `FakeBraintree`. You might
|
|
80
|
+
want to give a look at
|
|
81
|
+
[capybara-webkit](https://github.com/thoughtbot/capybara-webkit).
|
|
78
82
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
# Gemfile
|
|
82
|
-
group :test do
|
|
83
|
-
gem 'fake_braintree', require: false
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# spec/spec_helper.rb
|
|
87
|
-
Spork.each_run do
|
|
88
|
-
require 'fake_braintree'
|
|
89
|
-
# ...other FakeBraintree configuration, for example:
|
|
90
|
-
# FakeBraintree.verify_all_cards!
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# features/support/env.rb
|
|
94
|
-
Spork.each_run do
|
|
95
|
-
require 'fake_braintree'
|
|
96
|
-
# ...other FakeBraintree configuration, for example:
|
|
97
|
-
# FakeBraintree.verify_all_cards!
|
|
98
|
-
end
|
|
83
|
+
# Credit Cards
|
|
99
84
|
|
|
85
|
+
* `credit_card.card_type` will always be `"FakeBraintree"`.
|
|
100
86
|
|
|
101
87
|
## Verifying credit cards
|
|
102
88
|
|
|
@@ -150,10 +136,13 @@ call it with no arguments.
|
|
|
150
136
|
|
|
151
137
|
Full example:
|
|
152
138
|
|
|
153
|
-
transaction = FakeBraintree.generate_transaction(
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
139
|
+
transaction = FakeBraintree.generate_transaction(
|
|
140
|
+
amount: '20.00',
|
|
141
|
+
status: Braintree::Transaction::Status::Settled,
|
|
142
|
+
subscription_id: 'foobar',
|
|
143
|
+
created_at: Time.now + 60
|
|
144
|
+
)
|
|
145
|
+
|
|
157
146
|
p transaction
|
|
158
147
|
# {
|
|
159
148
|
# "status_history" =>
|
|
@@ -166,6 +155,11 @@ Full example:
|
|
|
166
155
|
# "subscription_id" => "foobar"
|
|
167
156
|
# }
|
|
168
157
|
|
|
158
|
+
## Running the tests
|
|
159
|
+
|
|
160
|
+
During tests, debug-level logs will be sent to `tmp/braintree_log`. This is
|
|
161
|
+
useful for seeing which URLs Braintree is actually hitting.
|
|
162
|
+
|
|
169
163
|
Credits
|
|
170
164
|
-------
|
|
171
165
|
|
data/Rakefile
CHANGED
data/fake_braintree.gemspec
CHANGED
|
@@ -17,14 +17,12 @@ Gem::Specification.new do |s|
|
|
|
17
17
|
s.require_paths = ['lib']
|
|
18
18
|
s.required_ruby_version = Gem::Requirement.new(">= 1.9.2")
|
|
19
19
|
|
|
20
|
-
s.add_dependency 'capybara'
|
|
21
20
|
s.add_dependency 'activesupport'
|
|
22
|
-
s.add_dependency '
|
|
21
|
+
s.add_dependency 'braintree', '~> 2.32'
|
|
22
|
+
s.add_dependency 'capybara'
|
|
23
23
|
s.add_dependency 'sinatra'
|
|
24
|
-
s.add_dependency 'braintree', '~> 2.5'
|
|
25
24
|
|
|
26
|
-
s.add_development_dependency 'rspec', '~> 2.12.0'
|
|
27
|
-
s.add_development_dependency 'bourne', '~> 1.3'
|
|
28
|
-
s.add_development_dependency 'timecop', '~> 0.6'
|
|
29
25
|
s.add_development_dependency 'rake'
|
|
26
|
+
s.add_development_dependency 'rspec', '~> 2.14'
|
|
27
|
+
s.add_development_dependency 'timecop', '~> 0.6'
|
|
30
28
|
end
|
|
@@ -7,33 +7,33 @@ module FakeBraintree
|
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
def create
|
|
10
|
-
@
|
|
11
|
-
FakeBraintree.registry.addresses[id] = @
|
|
12
|
-
customer['addresses'] << @
|
|
10
|
+
@address['id'] = generate_id
|
|
11
|
+
FakeBraintree.registry.addresses[id] = @address
|
|
12
|
+
customer['addresses'] << @address
|
|
13
13
|
response_for_updated_address
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def customer
|
|
17
|
-
FakeBraintree.registry.customers[@
|
|
17
|
+
FakeBraintree.registry.customers[@address['customer_id']]
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def response_for_updated_address
|
|
21
|
-
gzipped_response(200, @
|
|
21
|
+
gzipped_response(200, @address.to_xml(root: 'address'))
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def set_up_address(address_hash_from_params, options)
|
|
25
|
-
@
|
|
25
|
+
@address = {
|
|
26
26
|
"merchant_id" => options[:merchant_id],
|
|
27
27
|
"customer_id" => options[:customer_id],
|
|
28
28
|
}.merge(address_hash_from_params)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def generate_id
|
|
32
|
-
"#{@
|
|
32
|
+
"#{@address['customer_id']}_#{customer['addresses'].size}"
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
def id
|
|
36
|
-
@
|
|
36
|
+
@address['id']
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
end
|
|
@@ -5,17 +5,21 @@ module FakeBraintree
|
|
|
5
5
|
def initialize(credit_card_hash_from_params, options)
|
|
6
6
|
set_up_credit_card(credit_card_hash_from_params, options)
|
|
7
7
|
set_billing_address
|
|
8
|
+
set_bin
|
|
9
|
+
set_card_type
|
|
8
10
|
set_expiration_month_and_year
|
|
11
|
+
set_last_4
|
|
12
|
+
set_unique_number_identifier
|
|
9
13
|
end
|
|
10
14
|
|
|
11
15
|
def create
|
|
12
16
|
if valid_number?
|
|
13
17
|
if token.nil?
|
|
14
|
-
@
|
|
18
|
+
@credit_card['token'] = generate_token
|
|
15
19
|
end
|
|
16
|
-
FakeBraintree.registry.credit_cards[token] = @
|
|
17
|
-
if customer = FakeBraintree.registry.customers[@
|
|
18
|
-
customer['credit_cards'] << @
|
|
20
|
+
FakeBraintree.registry.credit_cards[token] = @credit_card
|
|
21
|
+
if customer = FakeBraintree.registry.customers[@credit_card['customer_id']]
|
|
22
|
+
customer['credit_cards'] << @credit_card
|
|
19
23
|
update_default_card
|
|
20
24
|
end
|
|
21
25
|
response_for_updated_card
|
|
@@ -34,14 +38,14 @@ module FakeBraintree
|
|
|
34
38
|
end
|
|
35
39
|
|
|
36
40
|
def to_xml
|
|
37
|
-
@
|
|
41
|
+
@credit_card.to_xml(root: 'credit_card')
|
|
38
42
|
end
|
|
39
43
|
|
|
40
44
|
def valid_number?
|
|
41
45
|
if FakeBraintree.decline_all_cards?
|
|
42
46
|
false
|
|
43
47
|
elsif FakeBraintree.verify_all_cards
|
|
44
|
-
FakeBraintree::VALID_CREDIT_CARDS.include?(@
|
|
48
|
+
FakeBraintree::VALID_CREDIT_CARDS.include?(@credit_card['number'])
|
|
45
49
|
else
|
|
46
50
|
true
|
|
47
51
|
end
|
|
@@ -50,23 +54,23 @@ module FakeBraintree
|
|
|
50
54
|
private
|
|
51
55
|
|
|
52
56
|
def update_existing_credit_card
|
|
53
|
-
@
|
|
57
|
+
@credit_card = credit_card_from_registry.merge!(@credit_card)
|
|
54
58
|
update_default_card
|
|
55
59
|
end
|
|
56
60
|
|
|
57
|
-
# When updating a card that has 'default' set to true, make sure
|
|
58
|
-
#
|
|
61
|
+
# When updating a card that has 'default' set to true, make sure only one
|
|
62
|
+
# card has the flag.
|
|
59
63
|
def update_default_card
|
|
60
|
-
if @
|
|
61
|
-
FakeBraintree.registry.customers[@
|
|
64
|
+
if @credit_card['default']
|
|
65
|
+
FakeBraintree.registry.customers[@credit_card['customer_id']]['credit_cards'].each do |card|
|
|
62
66
|
card['default'] = false
|
|
63
67
|
end
|
|
64
|
-
@
|
|
68
|
+
@credit_card['default'] = true
|
|
65
69
|
end
|
|
66
70
|
end
|
|
67
71
|
|
|
68
72
|
def response_for_updated_card
|
|
69
|
-
gzipped_response(200, @
|
|
73
|
+
gzipped_response(200, @credit_card.to_xml(root: 'credit_card'))
|
|
70
74
|
end
|
|
71
75
|
|
|
72
76
|
def credit_card_exists_in_registry?
|
|
@@ -82,10 +86,11 @@ module FakeBraintree
|
|
|
82
86
|
end
|
|
83
87
|
|
|
84
88
|
def response_for_invalid_card
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
+
body = FakeBraintree.failure_response.merge(
|
|
90
|
+
'params' => {credit_card: @credit_card}
|
|
91
|
+
).to_xml(root: 'api_error_response')
|
|
92
|
+
|
|
93
|
+
gzipped_response(422, body)
|
|
89
94
|
end
|
|
90
95
|
|
|
91
96
|
def expiration_month
|
|
@@ -97,7 +102,7 @@ module FakeBraintree
|
|
|
97
102
|
end
|
|
98
103
|
|
|
99
104
|
def set_up_credit_card(credit_card_hash_from_params, options)
|
|
100
|
-
@
|
|
105
|
+
@credit_card = {
|
|
101
106
|
'token' => options[:token],
|
|
102
107
|
'merchant_id' => options[:merchant_id],
|
|
103
108
|
'customer_id' => options[:customer_id],
|
|
@@ -106,32 +111,52 @@ module FakeBraintree
|
|
|
106
111
|
end
|
|
107
112
|
|
|
108
113
|
def set_billing_address
|
|
109
|
-
if @
|
|
110
|
-
@
|
|
114
|
+
if @credit_card["billing_address_id"]
|
|
115
|
+
@credit_card["billing_address"] = FakeBraintree.registry.addresses[@credit_card['billing_address_id']]
|
|
111
116
|
end
|
|
112
117
|
end
|
|
113
118
|
|
|
119
|
+
def set_bin
|
|
120
|
+
@credit_card['bin'] = number[0, 6]
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def set_card_type
|
|
124
|
+
@credit_card['card_type'] = 'FakeBraintree'
|
|
125
|
+
end
|
|
126
|
+
|
|
114
127
|
def set_expiration_month_and_year
|
|
115
128
|
if expiration_month
|
|
116
|
-
@
|
|
129
|
+
@credit_card['expiration_month'] = expiration_month
|
|
117
130
|
end
|
|
118
131
|
|
|
119
132
|
if expiration_year
|
|
120
|
-
@
|
|
133
|
+
@credit_card['expiration_year'] = expiration_year
|
|
121
134
|
end
|
|
122
135
|
end
|
|
123
136
|
|
|
137
|
+
def set_last_4
|
|
138
|
+
@credit_card['last_4'] = number[-4, 4]
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def number
|
|
142
|
+
@credit_card['number'].to_s
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def set_unique_number_identifier
|
|
146
|
+
@credit_card["unique_number_identifier"] = number
|
|
147
|
+
end
|
|
148
|
+
|
|
124
149
|
def generate_token
|
|
125
|
-
md5("#{@
|
|
150
|
+
md5("#{@credit_card['number']}#{@credit_card['merchant_id']}")
|
|
126
151
|
end
|
|
127
152
|
|
|
128
153
|
def token
|
|
129
|
-
@
|
|
154
|
+
@credit_card['token']
|
|
130
155
|
end
|
|
131
156
|
|
|
132
157
|
def expiration_date_parts
|
|
133
|
-
if @
|
|
134
|
-
@
|
|
158
|
+
if @credit_card.key?('expiration_date')
|
|
159
|
+
@credit_card['expiration_date'].split('/')
|
|
135
160
|
else
|
|
136
161
|
[]
|
|
137
162
|
end
|
|
@@ -8,8 +8,8 @@ module FakeBraintree
|
|
|
8
8
|
ActiveSupport::Gzip.compress(content)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def gzipped_response(status_code,
|
|
12
|
-
[status_code, { 'Content-Encoding' => 'gzip' }, gzip(
|
|
11
|
+
def gzipped_response(status_code, uncompressed_body)
|
|
12
|
+
[status_code, { 'Content-Encoding' => 'gzip' }, gzip(uncompressed_body)]
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def md5(content)
|
|
@@ -90,7 +90,7 @@ module FakeBraintree
|
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
# Braintree::CreditCard.find
|
|
93
|
-
get '/merchants/:merchant_id/payment_methods/:credit_card_token' do
|
|
93
|
+
get '/merchants/:merchant_id/payment_methods/credit_card/:credit_card_token' do
|
|
94
94
|
credit_card = FakeBraintree.registry.credit_cards[params[:credit_card_token]]
|
|
95
95
|
if credit_card
|
|
96
96
|
gzipped_response(200, credit_card.to_xml(root: 'credit_card'))
|
|
@@ -100,10 +100,11 @@ module FakeBraintree
|
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
# Braintree::CreditCard.update
|
|
103
|
-
put '/merchants/:merchant_id/payment_methods/:credit_card_token' do
|
|
103
|
+
put '/merchants/:merchant_id/payment_methods/credit_card/:credit_card_token' do
|
|
104
104
|
credit_card = FakeBraintree.registry.credit_cards[params[:credit_card_token]]
|
|
105
105
|
updates = hash_from_request_body_with_key('credit_card')
|
|
106
106
|
options = {token: params[:credit_card_token], merchant_id: params[:merchant_id]}
|
|
107
|
+
|
|
107
108
|
CreditCard.new(updates, options).update
|
|
108
109
|
end
|
|
109
110
|
|
|
@@ -157,7 +158,7 @@ module FakeBraintree
|
|
|
157
158
|
gzipped_response(200, transaction_response.to_xml(root: 'transaction'))
|
|
158
159
|
end
|
|
159
160
|
|
|
160
|
-
|
|
161
|
+
# Braintree:Transaction.submit_for_settlement
|
|
161
162
|
put '/merchants/:merchant_id/transactions/:transaction_id/submit_for_settlement' do
|
|
162
163
|
transaction = FakeBraintree.registry.transactions[params[:transaction_id]]
|
|
163
164
|
transaction_response = {'id' => transaction['id'],
|
|
@@ -2,8 +2,13 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe "Braintree::Address.create" do
|
|
4
4
|
it "successfully creates address with valid data" do
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
customer_response = create_customer
|
|
6
|
+
|
|
7
|
+
address_response = Braintree::Address.create(
|
|
8
|
+
customer_id: customer_response.customer.id,
|
|
9
|
+
postal_code: 30339
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
expect(address_response).to be_success
|
|
8
13
|
end
|
|
9
14
|
end
|
|
@@ -6,9 +6,12 @@ describe 'Braintree::CreditCard.find' do
|
|
|
6
6
|
year = '2016'
|
|
7
7
|
credit_card = Braintree::CreditCard.find(token_for(month, year))
|
|
8
8
|
|
|
9
|
-
credit_card.
|
|
10
|
-
credit_card.
|
|
11
|
-
credit_card.
|
|
9
|
+
expect(credit_card.bin).to eq TEST_CC_NUMBER[0, 6]
|
|
10
|
+
expect(credit_card.card_type).to eq "FakeBraintree"
|
|
11
|
+
expect(credit_card.last_4).to eq TEST_CC_NUMBER[-4,4]
|
|
12
|
+
expect(credit_card.expiration_month).to eq month
|
|
13
|
+
expect(credit_card.expiration_year).to eq year
|
|
14
|
+
expect(credit_card.unique_number_identifier).to eq TEST_CC_NUMBER
|
|
12
15
|
end
|
|
13
16
|
|
|
14
17
|
def token_for(month, year)
|
|
@@ -19,17 +22,18 @@ end
|
|
|
19
22
|
describe 'Braintree::CreditCard.sale' do
|
|
20
23
|
it 'successfully creates a sale' do
|
|
21
24
|
result = Braintree::CreditCard.sale(cc_token, amount: 10.00)
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
|
|
26
|
+
expect(result).to be_success
|
|
27
|
+
expect(Braintree::Transaction.find(result.transaction.id)).to be
|
|
24
28
|
end
|
|
25
29
|
end
|
|
26
30
|
|
|
27
|
-
|
|
28
31
|
describe 'Braintree::CreditCard.create' do
|
|
29
32
|
it 'allows creating a credit card without a customer' do
|
|
30
33
|
result = Braintree::CreditCard.create(build_credit_card_hash)
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
|
|
35
|
+
expect(result).to be_success
|
|
36
|
+
expect(Braintree::CreditCard.find('token')).to_not be_nil
|
|
33
37
|
end
|
|
34
38
|
|
|
35
39
|
context 'with a customer' do
|
|
@@ -39,37 +43,37 @@ describe 'Braintree::CreditCard.create' do
|
|
|
39
43
|
|
|
40
44
|
it 'fails to create a credit card if decline_all_cards is set' do
|
|
41
45
|
FakeBraintree.decline_all_cards!
|
|
46
|
+
|
|
42
47
|
result = Braintree::CreditCard.create(build_credit_card_hash)
|
|
43
|
-
|
|
48
|
+
|
|
49
|
+
expect(result).to_not be_success
|
|
44
50
|
expect { Braintree::CreditCard.find('token') }.to raise_error Braintree::NotFoundError
|
|
45
|
-
FakeBraintree.clear!
|
|
46
51
|
end
|
|
47
52
|
|
|
48
53
|
it 'fails to create a credit card if verify_all_cards is set and card is invalid' do
|
|
49
54
|
FakeBraintree.verify_all_cards!
|
|
50
55
|
result = Braintree::CreditCard.create(build_credit_card_hash.merge(number: '12345'))
|
|
51
|
-
result.
|
|
56
|
+
expect(result).to_not be_success
|
|
52
57
|
expect { Braintree::CreditCard.find('token') }.to raise_error Braintree::NotFoundError
|
|
53
|
-
FakeBraintree.verify_all_cards = false
|
|
54
58
|
end
|
|
55
59
|
|
|
56
60
|
it 'successfully creates a credit card' do
|
|
57
61
|
result = Braintree::CreditCard.create(build_credit_card_hash)
|
|
58
|
-
result.
|
|
59
|
-
Braintree::Customer.find(@customer.id).credit_cards.last.token.
|
|
60
|
-
Braintree::Customer.find(@customer.id).credit_cards.last.
|
|
61
|
-
Braintree::Customer.find(@customer.id).credit_cards.last.billing_address.postal_code.
|
|
62
|
+
expect(result).to be_success
|
|
63
|
+
expect(Braintree::Customer.find(@customer.id).credit_cards.last.token).to eq 'token'
|
|
64
|
+
expect(Braintree::Customer.find(@customer.id).credit_cards.last).to be_default
|
|
65
|
+
expect(Braintree::Customer.find(@customer.id).credit_cards.last.billing_address.postal_code).to eq "94110"
|
|
62
66
|
end
|
|
63
67
|
|
|
64
68
|
it 'only allows one credit card to be default' do
|
|
65
69
|
result = Braintree::CreditCard.create(build_credit_card_hash)
|
|
66
|
-
result.
|
|
70
|
+
expect(result).to be_success
|
|
67
71
|
result = Braintree::CreditCard.create(build_credit_card_hash)
|
|
68
|
-
result.
|
|
72
|
+
expect(result).to be_success
|
|
69
73
|
# Reload the customer
|
|
70
74
|
@customer = Braintree::Customer.find(@customer.id)
|
|
71
|
-
@customer.credit_cards.select(&:default?).length.
|
|
72
|
-
@customer.credit_cards.length.
|
|
75
|
+
expect(@customer.credit_cards.select(&:default?).length).to eq 1
|
|
76
|
+
expect(@customer.credit_cards.length).to eq 2
|
|
73
77
|
end
|
|
74
78
|
end
|
|
75
79
|
|
|
@@ -96,8 +100,8 @@ describe 'Braintree::CreditCard.update' do
|
|
|
96
100
|
token = cc_token
|
|
97
101
|
|
|
98
102
|
result = Braintree::CreditCard.update(token, expiration_date: new_expiration_date)
|
|
99
|
-
result.
|
|
100
|
-
Braintree::CreditCard.find(token).expiration_date.
|
|
103
|
+
expect(result).to be_success
|
|
104
|
+
expect(Braintree::CreditCard.find(token).expiration_date).to eq new_expiration_date
|
|
101
105
|
end
|
|
102
106
|
|
|
103
107
|
it 'raises an error for a nonexistent credit card' do
|