braintree-rails 0.0.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.
- data/Gemfile +10 -0
- data/Gemfile.lock +34 -0
- data/README.md +2 -0
- data/Rakefile +4 -0
- data/braintree-rails.gemspec +18 -0
- data/lib/braintree-rails.rb +17 -0
- data/lib/braintree_rails/address.rb +75 -0
- data/lib/braintree_rails/addresses.rb +24 -0
- data/lib/braintree_rails/credit_card.rb +67 -0
- data/lib/braintree_rails/credit_cards.rb +24 -0
- data/lib/braintree_rails/customer.rb +37 -0
- data/lib/braintree_rails/exceptions.rb +2 -0
- data/lib/braintree_rails/model.rb +192 -0
- data/lib/env.rb +3 -0
- data/lib/tasks/test.rake +18 -0
- data/lib/test_env.rb +4 -0
- data/log/braintree_test.log +225696 -0
- data/test/config/braintree_auth.yml +4 -0
- data/test/config/braintree_auth.yml.example +4 -0
- data/test/fixtures/address.xml +19 -0
- data/test/fixtures/credit_card.xml +36 -0
- data/test/fixtures/credit_card_validation_error.xml +26 -0
- data/test/fixtures/customer.xml +90 -0
- data/test/integration/braintree_rails/address_integration_test.rb +72 -0
- data/test/integration/braintree_rails/credit_card_integration_test.rb +147 -0
- data/test/integration/braintree_rails/customer_integration_test.rb +41 -0
- data/test/integration/integration_test_helper.rb +13 -0
- data/test/test_helper.rb +28 -0
- data/test/unit/braintree_rails/address_test.rb +87 -0
- data/test/unit/braintree_rails/addresses_test.rb +38 -0
- data/test/unit/braintree_rails/credit_card_test.rb +240 -0
- data/test/unit/braintree_rails/credit_cards_test.rb +38 -0
- data/test/unit/braintree_rails/customer_test.rb +171 -0
- data/test/unit/unit_test_helper.rb +3 -0
- metadata +176 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../test_helper'))
|
2
|
+
config = File.join(TEST_PATH, 'config/braintree_auth.yml')
|
3
|
+
if auth = YAML.load_file(config)
|
4
|
+
Braintree::Configuration.environment = :sandbox
|
5
|
+
Braintree::Configuration.merchant_id = auth['merchant_id']
|
6
|
+
Braintree::Configuration.public_key = auth['public_key']
|
7
|
+
Braintree::Configuration.private_key = auth['private_key']
|
8
|
+
else
|
9
|
+
puts '*' * 80
|
10
|
+
puts "You need to provide real credentials in #{config} to run integration tests"
|
11
|
+
puts '*' * 80
|
12
|
+
exit(0)
|
13
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../lib/test_env'))
|
2
|
+
|
3
|
+
TEST_PATH = File.expand_path(File.dirname(__FILE__))
|
4
|
+
FIXTURE_PATH = File.join(TEST_PATH, 'fixtures')
|
5
|
+
|
6
|
+
Braintree::Configuration.environment = :sandbox
|
7
|
+
Braintree::Configuration.merchant_id = 'merchant_id'
|
8
|
+
Braintree::Configuration.public_key = 'public_key'
|
9
|
+
Braintree::Configuration.private_key = 'private_key'
|
10
|
+
Braintree::Configuration.logger = Logger.new(File.join(ROOT_PATH, 'log/braintree_test.log'))
|
11
|
+
BraintreeBaseUri = "https://#{Braintree::Configuration.public_key}:#{Braintree::Configuration.private_key}@#{Braintree::Configuration.environment}.braintreegateway.com/merchants/#{Braintree::Configuration.merchant_id}"
|
12
|
+
|
13
|
+
MiniTest::Unit::TestCase.class_eval do
|
14
|
+
def fixture(name)
|
15
|
+
File.read(File.join(FIXTURE_PATH, name)).gzip
|
16
|
+
end
|
17
|
+
|
18
|
+
def stub_braintree_request(method, path, response)
|
19
|
+
response = response.reverse_merge(:headers => {'Content-Type' => ['application/xml', 'charset=utf-8'], 'Content-Encoding' => 'gzip'})
|
20
|
+
stub_request(method, BraintreeBaseUri+path).to_return(response)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
String.class_eval do
|
25
|
+
def gzip
|
26
|
+
Zlib::GzipWriter.wrap(StringIO.new(gzipped = '')) { |gz| gz.write(self); gzipped }
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../unit_test_helper'))
|
2
|
+
|
3
|
+
describe BraintreeRails::Address do
|
4
|
+
describe '#initialize' do
|
5
|
+
before do
|
6
|
+
stub_braintree_request(:get, '/customers/customer_id', :body => fixture('customer.xml'))
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should wrap a Braintree::Address' do
|
10
|
+
braintree_address = Braintree::Customer.find('customer_id').addresses.first
|
11
|
+
address = BraintreeRails::Address.new(braintree_address)
|
12
|
+
|
13
|
+
address.persisted?.must_equal true
|
14
|
+
BraintreeRails::Address::Attributes.each do |attribute|
|
15
|
+
address.send(attribute).must_equal braintree_address.send(attribute)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should extract values from hash' do
|
20
|
+
address = BraintreeRails::Address.new(:id => 'new_id')
|
21
|
+
|
22
|
+
address.persisted?.must_equal false
|
23
|
+
address.id.must_equal 'new_id'
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should try to extract value from other types' do
|
27
|
+
address = BraintreeRails::Address.new(OpenStruct.new(:id => 'foobar', :first_name => 'Foo', :last_name => 'Bar', :persisted? => true))
|
28
|
+
|
29
|
+
address.persisted?.must_equal true
|
30
|
+
address.id.must_equal 'foobar'
|
31
|
+
address.first_name.must_equal 'Foo'
|
32
|
+
address.last_name.must_equal 'Bar'
|
33
|
+
|
34
|
+
address = BraintreeRails::Address.new(Object.new)
|
35
|
+
address.persisted?.must_equal false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe 'country_code_alpha2' do
|
40
|
+
it 'should always convert to country_code_alpha2' do
|
41
|
+
{:country_name => 'United States of America', :country_code_alpha3 => 'USA', :country_code_numeric => '840'}.each_pair do |key, value|
|
42
|
+
address = BraintreeRails::Address.new(key => value)
|
43
|
+
address.country_code_alpha2.must_equal 'US'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe 'validations' do
|
49
|
+
[:first_name, :last_name, :company, :street_address, :extended_address, :locality, :region].each do |attribute|
|
50
|
+
it "should validate length of #{attribute}" do
|
51
|
+
address = BraintreeRails::Address.new(attribute => 'f')
|
52
|
+
address.valid?
|
53
|
+
address.errors[attribute].must_be :blank?
|
54
|
+
|
55
|
+
address = BraintreeRails::Address.new(attribute => 'f' * 255)
|
56
|
+
address.valid?
|
57
|
+
address.errors[attribute].must_be :blank?
|
58
|
+
|
59
|
+
address = BraintreeRails::Address.new(attribute => 'foo' * 256)
|
60
|
+
address.valid?
|
61
|
+
address.errors[attribute].wont_be :blank?
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
[:street_address, :postal_code].each do |attribute|
|
66
|
+
it "should validate presence of #{attribute}" do
|
67
|
+
address = BraintreeRails::Address.new(attribute => 'foo')
|
68
|
+
address.valid?
|
69
|
+
address.errors[attribute].must_be :blank?
|
70
|
+
|
71
|
+
address = BraintreeRails::Address.new({})
|
72
|
+
address.valid?
|
73
|
+
address.errors[attribute].wont_be :blank?
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should validate format of postal_code' do
|
78
|
+
address = BraintreeRails::Address.new({:postal_code => 'CA 94025'})
|
79
|
+
address.valid?
|
80
|
+
address.errors[:postal_code].must_be :blank?
|
81
|
+
|
82
|
+
address = BraintreeRails::Address.new({:postal_code => '^$'})
|
83
|
+
address.valid?
|
84
|
+
address.errors[:postal_code].wont_be :blank?
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../unit_test_helper'))
|
2
|
+
|
3
|
+
describe BraintreeRails::Addresses do
|
4
|
+
before do
|
5
|
+
stub_braintree_request(:get, '/customers/customer_id', :body => fixture('customer.xml'))
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '#initialize' do
|
9
|
+
it 'should wrap an array of Braintree::Address' do
|
10
|
+
braintree_customer = Braintree::Customer.find('customer_id')
|
11
|
+
braintree_addresses = braintree_customer.addresses
|
12
|
+
addresses = BraintreeRails::Addresses.new(braintree_customer, braintree_addresses)
|
13
|
+
|
14
|
+
addresses.size.must_equal braintree_addresses.size
|
15
|
+
|
16
|
+
braintree_addresses.each do |braintree_address|
|
17
|
+
address = addresses.find(braintree_address.id)
|
18
|
+
BraintreeRails::Address::Attributes.each do |attribute|
|
19
|
+
address.send(attribute).must_equal braintree_address.send(attribute)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#build' do
|
26
|
+
it 'should build new Address object with customer_id and params' do
|
27
|
+
braintree_customer = Braintree::Customer.find('customer_id')
|
28
|
+
braintree_addresses = braintree_customer.addresses
|
29
|
+
addresses = BraintreeRails::Addresses.new(braintree_customer, braintree_addresses)
|
30
|
+
address = addresses.build({:first_name => 'foo', :last_name => 'bar'})
|
31
|
+
|
32
|
+
address.persisted?.must_equal false
|
33
|
+
address.customer_id.must_equal braintree_customer.id
|
34
|
+
address.first_name.must_equal 'foo'
|
35
|
+
address.last_name.must_equal 'bar'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,240 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../unit_test_helper'))
|
2
|
+
|
3
|
+
describe BraintreeRails::CreditCard do
|
4
|
+
before do
|
5
|
+
stub_braintree_request(:get, '/payment_methods/credit_card_id', :body => fixture('credit_card.xml'))
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '#initialize' do
|
9
|
+
it 'should find credit_card from braintree when given a credit_card id' do
|
10
|
+
credit_card = BraintreeRails::CreditCard.new('credit_card_id')
|
11
|
+
braintree_credit_card = Braintree::CreditCard.find('credit_card_id')
|
12
|
+
|
13
|
+
credit_card.persisted?.must_equal true
|
14
|
+
BraintreeRails::CreditCard::Attributes.each do |attribute|
|
15
|
+
credit_card.send(attribute).must_equal(braintree_credit_card.send(attribute)) if braintree_credit_card.respond_to?(attribute)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should wrap a Braintree::CreditCard' do
|
20
|
+
braintree_credit_card = Braintree::CreditCard.find('credit_card_id')
|
21
|
+
credit_card = BraintreeRails::CreditCard.new(braintree_credit_card)
|
22
|
+
|
23
|
+
credit_card.persisted?.must_equal true
|
24
|
+
BraintreeRails::CreditCard::Attributes.each do |attribute|
|
25
|
+
credit_card.send(attribute).must_equal(braintree_credit_card.send(attribute)) if braintree_credit_card.respond_to?(attribute)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should extract values from hash' do
|
30
|
+
credit_card = BraintreeRails::CreditCard.new(:token => 'new_id')
|
31
|
+
|
32
|
+
credit_card.persisted?.must_equal false
|
33
|
+
credit_card.token.must_equal 'new_id'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should try to extract value from other types' do
|
37
|
+
credit_card = BraintreeRails::CreditCard.new(OpenStruct.new(:token => 'foobar', :cardholder_name => 'Foo Bar', :persisted? => true))
|
38
|
+
|
39
|
+
credit_card.persisted?.must_equal true
|
40
|
+
credit_card.token.must_equal 'foobar'
|
41
|
+
credit_card.cardholder_name.must_equal 'Foo Bar'
|
42
|
+
|
43
|
+
credit_card = BraintreeRails::CreditCard.new(OpenStruct.new({}))
|
44
|
+
credit_card.persisted?.must_equal false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#billing_address' do
|
49
|
+
it 'should wrap billing_address with Address object' do
|
50
|
+
credit_card = BraintreeRails::CreditCard.new(OpenStruct.new(:billing_address => nil))
|
51
|
+
credit_card.billing_address.class.ancestors.must_include BraintreeRails::Address
|
52
|
+
|
53
|
+
credit_card = BraintreeRails::CreditCard.new(OpenStruct.new(:billing_address => {}))
|
54
|
+
credit_card.billing_address.class.ancestors.must_include BraintreeRails::Address
|
55
|
+
|
56
|
+
credit_card.billing_address= BraintreeRails::Address.new({})
|
57
|
+
credit_card.billing_address.class.ancestors.must_include BraintreeRails::Address
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'validations' do
|
62
|
+
it 'should validate precence of customer_id if new_record?' do
|
63
|
+
credit_card = BraintreeRails::CreditCard.new({})
|
64
|
+
credit_card.valid?
|
65
|
+
credit_card.errors[:customer_id].wont_be :blank?
|
66
|
+
|
67
|
+
credit_card = BraintreeRails::CreditCard.new({:customer_id => 'foo'})
|
68
|
+
credit_card.valid?
|
69
|
+
credit_card.errors[:customer_id].must_be :blank?
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'should validate length of customer_id' do
|
73
|
+
credit_card = BraintreeRails::CreditCard.new({:customer_id => 'foo' * 13})
|
74
|
+
credit_card.valid?
|
75
|
+
credit_card.errors[:customer_id].wont_be :blank?
|
76
|
+
|
77
|
+
credit_card = BraintreeRails::CreditCard.new({:customer_id => 'foo'})
|
78
|
+
credit_card.valid?
|
79
|
+
credit_card.errors[:customer_id].must_be :blank?
|
80
|
+
|
81
|
+
credit_card = BraintreeRails::CreditCard.new({:customer_id => 'foo' * 12})
|
82
|
+
credit_card.valid?
|
83
|
+
credit_card.errors[:customer_id].must_be :blank?
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should validate precence of number if new_record?' do
|
87
|
+
credit_card = BraintreeRails::CreditCard.new({})
|
88
|
+
credit_card.valid?
|
89
|
+
credit_card.errors[:number].wont_be :blank?
|
90
|
+
|
91
|
+
credit_card = BraintreeRails::CreditCard.new({:number => '4111111111111'})
|
92
|
+
credit_card.valid?
|
93
|
+
credit_card.errors[:number].must_be :blank?
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'should validate numericality of number' do
|
97
|
+
credit_card = BraintreeRails::CreditCard.new({:number => 'foobar'})
|
98
|
+
credit_card.valid?
|
99
|
+
credit_card.errors[:number].wont_be :blank?
|
100
|
+
|
101
|
+
credit_card = BraintreeRails::CreditCard.new({:number => '4111111111111'})
|
102
|
+
credit_card.valid?
|
103
|
+
credit_card.errors[:number].must_be :blank?
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should validate length of number' do
|
107
|
+
credit_card = BraintreeRails::CreditCard.new({:number => '1'})
|
108
|
+
credit_card.valid?
|
109
|
+
credit_card.errors[:number].wont_be :blank?
|
110
|
+
|
111
|
+
credit_card = BraintreeRails::CreditCard.new({:number => '1' * 20})
|
112
|
+
credit_card.valid?
|
113
|
+
credit_card.errors[:number].wont_be :blank?
|
114
|
+
|
115
|
+
credit_card = BraintreeRails::CreditCard.new({:number => '1' * 12})
|
116
|
+
credit_card.valid?
|
117
|
+
credit_card.errors[:number].must_be :blank?
|
118
|
+
|
119
|
+
credit_card = BraintreeRails::CreditCard.new({:number => '1' * 19})
|
120
|
+
credit_card.valid?
|
121
|
+
credit_card.errors[:number].must_be :blank?
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'should validate precence of cvv' do
|
125
|
+
credit_card = BraintreeRails::CreditCard.new({})
|
126
|
+
credit_card.valid?
|
127
|
+
credit_card.errors[:cvv].wont_be :blank?
|
128
|
+
|
129
|
+
credit_card = BraintreeRails::CreditCard.new({:cvv => '111'})
|
130
|
+
credit_card.valid?
|
131
|
+
credit_card.errors[:cvv].must_be :blank?
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'should validate numericality of cvv' do
|
135
|
+
credit_card = BraintreeRails::CreditCard.new({:cvv => 'foo'})
|
136
|
+
credit_card.valid?
|
137
|
+
credit_card.errors[:cvv].wont_be :blank?
|
138
|
+
|
139
|
+
credit_card = BraintreeRails::CreditCard.new({:cvv => '111'})
|
140
|
+
credit_card.valid?
|
141
|
+
credit_card.errors[:cvv].must_be :blank?
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'should validate length of cvv' do
|
145
|
+
credit_card = BraintreeRails::CreditCard.new({:cvv => '1'})
|
146
|
+
credit_card.valid?
|
147
|
+
credit_card.errors[:cvv].wont_be :blank?
|
148
|
+
|
149
|
+
credit_card = BraintreeRails::CreditCard.new({:cvv => '1' * 5})
|
150
|
+
credit_card.valid?
|
151
|
+
credit_card.errors[:cvv].wont_be :blank?
|
152
|
+
|
153
|
+
credit_card = BraintreeRails::CreditCard.new({:cvv => '111'})
|
154
|
+
credit_card.valid?
|
155
|
+
credit_card.errors[:cvv].must_be :blank?
|
156
|
+
|
157
|
+
credit_card = BraintreeRails::CreditCard.new({:cvv => '1111'})
|
158
|
+
credit_card.valid?
|
159
|
+
credit_card.errors[:cvv].must_be :blank?
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'should validate length of cardholder_name' do
|
163
|
+
credit_card = BraintreeRails::CreditCard.new({:cardholder_name => 'f' * 256})
|
164
|
+
credit_card.valid?
|
165
|
+
credit_card.errors[:cardholder_name].wont_be :blank?
|
166
|
+
|
167
|
+
credit_card = BraintreeRails::CreditCard.new({:cardholder_name => 'f'})
|
168
|
+
credit_card.valid?
|
169
|
+
credit_card.errors[:cardholder_name].must_be :blank?
|
170
|
+
|
171
|
+
credit_card = BraintreeRails::CreditCard.new({:cardholder_name => 'f' * 255})
|
172
|
+
credit_card.valid?
|
173
|
+
credit_card.errors[:cardholder_name].must_be :blank?
|
174
|
+
end
|
175
|
+
|
176
|
+
it 'should validate expiration month' do
|
177
|
+
credit_card = BraintreeRails::CreditCard.new({})
|
178
|
+
credit_card.valid?
|
179
|
+
credit_card.errors[:expiration_month].wont_be :blank?
|
180
|
+
|
181
|
+
credit_card = BraintreeRails::CreditCard.new({:expiration_month => 0})
|
182
|
+
credit_card.valid?
|
183
|
+
credit_card.errors[:expiration_month].wont_be :blank?
|
184
|
+
|
185
|
+
credit_card = BraintreeRails::CreditCard.new({:expiration_month => 13})
|
186
|
+
credit_card.valid?
|
187
|
+
credit_card.errors[:expiration_month].wont_be :blank?
|
188
|
+
|
189
|
+
credit_card = BraintreeRails::CreditCard.new({:expiration_month => 1})
|
190
|
+
credit_card.valid?
|
191
|
+
credit_card.errors[:expiration_month].must_be :blank?
|
192
|
+
|
193
|
+
credit_card = BraintreeRails::CreditCard.new({:expiration_month => '12'})
|
194
|
+
credit_card.valid?
|
195
|
+
credit_card.errors[:expiration_month].must_be :blank?
|
196
|
+
end
|
197
|
+
|
198
|
+
it 'should validate expiration year' do
|
199
|
+
credit_card = BraintreeRails::CreditCard.new({})
|
200
|
+
credit_card.valid?
|
201
|
+
credit_card.errors[:expiration_year].wont_be :blank?
|
202
|
+
|
203
|
+
credit_card = BraintreeRails::CreditCard.new({:expiration_year => 1975})
|
204
|
+
credit_card.valid?
|
205
|
+
credit_card.errors[:expiration_year].wont_be :blank?
|
206
|
+
|
207
|
+
credit_card = BraintreeRails::CreditCard.new({:expiration_year => 2201})
|
208
|
+
credit_card.valid?
|
209
|
+
credit_card.errors[:expiration_year].wont_be :blank?
|
210
|
+
|
211
|
+
credit_card = BraintreeRails::CreditCard.new({:expiration_year => 1976})
|
212
|
+
credit_card.valid?
|
213
|
+
credit_card.errors[:expiration_year].must_be :blank?
|
214
|
+
|
215
|
+
credit_card = BraintreeRails::CreditCard.new({:expiration_year => '2200'})
|
216
|
+
credit_card.valid?
|
217
|
+
credit_card.errors[:expiration_year].must_be :blank?
|
218
|
+
end
|
219
|
+
|
220
|
+
it 'should validate billing_address' do
|
221
|
+
credit_card = BraintreeRails::CreditCard.new({:billing_address => OpenStruct.new(:valid? => false)})
|
222
|
+
credit_card.valid?
|
223
|
+
credit_card.errors[:billing_address].wont_be :blank?
|
224
|
+
|
225
|
+
braintree_credit_card = Braintree::CreditCard.find('credit_card_id')
|
226
|
+
credit_card = BraintreeRails::CreditCard.new(:billing_address => braintree_credit_card.billing_address)
|
227
|
+
credit_card.valid?
|
228
|
+
credit_card.errors[:billing_address].must_be :blank?
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
describe 'persistence' do
|
233
|
+
it 'should add validation errors returned from Braintree' do
|
234
|
+
stub_braintree_request(:put, '/payment_methods/credit_card_id', :status => 422, :body => fixture('credit_card_validation_error.xml'))
|
235
|
+
credit_card = BraintreeRails::CreditCard.new('credit_card_id')
|
236
|
+
credit_card.update_attributes(:number => '1' * 15, :cvv => '111')
|
237
|
+
credit_card.errors[:number].wont_be :blank?
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '../unit_test_helper'))
|
2
|
+
|
3
|
+
describe BraintreeRails::CreditCards do
|
4
|
+
before do
|
5
|
+
stub_braintree_request(:get, '/customers/customer_id', :body => fixture('customer.xml'))
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '#initialize' do
|
9
|
+
it 'should wrap an array of Braintree::CreditCard' do
|
10
|
+
braintree_customer = Braintree::Customer.find('customer_id')
|
11
|
+
braintree_credit_cards = braintree_customer.credit_cards
|
12
|
+
credit_cards = BraintreeRails::CreditCards.new(braintree_customer, braintree_credit_cards)
|
13
|
+
|
14
|
+
credit_cards.size.must_equal braintree_credit_cards.size
|
15
|
+
|
16
|
+
braintree_credit_cards.each do |braintree_credit_card|
|
17
|
+
credit_card = credit_cards.find(braintree_credit_card.token)
|
18
|
+
BraintreeRails::CreditCard::Attributes.each do |attribute|
|
19
|
+
credit_card.send(attribute).must_equal braintree_credit_card.send(attribute) if braintree_credit_card.respond_to?(attribute)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#build' do
|
26
|
+
it 'should build new CreditCard object with customer_id and params' do
|
27
|
+
braintree_customer = Braintree::Customer.find('customer_id')
|
28
|
+
braintree_credit_cards = braintree_customer.credit_cards
|
29
|
+
credit_cards = BraintreeRails::CreditCards.new(braintree_customer, braintree_credit_cards)
|
30
|
+
credit_card = credit_cards.build({:first_name => 'foo', :last_name => 'bar'})
|
31
|
+
|
32
|
+
credit_card.persisted?.must_equal false
|
33
|
+
credit_card.customer_id.must_equal braintree_customer.id
|
34
|
+
credit_card.first_name.must_equal 'foo'
|
35
|
+
credit_card.last_name.must_equal 'bar'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|