fake_braintree 0.4 → 0.4.1
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 +3 -0
- data/Gemfile +9 -0
- data/NEWS.md +5 -1
- data/README.md +22 -19
- data/fake_braintree.gemspec +0 -4
- data/lib/fake_braintree/address.rb +1 -1
- data/lib/fake_braintree/credit_card.rb +5 -5
- data/lib/fake_braintree/customer.rb +4 -4
- data/lib/fake_braintree/redirect.rb +2 -2
- data/lib/fake_braintree/server.rb +1 -1
- data/lib/fake_braintree/sinatra_app.rb +28 -17
- data/lib/fake_braintree/subscription.rb +4 -3
- data/lib/fake_braintree/version.rb +1 -1
- data/spec/fake_braintree/address_spec.rb +1 -1
- data/spec/fake_braintree/credit_card_spec.rb +30 -28
- data/spec/fake_braintree/customer_spec.rb +32 -36
- data/spec/fake_braintree/subscription_spec.rb +33 -16
- data/spec/fake_braintree/transaction_spec.rb +26 -25
- data/spec/fake_braintree/transparent_redirect_spec.rb +21 -21
- data/spec/fake_braintree_spec.rb +23 -22
- data/spec/support/braintree_helpers.rb +4 -4
- data/spec/support/customer_helpers.rb +1 -1
- data/spec/support/subscription_helpers.rb +7 -3
- metadata +27 -41
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e490dbbce81677c05e0eb73532ea5471db948dd7
|
|
4
|
+
data.tar.gz: b5090bfd54c5118b61912bacdc9bcf39956c9109
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3a46b7284f3489ec49d8098f651e83c72f0ce2850f372ce51fcce885b15dced400a5615f5168eabb4974ccde8fb210358a71a8732fc2af25d23c27b184c5bb01
|
|
7
|
+
data.tar.gz: 968a51beab295415d2098710cebe4f327b3f1847f20d6daa6301284df6adf1c7635b318ae137544a47bf6679d1a06e098e00d4276453ab037f6343f2c9061aa9
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
|
@@ -2,3 +2,12 @@ source 'http://rubygems.org'
|
|
|
2
2
|
|
|
3
3
|
# Specify your gem's dependencies in fake_braintree.gemspec
|
|
4
4
|
gemspec
|
|
5
|
+
|
|
6
|
+
# Capybara 2.1.0 requires 1.9.3+ so we install a version that works with
|
|
7
|
+
# every Ruby version we test against. This can be removed if we stop testing
|
|
8
|
+
# against 1.9.2.
|
|
9
|
+
gem 'capybara', '~> 2.0.3'
|
|
10
|
+
|
|
11
|
+
if RUBY_VERSION == '1.9.2'
|
|
12
|
+
gem 'activesupport', '< 4.0'
|
|
13
|
+
end
|
data/NEWS.md
CHANGED
data/README.md
CHANGED
|
@@ -14,34 +14,37 @@ of them (yet).
|
|
|
14
14
|
|
|
15
15
|
## Supported API methods
|
|
16
16
|
|
|
17
|
+
### Address
|
|
18
|
+
* `Braintree::Address.create`
|
|
19
|
+
|
|
20
|
+
### CreditCard
|
|
21
|
+
* `Braintree::CreditCard.create`
|
|
22
|
+
* `Braintree::CreditCard.find`
|
|
23
|
+
* `Braintree::CreditCard.sale`
|
|
24
|
+
* `Braintree::CreditCard.update`
|
|
25
|
+
|
|
17
26
|
### Customer
|
|
18
|
-
* `Braintree::Customer.find`
|
|
19
27
|
* `Braintree::Customer.create` (including adding add-ons and discounts)
|
|
20
|
-
* `Braintree::Customer.update`
|
|
21
28
|
* `Braintree::Customer.delete`
|
|
29
|
+
* `Braintree::Customer.find`
|
|
30
|
+
* `Braintree::Customer.update`
|
|
22
31
|
|
|
23
32
|
### Subscription
|
|
24
|
-
* `Braintree::Subscription.
|
|
33
|
+
* `Braintree::Subscription.cancel`
|
|
25
34
|
* `Braintree::Subscription.create`
|
|
35
|
+
* `Braintree::Subscription.find`
|
|
26
36
|
* `Braintree::Subscription.update`
|
|
27
|
-
* `Braintree::Subscription.
|
|
28
|
-
|
|
29
|
-
### CreditCard
|
|
30
|
-
* `Braintree::CreditCard.find`
|
|
31
|
-
* `Braintree::CreditCard.sale`
|
|
32
|
-
* `Braintree::CreditCard.update`
|
|
37
|
+
* `Braintree::Subscription.retry_charge`
|
|
33
38
|
|
|
34
39
|
### Transaction
|
|
35
|
-
* `Braintree::Transaction.
|
|
40
|
+
* `Braintree::Transaction.find`
|
|
36
41
|
* `Braintree::Transaction.refund`
|
|
42
|
+
* `Braintree::Transaction.sale`
|
|
37
43
|
* `Braintree::Transaction.void`
|
|
38
44
|
|
|
39
45
|
### TransparentRedirect
|
|
40
|
-
* `Braintree::TransparentRedirect.url`
|
|
41
46
|
* `Braintree::TransparentRedirect.confirm` (only for creating customers)
|
|
42
|
-
|
|
43
|
-
### Address
|
|
44
|
-
* `Braintree::Address.create`
|
|
47
|
+
* `Braintree::TransparentRedirect.url`
|
|
45
48
|
|
|
46
49
|
## Quick start
|
|
47
50
|
Just require the library and you're good to go:
|
|
@@ -77,7 +80,7 @@ To use fake\_braintree with Spork, do this:
|
|
|
77
80
|
|
|
78
81
|
# Gemfile
|
|
79
82
|
group :test do
|
|
80
|
-
gem 'fake_braintree', :
|
|
83
|
+
gem 'fake_braintree', require: false
|
|
81
84
|
end
|
|
82
85
|
|
|
83
86
|
# spec/spec_helper.rb
|
|
@@ -147,10 +150,10 @@ call it with no arguments.
|
|
|
147
150
|
|
|
148
151
|
Full example:
|
|
149
152
|
|
|
150
|
-
transaction = FakeBraintree.generate_transaction(:
|
|
151
|
-
:
|
|
152
|
-
:
|
|
153
|
-
:
|
|
153
|
+
transaction = FakeBraintree.generate_transaction(amount: '20.00',
|
|
154
|
+
status: Braintree::Transaction::Status::Settled,
|
|
155
|
+
subscription_id: 'foobar',
|
|
156
|
+
created_at: Time.now + 60)
|
|
154
157
|
p transaction
|
|
155
158
|
# {
|
|
156
159
|
# "status_history" =>
|
data/fake_braintree.gemspec
CHANGED
|
@@ -25,10 +25,6 @@ Gem::Specification.new do |s|
|
|
|
25
25
|
s.add_dependency 'thin'
|
|
26
26
|
|
|
27
27
|
s.add_development_dependency 'rspec', '~> 2.12.0'
|
|
28
|
-
# Capybara 2.1.0 requires 1.9.3+ so we install a version that works with
|
|
29
|
-
# every Ruby version we test against. This can be removed if we stop testing
|
|
30
|
-
# against 1.9.2.
|
|
31
|
-
s.add_development_dependency 'capybara', '~> 2.0.3'
|
|
32
28
|
s.add_development_dependency 'bourne', '~> 1.3'
|
|
33
29
|
s.add_development_dependency 'timecop', '~> 0.6'
|
|
34
30
|
s.add_development_dependency 'rake'
|
|
@@ -34,7 +34,7 @@ module FakeBraintree
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
def to_xml
|
|
37
|
-
@hash.to_xml(:
|
|
37
|
+
@hash.to_xml(root: 'credit_card')
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def valid_number?
|
|
@@ -66,7 +66,7 @@ module FakeBraintree
|
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
def response_for_updated_card
|
|
69
|
-
gzipped_response(200, @hash.to_xml(:
|
|
69
|
+
gzipped_response(200, @hash.to_xml(root: 'credit_card'))
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
def credit_card_exists_in_registry?
|
|
@@ -78,14 +78,14 @@ module FakeBraintree
|
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
def response_for_card_not_found
|
|
81
|
-
gzipped_response(404, FakeBraintree.failure_response.to_xml(:
|
|
81
|
+
gzipped_response(404, FakeBraintree.failure_response.to_xml(root: 'api_error_response'))
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
def response_for_invalid_card
|
|
85
85
|
gzipped_response(422, FakeBraintree.failure_response.merge(
|
|
86
|
-
'params' => {:
|
|
86
|
+
'params' => {credit_card: @hash}
|
|
87
87
|
).
|
|
88
|
-
to_xml(:
|
|
88
|
+
to_xml(root: 'api_error_response'))
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
def expiration_month
|
|
@@ -104,7 +104,7 @@ module FakeBraintree
|
|
|
104
104
|
|
|
105
105
|
def set_default_credit_card(credit_card_hash)
|
|
106
106
|
if credit_card_hash
|
|
107
|
-
CreditCard.new(credit_card_hash, :
|
|
107
|
+
CreditCard.new(credit_card_hash, customer_id: @customer_hash['id'], make_default: true).update
|
|
108
108
|
end
|
|
109
109
|
end
|
|
110
110
|
|
|
@@ -153,11 +153,11 @@ module FakeBraintree
|
|
|
153
153
|
end
|
|
154
154
|
|
|
155
155
|
def response_for_created_customer(hash)
|
|
156
|
-
gzipped_response(201, hash.to_xml(:
|
|
156
|
+
gzipped_response(201, hash.to_xml(root: 'customer'))
|
|
157
157
|
end
|
|
158
158
|
|
|
159
159
|
def response_for_updated_customer(hash)
|
|
160
|
-
gzipped_response(200, hash.to_xml(:
|
|
160
|
+
gzipped_response(200, hash.to_xml(root: 'customer'))
|
|
161
161
|
end
|
|
162
162
|
|
|
163
163
|
def response_for_invalid_card
|
|
@@ -169,7 +169,7 @@ module FakeBraintree
|
|
|
169
169
|
end
|
|
170
170
|
|
|
171
171
|
def failure_response(code)
|
|
172
|
-
gzipped_response(code, FakeBraintree.failure_response(credit_card_number).to_xml(:
|
|
172
|
+
gzipped_response(code, FakeBraintree.failure_response(credit_card_number).to_xml(root: 'api_error_response'))
|
|
173
173
|
end
|
|
174
174
|
|
|
175
175
|
def customer_id
|
|
@@ -19,9 +19,9 @@ module FakeBraintree
|
|
|
19
19
|
|
|
20
20
|
def confirm
|
|
21
21
|
if @kind == 'create_customer'
|
|
22
|
-
Customer.new(@params['customer'], {:
|
|
22
|
+
Customer.new(@params['customer'], {merchant_id: @merchant_id}).create
|
|
23
23
|
elsif @kind == 'create_payment_method'
|
|
24
|
-
credit_card_options = {:
|
|
24
|
+
credit_card_options = {merchant_id: @merchant_id}
|
|
25
25
|
credit_card_options.merge!(@transparent_data['credit_card'].fetch('options', {}))
|
|
26
26
|
|
|
27
27
|
credit_card_options.symbolize_keys!
|
|
@@ -23,7 +23,7 @@ module FakeBraintree
|
|
|
23
23
|
# Braintree::Customer.create
|
|
24
24
|
post '/merchants/:merchant_id/customers' do
|
|
25
25
|
customer_hash = hash_from_request_body_with_key('customer')
|
|
26
|
-
options = {:
|
|
26
|
+
options = {merchant_id: params[:merchant_id]}
|
|
27
27
|
Customer.new(customer_hash, options).create
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -31,7 +31,7 @@ module FakeBraintree
|
|
|
31
31
|
get '/merchants/:merchant_id/customers/:id' do
|
|
32
32
|
customer = FakeBraintree.registry.customers[params[:id]]
|
|
33
33
|
if customer
|
|
34
|
-
gzipped_response(200, customer.to_xml(:
|
|
34
|
+
gzipped_response(200, customer.to_xml(root: 'customer'))
|
|
35
35
|
else
|
|
36
36
|
gzipped_response(404, {})
|
|
37
37
|
end
|
|
@@ -40,28 +40,28 @@ module FakeBraintree
|
|
|
40
40
|
# Braintree::Customer.update
|
|
41
41
|
put '/merchants/:merchant_id/customers/:id' do
|
|
42
42
|
customer_hash = hash_from_request_body_with_key('customer')
|
|
43
|
-
options = {:
|
|
43
|
+
options = {id: params[:id], merchant_id: params[:merchant_id]}
|
|
44
44
|
Customer.new(customer_hash, options).update
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
# Braintree::Customer.delete
|
|
48
48
|
delete '/merchants/:merchant_id/customers/:id' do
|
|
49
49
|
customer_hash = {}
|
|
50
|
-
options = {:
|
|
50
|
+
options = {id: params[:id], merchant_id: params[:merchant_id]}
|
|
51
51
|
Customer.new(customer_hash, options).delete
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
# Braintree::Address.create
|
|
55
55
|
post "/merchants/:merchant_id/customers/:customer_id/addresses" do
|
|
56
56
|
address_hash = hash_from_request_body_with_key('address')
|
|
57
|
-
options = {:
|
|
57
|
+
options = {customer_id: params[:customer_id], merchant_id: params[:merchant_id]}
|
|
58
58
|
Address.new(address_hash, options).create
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
# Braintree::Subscription.create
|
|
62
62
|
post '/merchants/:merchant_id/subscriptions' do
|
|
63
63
|
subscription_hash = hash_from_request_body_with_key('subscription')
|
|
64
|
-
options = {:
|
|
64
|
+
options = {merchant_id: params[:merchant_id]}
|
|
65
65
|
Subscription.new(subscription_hash, options).create
|
|
66
66
|
end
|
|
67
67
|
|
|
@@ -69,7 +69,7 @@ module FakeBraintree
|
|
|
69
69
|
get '/merchants/:merchant_id/subscriptions/:id' do
|
|
70
70
|
subscription = FakeBraintree.registry.subscriptions[params[:id]]
|
|
71
71
|
if subscription
|
|
72
|
-
gzipped_response(200, subscription.to_xml(:
|
|
72
|
+
gzipped_response(200, subscription.to_xml(root: 'subscription'))
|
|
73
73
|
else
|
|
74
74
|
gzipped_response(404, {})
|
|
75
75
|
end
|
|
@@ -78,14 +78,14 @@ module FakeBraintree
|
|
|
78
78
|
# Braintree::Subscription.update
|
|
79
79
|
put '/merchants/:merchant_id/subscriptions/:id' do
|
|
80
80
|
subscription_hash = hash_from_request_body_with_key('subscription')
|
|
81
|
-
options = {:
|
|
81
|
+
options = {id: params[:id], merchant_id: params[:merchant_id]}
|
|
82
82
|
Subscription.new(subscription_hash, options).update
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
# Braintree::Subscription.cancel
|
|
86
86
|
put '/merchants/:merchant_id/subscriptions/:id/cancel' do
|
|
87
87
|
updates = {'status' => Braintree::Subscription::Status::Canceled}
|
|
88
|
-
options = {:
|
|
88
|
+
options = {id: params[:id], merchant_id: params[:merchant_id]}
|
|
89
89
|
Subscription.new(updates, options).update
|
|
90
90
|
end
|
|
91
91
|
|
|
@@ -93,7 +93,7 @@ module FakeBraintree
|
|
|
93
93
|
get '/merchants/:merchant_id/payment_methods/:credit_card_token' do
|
|
94
94
|
credit_card = FakeBraintree.registry.credit_cards[params[:credit_card_token]]
|
|
95
95
|
if credit_card
|
|
96
|
-
gzipped_response(200, credit_card.to_xml(:
|
|
96
|
+
gzipped_response(200, credit_card.to_xml(root: 'credit_card'))
|
|
97
97
|
else
|
|
98
98
|
gzipped_response(404, {})
|
|
99
99
|
end
|
|
@@ -103,14 +103,14 @@ module FakeBraintree
|
|
|
103
103
|
put '/merchants/:merchant_id/payment_methods/: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
|
-
options = {:
|
|
106
|
+
options = {token: params[:credit_card_token], merchant_id: params[:merchant_id]}
|
|
107
107
|
CreditCard.new(updates, options).update
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
# Braintree::CreditCard.create
|
|
111
111
|
post '/merchants/:merchant_id/payment_methods' do
|
|
112
112
|
credit_card_hash = hash_from_request_body_with_key('credit_card')
|
|
113
|
-
options = {:
|
|
113
|
+
options = {merchant_id: params[:merchant_id]}
|
|
114
114
|
|
|
115
115
|
if credit_card_hash['options']
|
|
116
116
|
options.merge!(credit_card_hash.delete('options')).symbolize_keys!
|
|
@@ -123,7 +123,7 @@ module FakeBraintree
|
|
|
123
123
|
# Braintree::CreditCard.sale
|
|
124
124
|
post '/merchants/:merchant_id/transactions' do
|
|
125
125
|
if FakeBraintree.decline_all_cards?
|
|
126
|
-
gzipped_response(422, FakeBraintree.create_failure.to_xml(:
|
|
126
|
+
gzipped_response(422, FakeBraintree.create_failure.to_xml(root: 'api_error_response'))
|
|
127
127
|
else
|
|
128
128
|
transaction = hash_from_request_body_with_key('transaction')
|
|
129
129
|
transaction_id = md5("#{params[:merchant_id]}#{Time.now.to_f}")
|
|
@@ -134,7 +134,7 @@ module FakeBraintree
|
|
|
134
134
|
end
|
|
135
135
|
transaction_response = {'id' => transaction_id, 'amount' => transaction['amount'], 'status' => status, 'type' => 'sale'}
|
|
136
136
|
FakeBraintree.registry.transactions[transaction_id] = transaction_response
|
|
137
|
-
gzipped_response(200, transaction_response.to_xml(:
|
|
137
|
+
gzipped_response(200, transaction_response.to_xml(root: 'transaction'))
|
|
138
138
|
end
|
|
139
139
|
end
|
|
140
140
|
|
|
@@ -142,7 +142,7 @@ module FakeBraintree
|
|
|
142
142
|
get '/merchants/:merchant_id/transactions/:transaction_id' do
|
|
143
143
|
transaction = FakeBraintree.registry.transactions[params[:transaction_id]]
|
|
144
144
|
if transaction
|
|
145
|
-
gzipped_response(200, transaction.to_xml(:
|
|
145
|
+
gzipped_response(200, transaction.to_xml(root: 'transaction'))
|
|
146
146
|
else
|
|
147
147
|
gzipped_response(404, {})
|
|
148
148
|
end
|
|
@@ -154,7 +154,18 @@ module FakeBraintree
|
|
|
154
154
|
transaction_id = md5('#{params[:merchant_id]}#{Time.now.to_f}')
|
|
155
155
|
transaction_response = {'id' => transaction_id, 'amount' => transaction['amount'], 'type' => 'credit'}
|
|
156
156
|
FakeBraintree.registry.transactions[transaction_id] = transaction_response
|
|
157
|
-
gzipped_response(200, transaction_response.to_xml(:
|
|
157
|
+
gzipped_response(200, transaction_response.to_xml(root: 'transaction'))
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
put '/merchants/:merchant_id/transactions/:transaction_id/submit_for_settlement' do
|
|
162
|
+
transaction = FakeBraintree.registry.transactions[params[:transaction_id]]
|
|
163
|
+
transaction_response = {'id' => transaction['id'],
|
|
164
|
+
'type' => transaction['sale'],
|
|
165
|
+
'amount' => transaction['amount'],
|
|
166
|
+
'status' => Braintree::Transaction::Status::SubmittedForSettlement}
|
|
167
|
+
FakeBraintree.registry.transactions[transaction['id']] = transaction_response
|
|
168
|
+
gzipped_response(200, transaction_response.to_xml(root: 'transaction'))
|
|
158
169
|
end
|
|
159
170
|
|
|
160
171
|
# Braintree::Transaction.void
|
|
@@ -165,7 +176,7 @@ module FakeBraintree
|
|
|
165
176
|
'amount' => transaction['amount'],
|
|
166
177
|
'status' => Braintree::Transaction::Status::Voided}
|
|
167
178
|
FakeBraintree.registry.transactions[transaction['id']] = transaction_response
|
|
168
|
-
gzipped_response(200, transaction_response.to_xml(:
|
|
179
|
+
gzipped_response(200, transaction_response.to_xml(root: 'transaction'))
|
|
169
180
|
end
|
|
170
181
|
|
|
171
182
|
# Braintree::TransparentRedirect.url
|
|
@@ -3,9 +3,10 @@ module FakeBraintree
|
|
|
3
3
|
include Helpers
|
|
4
4
|
|
|
5
5
|
def initialize(subscription_hash_from_params, options)
|
|
6
|
+
id = subscription_hash_from_params['id'] || options[:id]
|
|
6
7
|
@subscription_hash = subscription_hash_from_params.merge(
|
|
7
8
|
'merchant_id' => options[:merchant_id],
|
|
8
|
-
'id' =>
|
|
9
|
+
'id' => id
|
|
9
10
|
)
|
|
10
11
|
set_subscription_id
|
|
11
12
|
set_subscription_status
|
|
@@ -98,7 +99,7 @@ module FakeBraintree
|
|
|
98
99
|
end
|
|
99
100
|
|
|
100
101
|
def response_for_created_subscription(hash)
|
|
101
|
-
gzipped_response(201, hash.to_xml(:
|
|
102
|
+
gzipped_response(201, hash.to_xml(root: 'subscription'))
|
|
102
103
|
end
|
|
103
104
|
|
|
104
105
|
def response_for_subscription_not_found
|
|
@@ -106,7 +107,7 @@ module FakeBraintree
|
|
|
106
107
|
end
|
|
107
108
|
|
|
108
109
|
def response_for_created_subscription(hash)
|
|
109
|
-
gzipped_response(201, hash.to_xml(:
|
|
110
|
+
gzipped_response(201, hash.to_xml(root: 'subscription'))
|
|
110
111
|
end
|
|
111
112
|
end
|
|
112
113
|
end
|
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
|
3
3
|
describe "Braintree::Address.create" do
|
|
4
4
|
it "successfully creates address with valid data" do
|
|
5
5
|
result = create_customer
|
|
6
|
-
result = Braintree::Address.create(:
|
|
6
|
+
result = Braintree::Address.create(customer_id: result.customer.id, postal_code: 30339)
|
|
7
7
|
result.should be_success
|
|
8
8
|
end
|
|
9
9
|
end
|
|
@@ -2,21 +2,23 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe 'Braintree::CreditCard.find' do
|
|
4
4
|
it 'gets the correct credit card' do
|
|
5
|
-
|
|
5
|
+
month = '04'
|
|
6
|
+
year = '2016'
|
|
7
|
+
credit_card = Braintree::CreditCard.find(token_for(month, year))
|
|
6
8
|
|
|
7
9
|
credit_card.last_4.should == TEST_CC_NUMBER[-4,4]
|
|
8
10
|
credit_card.expiration_month.should == month
|
|
9
11
|
credit_card.expiration_year.should == year
|
|
10
12
|
end
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
def token_for(month, year)
|
|
15
|
+
braintree_credit_card_token(TEST_CC_NUMBER, [month, year].join('/'))
|
|
16
|
+
end
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
describe 'Braintree::CreditCard.sale' do
|
|
18
20
|
it 'successfully creates a sale' do
|
|
19
|
-
result = Braintree::CreditCard.sale(cc_token, :
|
|
21
|
+
result = Braintree::CreditCard.sale(cc_token, amount: 10.00)
|
|
20
22
|
result.should be_success
|
|
21
23
|
Braintree::Transaction.find(result.transaction.id).should be
|
|
22
24
|
end
|
|
@@ -24,22 +26,6 @@ end
|
|
|
24
26
|
|
|
25
27
|
|
|
26
28
|
describe 'Braintree::CreditCard.create' do
|
|
27
|
-
def build_credit_card_hash
|
|
28
|
-
{
|
|
29
|
-
:customer_id => @customer && @customer.id,
|
|
30
|
-
:number => '4111111111111111',
|
|
31
|
-
:cvv => '123',
|
|
32
|
-
:token => 'token',
|
|
33
|
-
:expiration_date => '07/2020',
|
|
34
|
-
:billing_address => {
|
|
35
|
-
:postal_code => '94110'
|
|
36
|
-
},
|
|
37
|
-
:options => {
|
|
38
|
-
:make_default => true
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
end
|
|
42
|
-
|
|
43
29
|
it 'allows creating a credit card without a customer' do
|
|
44
30
|
result = Braintree::CreditCard.create(build_credit_card_hash)
|
|
45
31
|
result.should be_success
|
|
@@ -55,15 +41,15 @@ describe 'Braintree::CreditCard.create' do
|
|
|
55
41
|
FakeBraintree.decline_all_cards!
|
|
56
42
|
result = Braintree::CreditCard.create(build_credit_card_hash)
|
|
57
43
|
result.should_not be_success
|
|
58
|
-
expect { Braintree::CreditCard.find('token') }.to
|
|
44
|
+
expect { Braintree::CreditCard.find('token') }.to raise_error Braintree::NotFoundError
|
|
59
45
|
FakeBraintree.clear!
|
|
60
46
|
end
|
|
61
47
|
|
|
62
48
|
it 'fails to create a credit card if verify_all_cards is set and card is invalid' do
|
|
63
49
|
FakeBraintree.verify_all_cards!
|
|
64
|
-
result = Braintree::CreditCard.create(build_credit_card_hash.merge(:
|
|
50
|
+
result = Braintree::CreditCard.create(build_credit_card_hash.merge(number: '12345'))
|
|
65
51
|
result.should_not be_success
|
|
66
|
-
expect { Braintree::CreditCard.find('token') }.to
|
|
52
|
+
expect { Braintree::CreditCard.find('token') }.to raise_error Braintree::NotFoundError
|
|
67
53
|
FakeBraintree.verify_all_cards = false
|
|
68
54
|
end
|
|
69
55
|
|
|
@@ -71,7 +57,7 @@ describe 'Braintree::CreditCard.create' do
|
|
|
71
57
|
result = Braintree::CreditCard.create(build_credit_card_hash)
|
|
72
58
|
result.should be_success
|
|
73
59
|
Braintree::Customer.find(@customer.id).credit_cards.last.token.should == 'token'
|
|
74
|
-
Braintree::Customer.find(@customer.id).credit_cards.last.
|
|
60
|
+
Braintree::Customer.find(@customer.id).credit_cards.last.should be_default
|
|
75
61
|
Braintree::Customer.find(@customer.id).credit_cards.last.billing_address.postal_code.should == "94110"
|
|
76
62
|
end
|
|
77
63
|
|
|
@@ -82,10 +68,26 @@ describe 'Braintree::CreditCard.create' do
|
|
|
82
68
|
result.should be_success
|
|
83
69
|
# Reload the customer
|
|
84
70
|
@customer = Braintree::Customer.find(@customer.id)
|
|
85
|
-
@customer.credit_cards.select
|
|
71
|
+
@customer.credit_cards.select(&:default?).length.should == 1
|
|
86
72
|
@customer.credit_cards.length.should == 2
|
|
87
73
|
end
|
|
88
74
|
end
|
|
75
|
+
|
|
76
|
+
def build_credit_card_hash
|
|
77
|
+
{
|
|
78
|
+
customer_id: @customer && @customer.id,
|
|
79
|
+
number: '4111111111111111',
|
|
80
|
+
cvv: '123',
|
|
81
|
+
token: 'token',
|
|
82
|
+
expiration_date: '07/2020',
|
|
83
|
+
billing_address: {
|
|
84
|
+
postal_code: '94110'
|
|
85
|
+
},
|
|
86
|
+
options: {
|
|
87
|
+
make_default: true
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
end
|
|
89
91
|
end
|
|
90
92
|
|
|
91
93
|
describe 'Braintree::CreditCard.update' do
|
|
@@ -93,12 +95,12 @@ describe 'Braintree::CreditCard.update' do
|
|
|
93
95
|
new_expiration_date = '08/2012'
|
|
94
96
|
token = cc_token
|
|
95
97
|
|
|
96
|
-
result = Braintree::CreditCard.update(token, :
|
|
98
|
+
result = Braintree::CreditCard.update(token, expiration_date: new_expiration_date)
|
|
97
99
|
result.should be_success
|
|
98
100
|
Braintree::CreditCard.find(token).expiration_date.should == new_expiration_date
|
|
99
101
|
end
|
|
100
102
|
|
|
101
103
|
it 'raises an error for a nonexistent credit card' do
|
|
102
|
-
|
|
104
|
+
expect { Braintree::CreditCard.update('foo', number: TEST_CC_NUMBER) }.to raise_error(Braintree::NotFoundError)
|
|
103
105
|
end
|
|
104
106
|
end
|