braintree 4.35.0 → 4.36.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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/lib/braintree/apple_pay_card.rb +7 -0
  3. data/lib/braintree/apple_pay_gateway.rb +43 -0
  4. data/lib/braintree/base_module.rb +9 -0
  5. data/lib/braintree/credit_card_verification.rb +2 -0
  6. data/lib/braintree/customer.rb +1 -1
  7. data/lib/braintree/customer_gateway.rb +2 -0
  8. data/lib/braintree/error_codes.rb +20 -0
  9. data/lib/braintree/gateway.rb +4 -0
  10. data/lib/braintree/graphql/inputs/billing_address_input.rb +34 -0
  11. data/lib/braintree/graphql/inputs/create_local_payment_context_input.rb +44 -0
  12. data/lib/braintree/graphql/inputs/payer_info_input.rb +38 -0
  13. data/lib/braintree/graphql/inputs/shipping_address_input.rb +34 -0
  14. data/lib/braintree/local_payment_context.rb +108 -0
  15. data/lib/braintree/local_payment_context_gateway.rb +132 -0
  16. data/lib/braintree/local_payment_type.rb +6 -0
  17. data/lib/braintree/merchant_gateway.rb +16 -16
  18. data/lib/braintree/monetary_amount.rb +24 -0
  19. data/lib/braintree/successful_result.rb +1 -0
  20. data/lib/braintree/transaction.rb +2 -0
  21. data/lib/braintree/transaction_gateway.rb +11 -5
  22. data/lib/braintree/transaction_search.rb +1 -0
  23. data/lib/braintree/validation_error_collection.rb +1 -1
  24. data/lib/braintree/version.rb +1 -1
  25. data/lib/braintree.rb +20 -3
  26. data/spec/integration/braintree/customer_spec.rb +550 -0
  27. data/spec/integration/braintree/http_spec.rb +1 -1
  28. data/spec/integration/braintree/local_payment_context_spec.rb +168 -0
  29. data/spec/integration/braintree/merchant_spec.rb +5 -169
  30. data/spec/integration/braintree/payment_method_spec.rb +174 -1
  31. data/spec/integration/braintree/transaction_idempotency_spec.rb +320 -0
  32. data/spec/integration/braintree/transaction_search_spec.rb +3 -2
  33. data/spec/integration/braintree/transaction_spec.rb +75 -0
  34. data/spec/integration/braintree/transaction_us_bank_account_spec.rb +2 -1
  35. data/spec/spec_helper.rb +2 -0
  36. data/spec/unit/braintree/credit_card_verification_spec.rb +1 -1
  37. data/spec/unit/braintree/customer_spec.rb +67 -1
  38. data/spec/unit/braintree/graphql/billing_address_input_spec.rb +68 -0
  39. data/spec/unit/braintree/graphql/create_local_payment_context_input_spec.rb +63 -0
  40. data/spec/unit/braintree/graphql/monetary_amount_input_spec.rb +55 -0
  41. data/spec/unit/braintree/graphql/payer_info_input_spec.rb +92 -0
  42. data/spec/unit/braintree/local_payment_context_gateway_spec.rb +149 -0
  43. data/spec/unit/braintree/local_payment_context_spec.rb +141 -0
  44. data/spec/unit/braintree/monetary_amount_spec.rb +34 -0
  45. data/spec/unit/braintree/three_d_secure_info_spec.rb +3 -1
  46. data/spec/unit/braintree/transaction/apple_pay_details_spec.rb +7 -7
  47. data/spec/unit/braintree/transaction/google_pay_details_spec.rb +7 -7
  48. data/spec/unit/braintree/transaction/meta_checkout_card_details_spec.rb +6 -6
  49. data/spec/unit/braintree/transaction/meta_checkout_token_details_spec.rb +6 -6
  50. data/spec/unit/braintree/transaction/payment_receipt_spec.rb +4 -4
  51. data/spec/unit/braintree/transaction/visa_checkout_card_details_spec.rb +6 -6
  52. data/spec/unit/braintree/transaction_gateway_spec.rb +4 -3
  53. data/spec/unit/braintree/transaction_spec.rb +12 -0
  54. data/spec/unit/credit_card_details_spec.rb +6 -6
  55. data/spec/unit/spec_helper.rb +9 -0
  56. metadata +19 -2
@@ -0,0 +1,168 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+ require File.expand_path(File.dirname(__FILE__) + "/client_api/spec_helper")
3
+
4
+ describe Braintree::LocalPaymentContextGateway do
5
+ before(:each) { skip("Pending until test data is fixed.") }
6
+ let(:gateway) do
7
+ Braintree::Gateway.new(
8
+ :environment => :development,
9
+ :merchant_id => "pwpp_multi_account_merchant",
10
+ :public_key => "pwpp_multi_account_merchant_public_key",
11
+ :private_key => "pwpp_multi_account_merchant_private_key",
12
+ )
13
+ end
14
+
15
+ describe "create" do
16
+ it "can create MBWAY payment context" do
17
+ input = Braintree::CreateLocalPaymentContextInput.new(
18
+ amount: {
19
+ value: "10.00",
20
+ currency_code: "EUR"
21
+ },
22
+ type: Braintree::LocalPaymentType::MBWAY,
23
+ payer_info: {
24
+ given_name: "John",
25
+ surname: "Doe",
26
+ phone_number: "912345678",
27
+ phone_country_code: "351"
28
+ },
29
+ shipping_address: {
30
+ street_address: "123 Main St",
31
+ extended_address: "Apt 4B",
32
+ locality: "Lisbon",
33
+ region: "Lisboa",
34
+ postal_code: "1000-001",
35
+ country_code: "PT"
36
+ },
37
+ return_url: "https://example.com/return",
38
+ cancel_url: "https://example.com/cancel",
39
+ merchant_account_id: "eur_pwpp_multi_account_merchant_account",
40
+ )
41
+
42
+ result = gateway.local_payment_context.create(input)
43
+
44
+ expect(result.success?).to eq(true)
45
+ expect(result.payment_context).not_to be_nil
46
+ expect(result.payment_context.id).not_to be_nil
47
+ expect(result.payment_context.legacy_id).not_to be_nil
48
+ expect(result.payment_context.type).to eq("MBWAY")
49
+ expect(result.payment_context.amount.value).to eq("10.00")
50
+ expect(result.payment_context.amount.currency_code).to eq("EUR")
51
+ end
52
+
53
+ it "can create CRYPTO payment context" do
54
+ input = Braintree::CreateLocalPaymentContextInput.new(
55
+ amount: {
56
+ value: "25.00",
57
+ currency_code: "USD"
58
+ },
59
+ type: Braintree::LocalPaymentType::CRYPTO,
60
+ payer_info: {
61
+ given_name: "John",
62
+ surname: "Doe",
63
+ email: "john.doe@example.com"
64
+ },
65
+ return_url: "https://example.com/return",
66
+ cancel_url: "https://example.com/cancel",
67
+ merchant_account_id: "usd_pwpp_multi_account_merchant_account",
68
+ )
69
+
70
+ result = gateway.local_payment_context.create(input)
71
+
72
+ expect(result.success?).to eq(true)
73
+ expect(result.payment_context).not_to be_nil
74
+ expect(result.payment_context.id).not_to be_nil
75
+ expect(result.payment_context.legacy_id).not_to be_nil
76
+ expect(result.payment_context.type).to eq("CRYPTO")
77
+ expect(result.payment_context.amount.value).to eq("25.00")
78
+ expect(result.payment_context.amount.currency_code).to eq("USD")
79
+ end
80
+
81
+ it "can create payment context with only required fields" do
82
+ input = Braintree::CreateLocalPaymentContextInput.new(
83
+ amount: {
84
+ value: "15.00",
85
+ currency_code: "USD"
86
+ },
87
+ type: Braintree::LocalPaymentType::CRYPTO,
88
+ payer_info: {
89
+ given_name: "Jane",
90
+ surname: "Smith"
91
+ },
92
+ return_url: "https://example.com/return",
93
+ cancel_url: "https://example.com/cancel",
94
+ )
95
+
96
+ result = gateway.local_payment_context.create(input)
97
+
98
+ expect(result.success?).to eq(true)
99
+ expect(result.payment_context).not_to be_nil
100
+ expect(result.payment_context.id).not_to be_nil
101
+ expect(result.payment_context.legacy_id).not_to be_nil
102
+ expect(result.payment_context.type).to eq("CRYPTO")
103
+ expect(result.payment_context.amount.value).to eq("15.00")
104
+ expect(result.payment_context.amount.currency_code).to eq("USD")
105
+ end
106
+
107
+ it "returns error for invalid input" do
108
+ input = Braintree::CreateLocalPaymentContextInput.new(
109
+ amount: {
110
+ value: "invalid",
111
+ currency_code: "EUR"
112
+ },
113
+ type: Braintree::LocalPaymentType::MBWAY,
114
+ payer_info: {
115
+ given_name: "John",
116
+ surname: "Doe"
117
+ },
118
+ return_url: "https://example.com/return",
119
+ cancel_url: "https://example.com/cancel",
120
+ merchant_account_id: "eur_pwpp_multi_account_merchant_account",
121
+ )
122
+
123
+ result = gateway.local_payment_context.create(input)
124
+
125
+ expect(result.success?).to eq(false)
126
+ expect(result.errors.size).to be > 0
127
+ end
128
+ end
129
+
130
+ describe "find" do
131
+ it "can find a payment context by ID" do
132
+ input = Braintree::CreateLocalPaymentContextInput.new(
133
+ amount: {
134
+ value: "10.00",
135
+ currency_code: "EUR"
136
+ },
137
+ type: Braintree::LocalPaymentType::MBWAY,
138
+ payer_info: {
139
+ given_name: "John",
140
+ surname: "Doe",
141
+ phone_number: "912345678",
142
+ phone_country_code: "351"
143
+ },
144
+ return_url: "https://example.com/return",
145
+ cancel_url: "https://example.com/cancel",
146
+ merchant_account_id: "eur_pwpp_multi_account_merchant_account",
147
+ )
148
+
149
+ create_result = gateway.local_payment_context.create(input)
150
+ expect(create_result.success?).to eq(true)
151
+
152
+ payment_context_id = create_result.payment_context.id
153
+ find_result = gateway.local_payment_context.find(payment_context_id)
154
+
155
+ expect(find_result.success?).to eq(true)
156
+ expect(find_result.payment_context).not_to be_nil
157
+ expect(find_result.payment_context.id).to eq(payment_context_id)
158
+ expect(find_result.payment_context.legacy_id).not_to be_nil
159
+ expect(find_result.payment_context.type).to eq("MBWAY")
160
+ end
161
+
162
+ it "raises NotFoundError for non-existent ID" do
163
+ expect {
164
+ gateway.local_payment_context.find("non-existent-id-123")
165
+ }.to raise_error(Braintree::NotFoundError)
166
+ end
167
+ end
168
+ end
@@ -1,186 +1,22 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
2
 
3
3
  describe Braintree::MerchantGateway do
4
+ # NEXT_MAJOR_VERSION remove this test
4
5
  describe "create" do
5
- xit "creates a merchant" do
6
+ it "raises a server error because the endpoint has been disabled" do
6
7
  gateway = Braintree::Gateway.new(
7
8
  :client_id => "client_id$#{Braintree::Configuration.environment}$integration_client_id",
8
9
  :client_secret => "client_secret$#{Braintree::Configuration.environment}$integration_client_secret",
9
10
  :logger => Logger.new("/dev/null"),
10
11
  )
11
12
 
12
- result = gateway.merchant.create(
13
- :email => "name@email.com",
14
- :country_code_alpha3 => "GBR",
15
- :payment_methods => ["credit_card", "paypal"],
16
- )
17
-
18
- expect(result).to be_success
19
-
20
- merchant = result.merchant
21
- expect(merchant.id).not_to be_nil
22
- expect(merchant.email).to eq("name@email.com")
23
- expect(merchant.company_name).to eq("name@email.com")
24
- expect(merchant.country_code_alpha3).to eq("GBR")
25
- expect(merchant.country_code_alpha2).to eq("GB")
26
- expect(merchant.country_code_numeric).to eq("826")
27
- expect(merchant.country_name).to eq("United Kingdom")
28
-
29
- credentials = result.credentials
30
- expect(credentials.access_token).not_to be_nil
31
- expect(credentials.refresh_token).not_to be_nil
32
- expect(credentials.expires_at).not_to be_nil
33
- expect(credentials.token_type).to eq("bearer")
34
- end
35
-
36
- it "gives an error when using invalid payment_methods" do
37
- gateway = Braintree::Gateway.new(
38
- :client_id => "client_id$#{Braintree::Configuration.environment}$integration_client_id",
39
- :client_secret => "client_secret$#{Braintree::Configuration.environment}$integration_client_secret",
40
- :logger => Logger.new("/dev/null"),
41
- )
42
-
43
- result = gateway.merchant.create(
44
- :email => "name@email.com",
45
- :country_code_alpha3 => "GBR",
46
- :payment_methods => ["fake_money"],
47
- )
48
-
49
- expect(result).not_to be_success
50
- errors = result.errors.for(:merchant).on(:payment_methods)
51
-
52
- expect(errors[0].code).to eq(Braintree::ErrorCodes::Merchant::PaymentMethodsAreInvalid)
53
- end
54
-
55
- context "credentials" do
56
- around(:each) do |example|
57
- old_merchant_id_value = Braintree::Configuration.merchant_id
58
- example.run
59
- Braintree::Configuration.merchant_id = old_merchant_id_value
60
- end
61
-
62
- xit "allows using a merchant_id passed in through Gateway" do
63
- Braintree::Configuration.merchant_id = nil
64
-
65
- gateway = Braintree::Gateway.new(
66
- :client_id => "client_id$#{Braintree::Configuration.environment}$integration_client_id",
67
- :client_secret => "client_secret$#{Braintree::Configuration.environment}$integration_client_secret",
68
- :merchant_id => "integration_merchant_id",
69
- :logger => Logger.new("/dev/null"),
70
- )
71
- result = gateway.merchant.create(
13
+ expect do
14
+ gateway.merchant.create(
72
15
  :email => "name@email.com",
73
16
  :country_code_alpha3 => "GBR",
74
17
  :payment_methods => ["credit_card", "paypal"],
75
18
  )
76
-
77
- expect(result).to be_success
78
- end
79
- end
80
-
81
- context "multiple currencies" do
82
- before(:each) do
83
- @gateway = Braintree::Gateway.new(
84
- :client_id => "client_id$#{Braintree::Configuration.environment}$integration_client_id",
85
- :client_secret => "client_secret$#{Braintree::Configuration.environment}$integration_client_secret",
86
- :logger => Logger.new("/dev/null"),
87
- )
88
- end
89
-
90
- xit "creates an EU multi currency merchant for paypal and credit_card" do
91
- result = @gateway.merchant.create(
92
- :email => "name@email.com",
93
- :country_code_alpha3 => "GBR",
94
- :payment_methods => ["credit_card", "paypal"],
95
- :currencies => ["GBP", "USD"],
96
- )
97
-
98
- merchant = result.merchant
99
- expect(merchant.id).not_to be_nil
100
- expect(merchant.email).to eq("name@email.com")
101
- expect(merchant.company_name).to eq("name@email.com")
102
- expect(merchant.country_code_alpha3).to eq("GBR")
103
- expect(merchant.country_code_alpha2).to eq("GB")
104
- expect(merchant.country_code_numeric).to eq("826")
105
- expect(merchant.country_name).to eq("United Kingdom")
106
-
107
- credentials = result.credentials
108
- expect(credentials.access_token).not_to be_nil
109
- expect(credentials.refresh_token).not_to be_nil
110
- expect(credentials.expires_at).not_to be_nil
111
- expect(credentials.token_type).to eq("bearer")
112
-
113
- merchant_accounts = merchant.merchant_accounts
114
- expect(merchant_accounts.count).to eq(2)
115
-
116
- merchant_account = merchant_accounts.detect { |ma| ma.id == "GBP" }
117
- expect(merchant_account.default).to eq(true)
118
- expect(merchant_account.currency_iso_code).to eq("GBP")
119
-
120
- merchant_account = merchant_accounts.detect { |ma| ma.id == "USD" }
121
- expect(merchant_account.default).to eq(false)
122
- expect(merchant_account.currency_iso_code).to eq("USD")
123
- end
124
-
125
-
126
- xit "creates a paypal-only merchant that accepts multiple currencies" do
127
- result = @gateway.merchant.create(
128
- :email => "name@email.com",
129
- :country_code_alpha3 => "GBR",
130
- :payment_methods => ["paypal"],
131
- :currencies => ["GBP", "USD"],
132
- :paypal_account => {
133
- :client_id => "paypal_client_id",
134
- :client_secret => "paypal_client_secret",
135
- },
136
- )
137
-
138
- expect(result).to be_success
139
-
140
- merchant = result.merchant
141
- expect(merchant.id).not_to be_nil
142
- expect(merchant.email).to eq("name@email.com")
143
- expect(merchant.company_name).to eq("name@email.com")
144
- expect(merchant.country_code_alpha3).to eq("GBR")
145
- expect(merchant.country_code_alpha2).to eq("GB")
146
- expect(merchant.country_code_numeric).to eq("826")
147
- expect(merchant.country_name).to eq("United Kingdom")
148
-
149
- credentials = result.credentials
150
- expect(credentials.access_token).not_to be_nil
151
- expect(credentials.refresh_token).not_to be_nil
152
- expect(credentials.expires_at).not_to be_nil
153
- expect(credentials.token_type).to eq("bearer")
154
-
155
- merchant_accounts = merchant.merchant_accounts
156
- expect(merchant_accounts.count).to eq(2)
157
-
158
- merchant_account = merchant_accounts.detect { |ma| ma.id == "USD" }
159
- expect(merchant_account.default).to eq(false)
160
- expect(merchant_account.currency_iso_code).to eq("USD")
161
-
162
- merchant_account = merchant_accounts.detect { |ma| ma.id == "GBP" }
163
- expect(merchant_account.default).to eq(true)
164
- expect(merchant_account.currency_iso_code).to eq("GBP")
165
- end
166
-
167
- it "returns error if invalid currency is passed" do
168
- result = @gateway.merchant.create(
169
- :email => "name@email.com",
170
- :country_code_alpha3 => "GBR",
171
- :payment_methods => ["paypal"],
172
- :currencies => ["FAKE", "GBP"],
173
- :paypal_account => {
174
- :client_id => "paypal_client_id",
175
- :client_secret => "paypal_client_secret",
176
- },
177
- )
178
-
179
- expect(result).not_to be_success
180
- errors = result.errors.for(:merchant).on(:currencies)
181
-
182
- expect(errors[0].code).to eq(Braintree::ErrorCodes::Merchant::CurrenciesAreInvalid)
183
- end
19
+ end.to raise_error(Braintree::ServerError)
184
20
  end
185
21
  end
186
22
 
@@ -813,7 +813,7 @@ describe Braintree::PaymentMethod do
813
813
  expect(update_result.payment_method.verification.credit_card[:account_type]).to eq("credit")
814
814
  end
815
815
 
816
- it "updates the credit card with account_type debit" do
816
+ xit "updates the credit card with account_type debit" do
817
817
  customer = Braintree::Customer.create!
818
818
  credit_card = Braintree::CreditCard.create!(
819
819
  :cardholder_name => "Original Holder",
@@ -1020,6 +1020,179 @@ describe Braintree::PaymentMethod do
1020
1020
  end
1021
1021
  end
1022
1022
 
1023
+ it "does card verification for ApplePay" do
1024
+ customer = Braintree::Customer.create!
1025
+ result = Braintree::PaymentMethod.create(
1026
+ :payment_method_nonce => Braintree::Test::Nonce::ApplePayVisa,
1027
+ :customer_id => customer.id,
1028
+ :options => {
1029
+ :verify_card => true,
1030
+ :verification_amount => "1.00",
1031
+ :verification_merchant_account_id => SpecHelper::NonDefaultMerchantAccountId,
1032
+ },
1033
+ )
1034
+ expect(result).to be_success
1035
+ verification = result.payment_method.verification
1036
+
1037
+ expect(verification.merchant_account_id).to eq(SpecHelper::NonDefaultMerchantAccountId)
1038
+ expect(verification.amount).to eq(BigDecimal("1.00"))
1039
+ end
1040
+
1041
+ it "verifies the apple pay card when only verify_card set to true is provided" do
1042
+ customer = Braintree::Customer.create!
1043
+
1044
+ result = Braintree::PaymentMethod.create(
1045
+ :customer_id => customer.id,
1046
+ :payment_method_nonce => Braintree::Test::Nonce::ApplePayVisa,
1047
+ :options => {
1048
+ :verify_card => true,
1049
+ },
1050
+ )
1051
+
1052
+ expect(result).to be_success
1053
+ expect(result.payment_method).to be_a(Braintree::ApplePayCard)
1054
+ verification = result.payment_method.verification
1055
+ expect(verification).not_to be_nil
1056
+ end
1057
+
1058
+ it "does not verify the apple pay card when verify_card is false" do
1059
+ customer = Braintree::Customer.create!
1060
+
1061
+ result = Braintree::PaymentMethod.create(
1062
+ :customer_id => customer.id,
1063
+ :payment_method_nonce => Braintree::Test::Nonce::ApplePayVisa,
1064
+ :options => {
1065
+ :verify_card => false,
1066
+ :verification_merchant_account_id => SpecHelper::NonDefaultMerchantAccountId,
1067
+ :verification_amount => "10.00",
1068
+ },
1069
+ )
1070
+
1071
+ expect(result).to be_success
1072
+ expect(result.payment_method).to be_a(Braintree::ApplePayCard)
1073
+
1074
+ verification = result.payment_method.verification
1075
+ expect(verification).to be_nil
1076
+ end
1077
+
1078
+ it "errors when verification amount is negative for apple pay" do
1079
+ customer = Braintree::Customer.create!
1080
+ result = Braintree::PaymentMethod.create(
1081
+ payment_method_nonce: Braintree::Test::Nonce::ApplePayVisa,
1082
+ :customer_id => customer.id,
1083
+ options: {
1084
+ verify_card: true,
1085
+ verification_amount: "-1.00",
1086
+ },
1087
+ )
1088
+
1089
+ expect(result).not_to be_success
1090
+ expect(result.errors.for(:apple_pay).for(:options).on(:verification_amount)[0].code).to eq Braintree::ErrorCodes::ApplePay::Options::VerificationAmountCannotBeNegative
1091
+ end
1092
+
1093
+ it "errors when verification amount format is invalid for apple pay" do
1094
+ customer = Braintree::Customer.create!
1095
+
1096
+ result = Braintree::PaymentMethod.create(
1097
+ :customer_id => customer.id,
1098
+ :payment_method_nonce => Braintree::Test::Nonce::ApplePayVisa,
1099
+ :options => {
1100
+ :verify_card => true,
1101
+ :verification_amount => "0.001",
1102
+ :verification_merchant_account_id => SpecHelper::NonDefaultMerchantAccountId,
1103
+ },
1104
+ )
1105
+
1106
+ expect(result).to_not be_success
1107
+ expect(result.errors.for(:apple_pay).for(:options).on(:verification_amount)[0].code).to eq Braintree::ErrorCodes::ApplePay::Options::VerificationAmountFormatIsInvalid
1108
+ end
1109
+
1110
+ it "errors when verification amount is not supported for processor on apple pay" do
1111
+ customer = Braintree::Customer.create!
1112
+
1113
+ result = Braintree::PaymentMethod.create(
1114
+ :customer_id => customer.id,
1115
+ :payment_method_nonce => Braintree::Test::Nonce::ApplePayVisa,
1116
+ :options => {
1117
+ :verify_card => true,
1118
+ :verification_amount => "0.01",
1119
+ :verification_merchant_account_id => SpecHelper::CardProcessorBRLMerchantAccountId,
1120
+ },
1121
+ )
1122
+
1123
+ expect(result).to_not be_success
1124
+ expect(result.errors.for(:apple_pay).for(:options).on(:verification_amount)[0].code).to eq Braintree::ErrorCodes::ApplePay::Options::VerificationAmountNotSupportedByProcessor
1125
+ end
1126
+
1127
+ it "errors when verification amount is too large on apple pay" do
1128
+ customer = Braintree::Customer.create!
1129
+
1130
+ result = Braintree::PaymentMethod.create(
1131
+ :customer_id => customer.id,
1132
+ :payment_method_nonce => Braintree::Test::Nonce::ApplePayVisa,
1133
+ :options => {
1134
+ :verify_card => true,
1135
+ :verification_amount => ((2**31) / 100.0).to_s,
1136
+ :verification_merchant_account_id => SpecHelper::NonDefaultMerchantAccountId,
1137
+ },
1138
+ )
1139
+
1140
+ expect(result).to_not be_success
1141
+ expect(result.errors.for(:apple_pay).for(:options).on(:verification_amount)[0].code).to eq Braintree::ErrorCodes::ApplePay::Options::VerificationAmountIsTooLarge
1142
+ end
1143
+
1144
+ it "errors when verification merchant account is invalid" do
1145
+ customer = Braintree::Customer.create!
1146
+
1147
+ result = Braintree::PaymentMethod.create(
1148
+ :customer_id => customer.id,
1149
+ :payment_method_nonce => Braintree::Test::Nonce::ApplePayVisa,
1150
+ :options => {
1151
+ :verify_card => true,
1152
+ :verification_amount => "10.00",
1153
+ :verification_merchant_account_id => "BAD_MERCHANT_ACCOUNT",
1154
+ },
1155
+ )
1156
+
1157
+ expect(result).to_not be_success
1158
+ expect(result.errors.for(:apple_pay).for(:options).on(:verification_merchant_account_id)[0].code).to eq Braintree::ErrorCodes::ApplePay::Options::VerificationMerchantAccountIdIsInvalid
1159
+ end
1160
+
1161
+ it "errors when verification merchant account is suspended" do
1162
+ customer = Braintree::Customer.create!
1163
+
1164
+ result = Braintree::PaymentMethod.create(
1165
+ :customer_id => customer.id,
1166
+ :payment_method_nonce => Braintree::Test::Nonce::ApplePayVisa,
1167
+ :options => {
1168
+ :verify_card => true,
1169
+ :verification_amount => "10.00",
1170
+ :verification_merchant_account_id => SpecHelper::SuspendedAccount,
1171
+ },
1172
+ )
1173
+
1174
+ expect(result).to_not be_success
1175
+ expect(result.errors.for(:apple_pay).for(:options).on(:verification_merchant_account_id)[1].code).to eq Braintree::ErrorCodes::ApplePay::Options::VerificationMerchantAccountIsSuspended
1176
+ end
1177
+
1178
+ it "errors when account_type not supported by merchant on apple_pay" do
1179
+ customer = Braintree::Customer.create!
1180
+
1181
+ result = Braintree::PaymentMethod.create(
1182
+ :customer_id => customer.id,
1183
+ :payment_method_nonce => Braintree::Test::Nonce::ApplePayVisa,
1184
+ :options => {
1185
+ :verify_card => true,
1186
+ :verification_amount => "10.00",
1187
+ :verification_merchant_account_id => SpecHelper::NonDefaultMerchantAccountId,
1188
+ :verification_account_type => "credit",
1189
+ },
1190
+ )
1191
+
1192
+ expect(result).to_not be_success
1193
+ expect(result.errors.for(:apple_pay).for(:options).on(:verification_account_type)[0].code).to eq Braintree::ErrorCodes::ApplePay::Options::VerificationAccountTypeNotSupported
1194
+ end
1195
+
1023
1196
  context "verification_currency_iso_code" do
1024
1197
  it "validates verification_currency_iso_code against currency configured in default merchant account" do
1025
1198
  nonce = nonce_for_new_payment_method(