braintree 2.9.1 → 2.10.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.
- data/lib/braintree.rb +1 -0
- data/lib/braintree/error_codes.rb +2 -1
- data/lib/braintree/transaction.rb +3 -2
- data/lib/braintree/transaction/subscription_details.rb +13 -0
- data/lib/braintree/transaction_gateway.rb +1 -1
- data/lib/braintree/version.rb +2 -2
- data/spec/integration/braintree/credit_card_spec.rb +22 -0
- data/spec/integration/braintree/subscription_spec.rb +14 -0
- data/spec/integration/braintree/transaction_spec.rb +78 -0
- metadata +6 -5
data/lib/braintree.rb
CHANGED
@@ -52,6 +52,7 @@ require File.dirname(__FILE__) + "/braintree/transaction"
|
|
52
52
|
require File.dirname(__FILE__) + "/braintree/transaction/address_details"
|
53
53
|
require File.dirname(__FILE__) + "/braintree/transaction/credit_card_details"
|
54
54
|
require File.dirname(__FILE__) + "/braintree/transaction/customer_details"
|
55
|
+
require File.dirname(__FILE__) + "/braintree/transaction/subscription_details"
|
55
56
|
require File.dirname(__FILE__) + "/braintree/transaction_gateway"
|
56
57
|
require File.dirname(__FILE__) + "/braintree/transaction_search"
|
57
58
|
require File.dirname(__FILE__) + "/braintree/transaction/status_details"
|
@@ -7,10 +7,10 @@ module Braintree
|
|
7
7
|
module Address
|
8
8
|
CannotBeBlank = "81801"
|
9
9
|
CompanyIsTooLong = "81802"
|
10
|
-
CountryNameIsNotAccepted = "91803"
|
11
10
|
CountryCodeAlpha2IsNotAccepted = "91814"
|
12
11
|
CountryCodeAlpha3IsNotAccepted = "91816"
|
13
12
|
CountryCodeNumericIsNotAccepted = "91817"
|
13
|
+
CountryNameIsNotAccepted = "91803"
|
14
14
|
ExtendedAddressIsTooLong = "81804"
|
15
15
|
FirstNameIsTooLong = "81805"
|
16
16
|
InconsistentCountry = "91815"
|
@@ -22,6 +22,7 @@ module Braintree
|
|
22
22
|
RegionIsTooLong = "81810"
|
23
23
|
StreetAddressIsRequired = "81811"
|
24
24
|
StreetAddressIsTooLong = "81812"
|
25
|
+
TooManyAddressesPerCustomer = "91818"
|
25
26
|
end
|
26
27
|
|
27
28
|
# See http://www.braintreepaymentsolutions.com/docs/ruby/credit_cards/validations
|
@@ -42,7 +42,7 @@ module Braintree
|
|
42
42
|
end
|
43
43
|
|
44
44
|
attr_reader :avs_error_response_code, :avs_postal_code_response_code, :avs_street_address_response_code
|
45
|
-
attr_reader :amount, :created_at, :credit_card_details, :customer_details, :id
|
45
|
+
attr_reader :amount, :created_at, :credit_card_details, :customer_details, :subscription_details, :id
|
46
46
|
attr_reader :currency_iso_code
|
47
47
|
attr_reader :custom_fields
|
48
48
|
attr_reader :cvv_response_code
|
@@ -155,6 +155,7 @@ module Braintree
|
|
155
155
|
set_instance_variables_from_hash(attributes)
|
156
156
|
@amount = Util.to_big_decimal(amount)
|
157
157
|
@credit_card_details = CreditCardDetails.new(@credit_card)
|
158
|
+
@subscription_details = SubscriptionDetails.new(@subscription)
|
158
159
|
@customer_details = CustomerDetails.new(@customer)
|
159
160
|
@billing_details = AddressDetails.new(@billing)
|
160
161
|
@shipping_details = AddressDetails.new(@shipping)
|
@@ -292,7 +293,7 @@ module Braintree
|
|
292
293
|
end
|
293
294
|
|
294
295
|
def self._attributes # :nodoc:
|
295
|
-
[:amount, :created_at, :credit_card_details, :customer_details, :id, :status, :type, :updated_at]
|
296
|
+
[:amount, :created_at, :credit_card_details, :customer_details, :id, :status, :subscription_details, :type, :updated_at]
|
296
297
|
end
|
297
298
|
end
|
298
299
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Braintree
|
2
|
+
class Transaction
|
3
|
+
class SubscriptionDetails # :nodoc:
|
4
|
+
include BaseModule
|
5
|
+
|
6
|
+
attr_reader :billing_period_start_date, :billing_period_end_date
|
7
|
+
|
8
|
+
def initialize(attributes)
|
9
|
+
set_instance_variables_from_hash attributes unless attributes.nil?
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -99,7 +99,7 @@ module Braintree
|
|
99
99
|
{
|
100
100
|
:shipping => AddressGateway._shared_signature
|
101
101
|
},
|
102
|
-
{:options => [:store_in_vault, :submit_for_settlement, :add_billing_address_to_payment_method, :store_shipping_address_in_vault]},
|
102
|
+
{:options => [:store_in_vault, :store_in_vault_on_success, :submit_for_settlement, :add_billing_address_to_payment_method, :store_shipping_address_in_vault]},
|
103
103
|
{:custom_fields => :_any_key_},
|
104
104
|
{:descriptor => [:name, :phone]}
|
105
105
|
]
|
data/lib/braintree/version.rb
CHANGED
@@ -947,6 +947,28 @@ describe Braintree::CreditCard do
|
|
947
947
|
result.transaction.credit_card_details.last_4.should == Braintree::Test::CreditCardNumbers::Visa[-4..-1]
|
948
948
|
result.transaction.credit_card_details.expiration_date.should == "05/2010"
|
949
949
|
end
|
950
|
+
|
951
|
+
it "allows passing a cvv in addition to the token" do
|
952
|
+
customer = Braintree::Customer.create!(
|
953
|
+
:credit_card => {
|
954
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
955
|
+
:expiration_date => "05/2010"
|
956
|
+
}
|
957
|
+
)
|
958
|
+
result = Braintree::CreditCard.sale(customer.credit_cards[0].token,
|
959
|
+
:amount => "100.00",
|
960
|
+
:credit_card => {
|
961
|
+
:cvv => "301"
|
962
|
+
}
|
963
|
+
)
|
964
|
+
|
965
|
+
result.success?.should == true
|
966
|
+
result.transaction.amount.should == BigDecimal.new("100.00")
|
967
|
+
result.transaction.type.should == "sale"
|
968
|
+
result.transaction.customer_details.id.should == customer.id
|
969
|
+
result.transaction.credit_card_details.token.should == customer.credit_cards[0].token
|
970
|
+
result.transaction.cvv_response_code.should == "S"
|
971
|
+
end
|
950
972
|
end
|
951
973
|
|
952
974
|
describe "self.sale!" do
|
@@ -36,6 +36,20 @@ describe Braintree::Subscription do
|
|
36
36
|
result.subscription.payment_method_token.should == @credit_card.token
|
37
37
|
end
|
38
38
|
|
39
|
+
it "returns a transaction with billing period populated" do
|
40
|
+
result = Braintree::Subscription.create(
|
41
|
+
:payment_method_token => @credit_card.token,
|
42
|
+
:plan_id => SpecHelper::TriallessPlan[:id]
|
43
|
+
)
|
44
|
+
|
45
|
+
result.success?.should == true
|
46
|
+
subscription = result.subscription
|
47
|
+
transaction = subscription.transactions.first
|
48
|
+
|
49
|
+
transaction.subscription_details.billing_period_start_date.should == subscription.billing_period_start_date
|
50
|
+
transaction.subscription_details.billing_period_end_date.should == subscription.billing_period_end_date
|
51
|
+
end
|
52
|
+
|
39
53
|
it "can set the id" do
|
40
54
|
new_id = rand(36**9).to_s(36)
|
41
55
|
result = Braintree::Subscription.create(
|
@@ -598,6 +598,84 @@ describe Braintree::Transaction do
|
|
598
598
|
result.errors.for(:transaction).on(:purchase_order_number)[0].code.should == Braintree::ErrorCodes::Transaction::PurchaseOrderNumberIsTooLong
|
599
599
|
end
|
600
600
|
end
|
601
|
+
|
602
|
+
context "store_in_vault_on_success" do
|
603
|
+
context "passed as true" do
|
604
|
+
it "stores vault records when transaction succeeds" do
|
605
|
+
result = Braintree::Transaction.create(
|
606
|
+
:type => "sale",
|
607
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
608
|
+
:customer => {
|
609
|
+
:last_name => "Doe"
|
610
|
+
},
|
611
|
+
:credit_card => {
|
612
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
613
|
+
:expiration_date => "12/12",
|
614
|
+
},
|
615
|
+
:options => { :store_in_vault_on_success => true }
|
616
|
+
)
|
617
|
+
result.success?.should == true
|
618
|
+
result.transaction.vault_customer.last_name.should == "Doe"
|
619
|
+
result.transaction.vault_credit_card.masked_number.should == "401288******1881"
|
620
|
+
end
|
621
|
+
|
622
|
+
it "does not store vault records when true and transaction fails" do
|
623
|
+
result = Braintree::Transaction.create(
|
624
|
+
:type => "sale",
|
625
|
+
:amount => Braintree::Test::TransactionAmounts::Decline,
|
626
|
+
:customer => {
|
627
|
+
:last_name => "Doe"
|
628
|
+
},
|
629
|
+
:credit_card => {
|
630
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
631
|
+
:expiration_date => "12/12",
|
632
|
+
},
|
633
|
+
:options => { :store_in_vault_on_success => true }
|
634
|
+
)
|
635
|
+
result.success?.should == false
|
636
|
+
result.transaction.vault_customer.should be_nil
|
637
|
+
result.transaction.vault_credit_card.should be_nil
|
638
|
+
end
|
639
|
+
end
|
640
|
+
|
641
|
+
context "passed as false" do
|
642
|
+
it "does not store vault records when transaction succeeds" do
|
643
|
+
result = Braintree::Transaction.create(
|
644
|
+
:type => "sale",
|
645
|
+
:amount => Braintree::Test::TransactionAmounts::Authorize,
|
646
|
+
:customer => {
|
647
|
+
:last_name => "Doe"
|
648
|
+
},
|
649
|
+
:credit_card => {
|
650
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
651
|
+
:expiration_date => "12/12",
|
652
|
+
},
|
653
|
+
:options => { :store_in_vault_on_success => false }
|
654
|
+
)
|
655
|
+
result.success?.should == true
|
656
|
+
result.transaction.vault_customer.should be_nil
|
657
|
+
result.transaction.vault_credit_card.should be_nil
|
658
|
+
end
|
659
|
+
|
660
|
+
it "does not store vault records when transaction fails" do
|
661
|
+
result = Braintree::Transaction.create(
|
662
|
+
:type => "sale",
|
663
|
+
:amount => Braintree::Test::TransactionAmounts::Decline,
|
664
|
+
:customer => {
|
665
|
+
:last_name => "Doe"
|
666
|
+
},
|
667
|
+
:credit_card => {
|
668
|
+
:number => Braintree::Test::CreditCardNumbers::Visa,
|
669
|
+
:expiration_date => "12/12",
|
670
|
+
},
|
671
|
+
:options => { :store_in_vault_on_success => false }
|
672
|
+
)
|
673
|
+
result.success?.should == false
|
674
|
+
result.transaction.vault_customer.should be_nil
|
675
|
+
result.transaction.vault_credit_card.should be_nil
|
676
|
+
end
|
677
|
+
end
|
678
|
+
end
|
601
679
|
end
|
602
680
|
|
603
681
|
describe "self.create!" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: braintree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 39
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 2.
|
8
|
+
- 10
|
9
|
+
- 0
|
10
|
+
version: 2.10.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Braintree Payment Solutions
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-04-26 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -77,6 +77,7 @@ files:
|
|
77
77
|
- lib/braintree/transaction/credit_card_details.rb
|
78
78
|
- lib/braintree/transaction/customer_details.rb
|
79
79
|
- lib/braintree/transaction/status_details.rb
|
80
|
+
- lib/braintree/transaction/subscription_details.rb
|
80
81
|
- lib/braintree/transaction.rb
|
81
82
|
- lib/braintree/transaction_gateway.rb
|
82
83
|
- lib/braintree/transaction_search.rb
|