braintree 4.21.0 → 4.23.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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/lib/braintree/client_token_gateway.rb +2 -2
  3. data/lib/braintree/configuration.rb +1 -1
  4. data/lib/braintree/credit_card_gateway.rb +1 -0
  5. data/lib/braintree/credit_card_verification.rb +16 -12
  6. data/lib/braintree/customer.rb +2 -1
  7. data/lib/braintree/customer_gateway.rb +2 -0
  8. data/lib/braintree/error_codes.rb +3 -0
  9. data/lib/braintree/local_payment_completed/blik_alias.rb +23 -0
  10. data/lib/braintree/local_payment_completed.rb +6 -1
  11. data/lib/braintree/payment_instrument_type.rb +1 -0
  12. data/lib/braintree/payment_method_gateway.rb +3 -0
  13. data/lib/braintree/payment_method_parser.rb +1 -0
  14. data/lib/braintree/paypal_account.rb +1 -0
  15. data/lib/braintree/samsung_pay_card.rb +2 -0
  16. data/lib/braintree/test/nonce.rb +1 -0
  17. data/lib/braintree/transaction/local_payment_details.rb +1 -0
  18. data/lib/braintree/transaction/samsung_pay_card_details.rb +2 -0
  19. data/lib/braintree/transaction.rb +3 -1
  20. data/lib/braintree/transaction_gateway.rb +48 -46
  21. data/lib/braintree/version.rb +1 -1
  22. data/lib/braintree/webhook_testing_gateway.rb +36 -0
  23. data/lib/braintree.rb +1 -0
  24. data/lib/ssl/api_braintreegateway_com.ca.crt +401 -168
  25. data/spec/integration/braintree/apple_pay_spec.rb +1 -1
  26. data/spec/integration/braintree/client_api/client_token_spec.rb +229 -38
  27. data/spec/integration/braintree/credit_card_spec.rb +2 -2
  28. data/spec/integration/braintree/credit_card_verification_spec.rb +20 -1
  29. data/spec/integration/braintree/customer_spec.rb +23 -2
  30. data/spec/integration/braintree/merchant_account_spec.rb +2 -2
  31. data/spec/integration/braintree/merchant_spec.rb +17 -138
  32. data/spec/integration/braintree/payment_method_spec.rb +29 -2
  33. data/spec/integration/braintree/paypal_account_spec.rb +1 -0
  34. data/spec/integration/braintree/samsung_pay_card_spec.rb +3 -1
  35. data/spec/integration/braintree/transaction_spec.rb +56 -22
  36. data/spec/unit/braintree/client_token_spec.rb +1 -1
  37. data/spec/unit/braintree/configuration_spec.rb +1 -1
  38. data/spec/unit/braintree/credit_card_spec.rb +2 -2
  39. data/spec/unit/braintree/credit_card_verification_spec.rb +13 -2
  40. data/spec/unit/braintree/customer_spec.rb +1 -0
  41. data/spec/unit/braintree/error_result_spec.rb +1 -1
  42. data/spec/unit/braintree/local_payment_completed_spec.rb +44 -4
  43. data/spec/unit/braintree/paypal_account_spec.rb +9 -0
  44. data/spec/unit/braintree/transaction/local_payment_details_spec.rb +6 -0
  45. data/spec/unit/braintree/transaction_gateway_spec.rb +50 -48
  46. data/spec/unit/braintree/webhook_notification_spec.rb +22 -1
  47. metadata +3 -2
@@ -427,6 +427,33 @@ describe Braintree::PaymentMethod do
427
427
  expect(result.errors.first.code).to eq("81724")
428
428
  end
429
429
 
430
+ it "respects fail_on_duplicate_payment_method_for_customer when included outside of the nonce" do
431
+ customer = Braintree::Customer.create!
432
+ result = Braintree::CreditCard.create(
433
+ :customer_id => customer.id,
434
+ :number => 4111111111111111,
435
+ :expiration_date => "05/2012",
436
+ )
437
+ expect(result).to be_success
438
+
439
+ nonce = nonce_for_new_payment_method(
440
+ :credit_card => {
441
+ :number => 4111111111111111,
442
+ :expiration_date => "05/2012"
443
+ },
444
+ )
445
+ result = Braintree::PaymentMethod.create(
446
+ :payment_method_nonce => nonce,
447
+ :customer_id => customer.id,
448
+ :options => {
449
+ :fail_on_duplicate_payment_method_for_customer => true
450
+ },
451
+ )
452
+
453
+ expect(result).not_to be_success
454
+ expect(result.errors.first.code).to eq("81763")
455
+ end
456
+
430
457
  it "allows passing the billing address outside of the nonce" do
431
458
  config = Braintree::Configuration.instantiate
432
459
  customer = Braintree::Customer.create.customer
@@ -659,7 +686,7 @@ describe Braintree::PaymentMethod do
659
686
  :customer_id => customer.id,
660
687
  :options => {
661
688
  :verify_card => true,
662
- :verification_merchant_account_id => SpecHelper::HiperBRLMerchantAccountId,
689
+ :verification_merchant_account_id => SpecHelper::CardProcessorBRLMerchantAccountId,
663
690
  :verification_account_type => "debit",
664
691
  },
665
692
  )
@@ -776,7 +803,7 @@ describe Braintree::PaymentMethod do
776
803
  :expiration_date => "06/2013",
777
804
  :options => {
778
805
  :verify_card => true,
779
- :verification_merchant_account_id => SpecHelper::HiperBRLMerchantAccountId,
806
+ :verification_merchant_account_id => SpecHelper::CardProcessorBRLMerchantAccountId,
780
807
  :verification_account_type => "debit",
781
808
  },
782
809
  )
@@ -26,6 +26,7 @@ describe Braintree::PayPalAccount do
26
26
  expect(paypal_account.updated_at).not_to be_nil
27
27
  expect(paypal_account.customer_id).to eq(customer.id)
28
28
  expect(paypal_account.funding_source_description).to be_nil
29
+ expect(paypal_account.edit_paypal_vault_id).to be_nil
29
30
  expect(paypal_account.revoked_at).to be_nil
30
31
  end
31
32
 
@@ -1,7 +1,9 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
2
  require File.expand_path(File.dirname(__FILE__) + "/client_api/spec_helper")
3
3
 
4
- describe Braintree::SamsungPayCard do
4
+ # NEXT_MAJOR_VERSION remove these tests
5
+ # SamsungPayCard has been deprecated
6
+ xdescribe Braintree::SamsungPayCard do
5
7
  it "can create from payment method nonce" do
6
8
  customer = Braintree::Customer.create!
7
9
 
@@ -1153,7 +1153,7 @@ describe Braintree::Transaction do
1153
1153
  )
1154
1154
  result = gateway.merchant.create(
1155
1155
  :email => "name@email.com",
1156
- :country_code_alpha3 => "USA",
1156
+ :country_code_alpha3 => "GBR",
1157
1157
  :payment_methods => ["credit_card", "paypal"],
1158
1158
  )
1159
1159
 
@@ -4860,27 +4860,6 @@ describe Braintree::Transaction do
4860
4860
  end
4861
4861
 
4862
4862
  context "external vault" do
4863
- it "returns a validation error if used with an unsupported instrument type" do
4864
- customer = Braintree::Customer.create!
4865
- result = Braintree::PaymentMethod.create(
4866
- :payment_method_nonce => Braintree::Test::Nonce::PayPalBillingAgreement,
4867
- :customer_id => customer.id,
4868
- )
4869
- payment_method_token = result.payment_method.token
4870
-
4871
- result = Braintree::Transaction.create(
4872
- :type => "sale",
4873
- :customer_id => customer.id,
4874
- :payment_method_token => payment_method_token,
4875
- :external_vault => {
4876
- :status => Braintree::Transaction::ExternalVault::Status::WillVault,
4877
- },
4878
- :amount => "10.00",
4879
- )
4880
- expect(result.success?).to eq(false)
4881
- expect(result.errors.for(:transaction)[0].code).to eq(Braintree::ErrorCodes::Transaction::PaymentInstrumentWithExternalVaultIsInvalid)
4882
- end
4883
-
4884
4863
  it "reject invalid status" do
4885
4864
  result = Braintree::Transaction.create(
4886
4865
  :type => "sale",
@@ -7935,4 +7914,59 @@ describe Braintree::Transaction do
7935
7914
  expect(result.transaction.merchant_advice_code_text).to eq("New account information available")
7936
7915
  end
7937
7916
  end
7917
+
7918
+ context "Shipping Tax Amount" do
7919
+ it "accepts shipping-tax-amount field" do
7920
+ result = Braintree::Transaction.create(
7921
+ :type => "sale",
7922
+ :payment_method_nonce => Braintree::Test::Nonce::Transactable,
7923
+ :amount => "10.00",
7924
+ :shipping_amount => "1.00",
7925
+ :shipping_tax_amount => "1.00",
7926
+ :discount_amount => "2.00",
7927
+ :ships_from_postal_code => "12345",
7928
+ )
7929
+
7930
+ expect(result.success?).to eq(true)
7931
+ expect(result.transaction.shipping_amount).to eq("1.00")
7932
+ expect(result.transaction.shipping_tax_amount).to eq("1.00")
7933
+ expect(result.transaction.discount_amount).to eq("2.00")
7934
+ expect(result.transaction.ships_from_postal_code).to eq("12345")
7935
+ end
7936
+
7937
+ it "submit for settlement succeeds when shipping tax amount is provided" do
7938
+ result = Braintree::Transaction.sale(
7939
+ :amount => Braintree::Test::TransactionAmounts::Authorize,
7940
+ :merchant_account_id => SpecHelper::FakeFirstDataMerchantAccountId,
7941
+ :credit_card => {
7942
+ :number => Braintree::Test::CreditCardNumbers::Visa,
7943
+ :expiration_date => "05/2029"
7944
+ },
7945
+ )
7946
+ expect(result.success?).to eq(true)
7947
+
7948
+ result = Braintree::Transaction.submit_for_settlement(
7949
+ result.transaction.id,
7950
+ nil,
7951
+ :discount_amount => "2.00",
7952
+ :shipping_amount => "1.23",
7953
+ :shipping_tax_amount => "0.40",
7954
+ :ships_from_postal_code => "90210",
7955
+ :line_items => [
7956
+ {
7957
+ :quantity => 1,
7958
+ :unit_amount => 1,
7959
+ :name => "New line item",
7960
+ :kind => "debit",
7961
+ :total_amount => "18.00",
7962
+ :discount_amount => "12.00",
7963
+ :tax_amount => "0",
7964
+ },
7965
+ ],
7966
+ )
7967
+ expect(result.success?).to eq(true)
7968
+ expect(result.transaction.shipping_tax_amount).to eq("0.40")
7969
+ expect(result.transaction.status).to eq(Braintree::Transaction::Status::SubmittedForSettlement)
7970
+ end
7971
+ end
7938
7972
  end
@@ -23,7 +23,7 @@ module Braintree
23
23
  end
24
24
 
25
25
  context "adding credit_card options with no customer ID" do
26
- %w(verify_card fail_on_duplicate_payment_method make_default).each do |option_name|
26
+ %w(verify_card fail_on_duplicate_payment_method make_default fail_on_duplicate_payment_method_for_customer).each do |option_name|
27
27
  it "raises an ArgumentError if #{option_name} is present" do
28
28
  expect do
29
29
  Braintree::ClientToken.generate(
@@ -399,7 +399,7 @@ describe Braintree::Configuration do
399
399
 
400
400
  it "is qa.braintreegateway.com for qa" do
401
401
  Braintree::Configuration.environment = :qa
402
- expect(Braintree::Configuration.instantiate.server).to eq("gateway.qa.braintreepayments.com")
402
+ expect(Braintree::Configuration.instantiate.server).to eq("gateway.qa2.braintreepayments.com")
403
403
  end
404
404
 
405
405
  it "can by changed by configuring the production endpoint" do
@@ -25,7 +25,7 @@ describe Braintree::CreditCard do
25
25
  :payment_method_nonce,
26
26
  {:external_vault=>[:network_transaction_id]},
27
27
  {:options => match_array([:make_default, :skip_advanced_fraud_checking, :verification_merchant_account_id, :verify_card, :verification_amount, :venmo_sdk_session, # NEXT_MAJOR_VERSION Remove this attribute
28
- :fail_on_duplicate_payment_method, :verification_account_type, :verification_currency_iso_code])},
28
+ :fail_on_duplicate_payment_method, :fail_on_duplicate_payment_method_for_customer, :verification_account_type, :verification_currency_iso_code])},
29
29
  {:billing_address => [
30
30
  :company,
31
31
  :country_code_alpha2,
@@ -73,7 +73,7 @@ describe Braintree::CreditCard do
73
73
  :payment_method_nonce,
74
74
  {:external_vault=>[:network_transaction_id]},
75
75
  {:options => match_array([:make_default, :skip_advanced_fraud_checking, :verification_merchant_account_id, :verify_card, :verification_amount, :venmo_sdk_session, # NEXT_MAJOR_VERSION Remove this attribute
76
- :fail_on_duplicate_payment_method, :verification_account_type, :verification_currency_iso_code])},
76
+ :fail_on_duplicate_payment_method, :fail_on_duplicate_payment_method_for_customer, :verification_account_type, :verification_currency_iso_code])},
77
77
  {:billing_address => [
78
78
  :company,
79
79
  :country_code_alpha2,
@@ -6,6 +6,8 @@ describe Braintree::CreditCardVerification do
6
6
  verification = Braintree::CreditCardVerification._new(
7
7
  :status => "verified",
8
8
  :amount => "12.45",
9
+ :ani_first_name_response_code => "I",
10
+ :ani_last_name_response_code => "I",
9
11
  :currency_iso_code => "USD",
10
12
  :avs_error_response_code => "I",
11
13
  :avs_postal_code_response_code => "I",
@@ -17,8 +19,7 @@ describe Braintree::CreditCardVerification do
17
19
  :network_response_code => "05",
18
20
  :network_response_text => "Do not Honor",
19
21
  )
20
-
21
- expect(verification.inspect).to eq(%(#<Braintree::CreditCardVerification status: "verified", processor_response_code: "2000", processor_response_text: "Do Not Honor", amount: "12.45", currency_iso_code: "USD", cvv_response_code: "I", avs_error_response_code: "I", avs_postal_code_response_code: "I", avs_street_address_response_code: "I", network_response_code: "05", network_response_text: "Do not Honor", merchant_account_id: "some_id", gateway_rejection_reason: nil, id: nil, credit_card: nil, billing: nil, created_at: nil>))
22
+ expect(verification.inspect).to eq(%(#<Braintree::CreditCardVerification amount: "12.45", ani_first_name_response_code: "I", ani_last_name_response_code: "I", avs_error_response_code: "I", avs_postal_code_response_code: "I", avs_street_address_response_code: "I", billing: nil, created_at: nil, credit_card: nil, currency_iso_code: "USD", cvv_response_code: "I", gateway_rejection_reason: nil, id: nil, merchant_account_id: "some_id", network_response_code: "05", network_response_text: "Do not Honor", processor_response_code: "2000", processor_response_text: "Do Not Honor", status: "verified">))
22
23
  end
23
24
 
24
25
  it "has a status" do
@@ -37,6 +38,16 @@ describe Braintree::CreditCardVerification do
37
38
  end
38
39
  end
39
40
 
41
+ it "accepts ani name reponse codes" do
42
+ verification = Braintree::CreditCardVerification._new(
43
+ :ani_first_name_response_code => "M",
44
+ :ani_last_name_response_code => "M",
45
+ )
46
+
47
+ expect(verification.ani_first_name_response_code).to eq("M")
48
+ expect(verification.ani_last_name_response_code).to eq("M")
49
+ end
50
+
40
51
  it "accepts amount as either a String or BigDecimal" do
41
52
  expect(Braintree::CreditCardVerification._new(:amount => "12.34").amount).to eq(BigDecimal("12.34"))
42
53
  expect(Braintree::CreditCardVerification._new(:amount => BigDecimal("12.34")).amount).to eq(BigDecimal("12.34"))
@@ -209,6 +209,7 @@ describe Braintree::Customer do
209
209
  :verification_amount,
210
210
  :venmo_sdk_session, # NEXT_MAJOR_VERSION Remove this attribute
211
211
  :fail_on_duplicate_payment_method,
212
+ :fail_on_duplicate_payment_method_for_customer,
212
213
  :verification_account_type,
213
214
  :verification_currency_iso_code,
214
215
  :update_existing_token
@@ -38,7 +38,7 @@ describe Braintree::ErrorResult do
38
38
  :verification => {},
39
39
  :transaction => nil,
40
40
  )
41
- expect(result.inspect).to include("credit_card_verification: #<Braintree::CreditCardVerification status: ")
41
+ expect(result.inspect).to include("credit_card_verification: #<Braintree::CreditCardVerification amount: ")
42
42
  end
43
43
 
44
44
  it "does not include the credit_card_verification if there isn't one" do
@@ -12,8 +12,11 @@ describe Braintree::LocalPaymentCompleted do
12
12
  describe "self._new" do
13
13
  it "initializes the object with the appropriate attributes set" do
14
14
  params = {
15
- payment_id: "a-payment-id",
15
+ bic: "a-bic",
16
+ iban_last_chars: "1234",
16
17
  payer_id: "a-payer-id",
18
+ payer_name: "John Doe",
19
+ payment_id: "a-payment-id",
17
20
  payment_method_nonce: "a-nonce",
18
21
  transaction: {
19
22
  id: "a-transaction-id",
@@ -24,25 +27,62 @@ describe Braintree::LocalPaymentCompleted do
24
27
  }
25
28
  local_payment_completed = Braintree::LocalPaymentCompleted._new(params)
26
29
 
27
- expect(local_payment_completed.payment_id).to eq("a-payment-id")
30
+ expect(local_payment_completed.bic).to eq("a-bic")
31
+ expect(local_payment_completed.iban_last_chars).to eq("1234")
28
32
  expect(local_payment_completed.payer_id).to eq("a-payer-id")
33
+ expect(local_payment_completed.payer_name).to eq("John Doe")
34
+ expect(local_payment_completed.payment_id).to eq("a-payment-id")
29
35
  expect(local_payment_completed.payment_method_nonce).to eq("a-nonce")
30
- expect(local_payment_completed.transaction.id).to eq("a-transaction-id")
31
36
  expect(local_payment_completed.transaction.amount).to eq(31.0)
37
+ expect(local_payment_completed.transaction.id).to eq("a-transaction-id")
32
38
  expect(local_payment_completed.transaction.order_id).to eq("an-order-id")
33
39
  expect(local_payment_completed.transaction.status).to eq(Braintree::Transaction::Status::Authorized)
34
40
  end
35
41
 
36
42
  it "initializes the object with the appropriate attributes set if no transaction is provided" do
37
43
  params = {
38
- payment_id: "a-payment-id",
44
+ bic: "a-bic",
45
+ iban_last_chars: "1234",
39
46
  payer_id: "a-payer-id",
47
+ payer_name: "John Doe",
48
+ payment_id: "a-payment-id",
40
49
  payment_method_nonce: "a-nonce",
41
50
  }
42
51
  local_payment_completed = Braintree::LocalPaymentCompleted._new(params)
43
52
 
53
+ expect(local_payment_completed.bic).to eq("a-bic")
54
+ expect(local_payment_completed.blik_aliases).to be_nil
55
+ expect(local_payment_completed.iban_last_chars).to eq("1234")
56
+ expect(local_payment_completed.payer_id).to eq("a-payer-id")
57
+ expect(local_payment_completed.payer_name).to eq("John Doe")
44
58
  expect(local_payment_completed.payment_id).to eq("a-payment-id")
59
+ expect(local_payment_completed.payment_method_nonce).to eq("a-nonce")
60
+ expect(local_payment_completed.transaction).to be_nil
61
+ end
62
+
63
+ it "initializes the object with the appropriate attributes when blik_aliases is provided" do
64
+ params = {
65
+ bic: "a-bic",
66
+ blik_aliases: [
67
+ {
68
+ key: "an-alias-key",
69
+ label: "an-alias-label"
70
+ }
71
+ ],
72
+ iban_last_chars: "1234",
73
+ payer_id: "a-payer-id",
74
+ payer_name: "John Doe",
75
+ payment_id: "a-payment-id",
76
+ payment_method_nonce: "a-nonce",
77
+ }
78
+ local_payment_completed = Braintree::LocalPaymentCompleted._new(params)
79
+
80
+ expect(local_payment_completed.bic).to eq("a-bic")
81
+ expect(local_payment_completed.blik_aliases).to match_array([{key: "an-alias-key", label: "an-alias-label"}])
82
+ expect(local_payment_completed.iban_last_chars).to eq("1234")
45
83
  expect(local_payment_completed.payer_id).to eq("a-payer-id")
84
+ expect(local_payment_completed.payer_name).to eq("John Doe")
85
+ expect(local_payment_completed.payment_id).to eq("a-payment-id")
46
86
  expect(local_payment_completed.payment_method_nonce).to eq("a-nonce")
47
87
  expect(local_payment_completed.transaction).to be_nil
48
88
  end
@@ -41,4 +41,13 @@ describe Braintree::PayPalAccount do
41
41
  expect(paypal_account.updated_at).to eq(now)
42
42
  end
43
43
  end
44
+
45
+ describe "edit_paypal_vault_id" do
46
+ it "exposes edit_paypal_vault_id" do
47
+ mock_edit_paypal_vault_id = "ENCR-BA-ID1"
48
+ paypal_account = Braintree::PayPalAccount._new(:gateway, :edit_paypal_vault_id => mock_edit_paypal_vault_id)
49
+
50
+ expect(paypal_account.edit_paypal_vault_id).to eq(mock_edit_paypal_vault_id)
51
+ end
52
+ end
44
53
  end
@@ -4,6 +4,12 @@ describe Braintree::Transaction::LocalPaymentDetails do
4
4
  describe "initialize" do
5
5
  let(:params) do
6
6
  {
7
+ blik_aliases: [
8
+ {
9
+ key: "a-key",
10
+ label: "a-label"
11
+ }
12
+ ],
7
13
  capture_id: "a-capture-id",
8
14
  custom_field: "custom-field",
9
15
  debug_id: "debug-id",
@@ -33,36 +33,45 @@ describe Braintree::TransactionGateway do
33
33
  # three_d_secure_token has been deprecated in favor of three_d_secure_authentication_id
34
34
  it "creates a transaction gateway signature" do
35
35
  expect(Braintree::TransactionGateway._create_signature).to match([
36
- :amount, :billing_address_id, :channel, :customer_id, :device_data, :discount_amount,
36
+ :amount, :billing_address_id, :channel, :currency_iso_code, :customer_id, :device_data,
37
+ :discount_amount, :exchange_rate_quote_id, :foreign_retailer,
37
38
  :merchant_account_id, :order_id, :payment_method_nonce, :payment_method_token,
38
39
  :product_sku, :purchase_order_number, :service_fee_amount, :shared_billing_address_id,
39
40
  :shared_customer_id, :shared_payment_method_nonce, :shared_payment_method_token,
40
- :shared_shipping_address_id, :shipping_address_id, :shipping_amount,
41
+ :shared_shipping_address_id, :shipping_address_id, :shipping_amount, :shipping_tax_amount,
41
42
  :ships_from_postal_code, :tax_amount, :tax_exempt, :three_d_secure_authentication_id,:three_d_secure_token, #Deprecated
42
- :transaction_source, :type, :venmo_sdk_payment_method_code, #Deprecated
43
- :sca_exemption, :currency_iso_code, :exchange_rate_quote_id, :foreign_retailer,
44
- {:line_items => [:commodity_code, :description, :discount_amount, :image_url, :kind, :name, :product_code, :quantity, :tax_amount, :total_amount, :unit_amount, :unit_of_measure, :unit_tax_amount, :upc_code, :upc_type, :url]},
45
- {:risk_data => [:customer_browser, :customer_device_id, :customer_ip, :customer_location_zip, :customer_tenure]},
46
- {:credit_card => [:token, :cardholder_name, :cvv, :expiration_date, :expiration_month, :expiration_year, :number, {:payment_reader_card_details => [:encrypted_card_data, :key_serial_number]}, {:network_tokenization_attributes => [:cryptogram, :ecommerce_indicator, :token_requestor_id]}]},
47
- {:customer => [:id, :company, :email, :fax, :first_name, :last_name, :phone, :website]},
43
+ :transaction_source, :type, :venmo_sdk_payment_method_code, # Deprecated
44
+ :sca_exemption,
45
+ {:apple_pay_card => [:number, :cardholder_name, :cryptogram, :expiration_month, :expiration_year, :eci_indicator]},
48
46
  {
49
47
  :billing => Braintree::AddressGateway._shared_signature
50
48
  },
51
- {
52
- :shipping => Braintree::AddressGateway._shared_signature + [:shipping_method],
53
- },
54
- {
55
- :three_d_secure_pass_thru => [
56
- :eci_flag,
57
- :cavv,
58
- :xid,
59
- :three_d_secure_version,
60
- :authentication_response,
61
- :directory_response,
62
- :cavv_algorithm,
63
- :ds_transaction_id,
64
- ]
65
- },
49
+ {:credit_card => [:token, :cardholder_name, :cvv, :expiration_date, :expiration_month, :expiration_year, :number, {:payment_reader_card_details => [:encrypted_card_data, :key_serial_number]}, {:network_tokenization_attributes => [:cryptogram, :ecommerce_indicator, :token_requestor_id]}]},
50
+ {:customer => [:id, :company, :email, :fax, :first_name, :last_name, :phone, :website]},
51
+ {:custom_fields => :_any_key_},
52
+ {:descriptor => [:name, :phone, :url]},
53
+ {:external_vault => [
54
+ :status,
55
+ :previous_network_transaction_id,
56
+ ]},
57
+ {:google_pay_card => [:number, :cryptogram, :google_transaction_id, :expiration_month, :expiration_year, :source_card_type, :source_card_last_four, :eci_indicator]},
58
+ {:industry => [
59
+ :industry_type,
60
+ {:data => [
61
+ :country_code, :date_of_birth, :folio_number, :check_in_date, :check_out_date, :travel_package, :lodging_check_in_date, :lodging_check_out_date, :departure_date, :lodging_name, :room_rate, :room_tax,
62
+ :passenger_first_name, :passenger_last_name, :passenger_middle_initial, :passenger_title, :issued_date, :travel_agency_name, :travel_agency_code, :ticket_number,
63
+ :issuing_carrier_code, :customer_code, :fare_amount, :fee_amount, :tax_amount, :restricted_ticket, :no_show, :advanced_deposit, :fire_safe, :property_phone, :ticket_issuer_address, :arrival_date,
64
+ {:legs => [
65
+ :conjunction_ticket, :exchange_ticket, :coupon_number, :service_class, :carrier_code, :fare_basis_code, :flight_number, :departure_date, :departure_airport_code, :departure_time,
66
+ :arrival_airport_code, :arrival_time, :stopover_permitted, :fare_amount, :fee_amount, :tax_amount, :endorsement_or_restrictions,
67
+ ]},
68
+ {:additional_charges => [
69
+ :kind, :amount,
70
+ ]},
71
+ ]},
72
+ ]},
73
+ {:installments => [:count]},
74
+ {:line_items => [:commodity_code, :description, :discount_amount, :image_url, :kind, :name, :product_code, :quantity, :tax_amount, :total_amount, :unit_amount, :unit_of_measure, :unit_tax_amount, :upc_code, :upc_type, :url]},
66
75
  {:options => [
67
76
  :hold_in_escrow,
68
77
  :store_in_vault,
@@ -70,7 +79,7 @@ describe Braintree::TransactionGateway do
70
79
  :submit_for_settlement,
71
80
  :add_billing_address_to_payment_method,
72
81
  :store_shipping_address_in_vault,
73
- :venmo_sdk_session, #Deprecated
82
+ :venmo_sdk_session, # Deprecated
74
83
  :payee_id,
75
84
  :payee_email,
76
85
  :skip_advanced_fraud_checking,
@@ -84,31 +93,23 @@ describe Braintree::TransactionGateway do
84
93
  {:credit_card => [:account_type, :process_debit_as_credit]},
85
94
  ]
86
95
  },
87
- {:external_vault => [
88
- :status,
89
- :previous_network_transaction_id,
90
- ]},
91
- {:custom_fields => :_any_key_},
92
- {:descriptor => [:name, :phone, :url]},
93
96
  {:paypal_account => [:email, :token, :paypal_data, :payee_id, :payee_email, :payer_id, :payment_id]},
94
- {:industry => [
95
- :industry_type,
96
- {:data => [
97
- :country_code, :date_of_birth, :folio_number, :check_in_date, :check_out_date, :travel_package, :lodging_check_in_date, :lodging_check_out_date, :departure_date, :lodging_name, :room_rate, :room_tax,
98
- :passenger_first_name, :passenger_last_name, :passenger_middle_initial, :passenger_title, :issued_date, :travel_agency_name, :travel_agency_code, :ticket_number,
99
- :issuing_carrier_code, :customer_code, :fare_amount, :fee_amount, :tax_amount, :restricted_ticket, :no_show, :advanced_deposit, :fire_safe, :property_phone, :ticket_issuer_address, :arrival_date,
100
- {:legs => [
101
- :conjunction_ticket, :exchange_ticket, :coupon_number, :service_class, :carrier_code, :fare_basis_code, :flight_number, :departure_date, :departure_airport_code, :departure_time,
102
- :arrival_airport_code, :arrival_time, :stopover_permitted, :fare_amount, :fee_amount, :tax_amount, :endorsement_or_restrictions,
103
- ]},
104
- {:additional_charges => [
105
- :kind, :amount,
106
- ]},
107
- ]},
108
- ]},
109
- {:apple_pay_card => [:number, :cardholder_name, :cryptogram, :expiration_month, :expiration_year, :eci_indicator]},
110
- {:google_pay_card => [:number, :cryptogram, :google_transaction_id, :expiration_month, :expiration_year, :source_card_type, :source_card_last_four, :eci_indicator]},
111
- {:installments => [:count]},
97
+ {:risk_data => [:customer_browser, :customer_device_id, :customer_ip, :customer_location_zip, :customer_tenure]},
98
+ {
99
+ :shipping => Braintree::AddressGateway._shared_signature + [:shipping_method],
100
+ },
101
+ {
102
+ :three_d_secure_pass_thru => [
103
+ :eci_flag,
104
+ :cavv,
105
+ :xid,
106
+ :three_d_secure_version,
107
+ :authentication_response,
108
+ :directory_response,
109
+ :cavv_algorithm,
110
+ :ds_transaction_id,
111
+ ]
112
+ },
112
113
  ])
113
114
  end
114
115
 
@@ -136,6 +137,7 @@ describe Braintree::TransactionGateway do
136
137
  :tax_exempt,
137
138
  :discount_amount,
138
139
  :shipping_amount,
140
+ :shipping_tax_amount,
139
141
  :ships_from_postal_code,
140
142
  :line_items => [:commodity_code, :description, :discount_amount, :image_url, :kind, :name, :product_code, :quantity, :tax_amount, :total_amount, :unit_amount, :unit_of_measure, :unit_tax_amount, :upc_code, :upc_type, :url],
141
143
  ])
@@ -723,14 +723,35 @@ describe Braintree::WebhookNotification do
723
723
  expect(notification.kind).to eq(Braintree::WebhookNotification::Kind::LocalPaymentCompleted)
724
724
 
725
725
  local_payment_completed = notification.local_payment_completed
726
- expect(local_payment_completed.payment_id).to eq("PAY-XYZ123")
726
+ expect(local_payment_completed.blik_aliases).to be_nil
727
727
  expect(local_payment_completed.payer_id).to eq("ABCPAYER")
728
+ expect(local_payment_completed.payment_id).to eq("PAY-XYZ123")
728
729
  expect(local_payment_completed.payment_method_nonce).to eq("ee257d98-de40-47e8-96b3-a6954ea7a9a4")
729
730
  expect(local_payment_completed.transaction.id).to eq("my_id")
730
731
  expect(local_payment_completed.transaction.status).to eq(Braintree::Transaction::Status::Authorized)
731
732
  expect(local_payment_completed.transaction.amount).to eq(49.99)
732
733
  expect(local_payment_completed.transaction.order_id).to eq("order4567")
733
734
  end
735
+
736
+ it "builds a sample notification for a local_payment webhook when funding source is blik one click" do
737
+ sample_notification = Braintree::WebhookTesting.sample_notification(
738
+ Braintree::WebhookNotification::Kind::LocalPaymentCompleted,
739
+ "blik_one_click_id",
740
+ )
741
+
742
+ notification = Braintree::WebhookNotification.parse(sample_notification[:bt_signature], sample_notification[:bt_payload])
743
+ expect(notification.kind).to eq(Braintree::WebhookNotification::Kind::LocalPaymentCompleted)
744
+
745
+ local_payment_completed = notification.local_payment_completed
746
+ expect(local_payment_completed.blik_aliases).to match_array([{:key => "alias-key-1", :label => "alias-label-1"}])
747
+ expect(local_payment_completed.payer_id).to eq("ABCPAYER")
748
+ expect(local_payment_completed.payment_id).to eq("PAY-XYZ123")
749
+ expect(local_payment_completed.payment_method_nonce).to eq("ee257d98-de40-47e8-96b3-a6954ea7a9a4")
750
+ expect(local_payment_completed.transaction.id).to eq("blik_one_click_id")
751
+ expect(local_payment_completed.transaction.status).to eq(Braintree::Transaction::Status::Authorized)
752
+ expect(local_payment_completed.transaction.amount).to eq(49.99)
753
+ expect(local_payment_completed.transaction.order_id).to eq("order4567")
754
+ end
734
755
  end
735
756
 
736
757
  context "local_payment_expired" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: braintree
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.21.0
4
+ version: 4.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Braintree
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-07-23 00:00:00.000000000 Z
11
+ date: 2024-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -111,6 +111,7 @@ files:
111
111
  - lib/braintree/graphql_client.rb
112
112
  - lib/braintree/http.rb
113
113
  - lib/braintree/local_payment_completed.rb
114
+ - lib/braintree/local_payment_completed/blik_alias.rb
114
115
  - lib/braintree/local_payment_expired.rb
115
116
  - lib/braintree/local_payment_funded.rb
116
117
  - lib/braintree/local_payment_reversed.rb