braintree 2.10.0 → 4.26.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 (353) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +1 -1
  3. data/braintree.gemspec +24 -0
  4. data/lib/braintree/account_updater_daily_report.rb +20 -0
  5. data/lib/braintree/ach_mandate.rb +14 -0
  6. data/lib/braintree/add_on.rb +4 -0
  7. data/lib/braintree/add_on_gateway.rb +17 -0
  8. data/lib/braintree/address/country_names.rb +4 -1
  9. data/lib/braintree/address.rb +35 -43
  10. data/lib/braintree/address_gateway.rb +24 -11
  11. data/lib/braintree/advanced_search.rb +26 -11
  12. data/lib/braintree/apple_pay.rb +29 -0
  13. data/lib/braintree/apple_pay_card.rb +66 -0
  14. data/lib/braintree/apple_pay_gateway.rb +37 -0
  15. data/lib/braintree/apple_pay_options.rb +19 -0
  16. data/lib/braintree/authorization_adjustment.rb +23 -0
  17. data/lib/braintree/base_module.rb +11 -1
  18. data/lib/braintree/bin_data.rb +34 -0
  19. data/lib/braintree/client_token.rb +11 -0
  20. data/lib/braintree/client_token_gateway.rb +45 -0
  21. data/lib/braintree/configuration.rb +231 -39
  22. data/lib/braintree/connected_merchant_paypal_status_changed.rb +22 -0
  23. data/lib/braintree/connected_merchant_status_transitioned.rb +22 -0
  24. data/lib/braintree/credentials_parser.rb +44 -0
  25. data/lib/braintree/credit_card.rb +107 -132
  26. data/lib/braintree/credit_card_gateway.rb +90 -41
  27. data/lib/braintree/credit_card_verification.rb +90 -17
  28. data/lib/braintree/credit_card_verification_gateway.rb +87 -0
  29. data/lib/braintree/credit_card_verification_search.rb +20 -0
  30. data/lib/braintree/customer.rb +80 -118
  31. data/lib/braintree/customer_gateway.rb +66 -39
  32. data/lib/braintree/customer_search.rb +5 -2
  33. data/lib/braintree/customer_session_gateway.rb +194 -0
  34. data/lib/braintree/descriptor.rb +4 -2
  35. data/lib/braintree/digest.rb +16 -3
  36. data/lib/braintree/disbursement.rb +63 -0
  37. data/lib/braintree/discount.rb +4 -0
  38. data/lib/braintree/discount_gateway.rb +17 -0
  39. data/lib/braintree/dispute/evidence.rb +24 -0
  40. data/lib/braintree/dispute/paypal_message.rb +15 -0
  41. data/lib/braintree/dispute/status_history.rb +18 -0
  42. data/lib/braintree/dispute/transaction.rb +20 -0
  43. data/lib/braintree/dispute/transaction_details.rb +15 -0
  44. data/lib/braintree/dispute.rb +165 -0
  45. data/lib/braintree/dispute_gateway.rb +142 -0
  46. data/lib/braintree/dispute_search.rb +31 -0
  47. data/lib/braintree/document_upload.rb +37 -0
  48. data/lib/braintree/document_upload_gateway.rb +38 -0
  49. data/lib/braintree/enriched_customer_data.rb +21 -0
  50. data/lib/braintree/error_codes.rb +680 -15
  51. data/lib/braintree/error_result.rb +13 -6
  52. data/lib/braintree/errors.rb +5 -5
  53. data/lib/braintree/exceptions.rb +14 -20
  54. data/lib/braintree/exchange_rate.rb +13 -0
  55. data/lib/braintree/exchange_rate_quote.rb +24 -0
  56. data/lib/braintree/exchange_rate_quote_gateway.rb +35 -0
  57. data/lib/braintree/exchange_rate_quote_input.rb +21 -0
  58. data/lib/braintree/exchange_rate_quote_request.rb +18 -0
  59. data/lib/braintree/exchange_rate_quote_response.rb +18 -0
  60. data/lib/braintree/facilitated_details.rb +21 -0
  61. data/lib/braintree/facilitator_details.rb +20 -0
  62. data/lib/braintree/gateway.rb +104 -6
  63. data/lib/braintree/google_pay_card.rb +62 -0
  64. data/lib/braintree/granted_payment_instrument_update.rb +23 -0
  65. data/lib/braintree/graphql/enums/recommendations.rb +7 -0
  66. data/lib/braintree/graphql/enums/recommended_payment_option.rb +8 -0
  67. data/lib/braintree/graphql/inputs/create_customer_session_input.rb +35 -0
  68. data/lib/braintree/graphql/inputs/customer_recommendations_input.rb +41 -0
  69. data/lib/braintree/graphql/inputs/customer_session_input.rb +39 -0
  70. data/lib/braintree/graphql/inputs/phone_input.rb +32 -0
  71. data/lib/braintree/graphql/inputs/update_customer_session_input.rb +37 -0
  72. data/lib/braintree/graphql/types/customer_recommendations_payload.rb +32 -0
  73. data/lib/braintree/graphql/types/payment_options.rb +33 -0
  74. data/lib/braintree/graphql/unions/customer_recommendations.rb +34 -0
  75. data/lib/braintree/graphql_client.rb +50 -0
  76. data/lib/braintree/http.rb +119 -25
  77. data/lib/braintree/local_payment_completed/blik_alias.rb +23 -0
  78. data/lib/braintree/local_payment_completed.rb +28 -0
  79. data/lib/braintree/local_payment_expired.rb +21 -0
  80. data/lib/braintree/local_payment_funded.rb +22 -0
  81. data/lib/braintree/local_payment_reversed.rb +19 -0
  82. data/lib/braintree/merchant.rb +34 -0
  83. data/lib/braintree/merchant_account/address_details.rb +16 -0
  84. data/lib/braintree/merchant_account/business_details.rb +17 -0
  85. data/lib/braintree/merchant_account/funding_details.rb +18 -0
  86. data/lib/braintree/merchant_account/individual_details.rb +20 -0
  87. data/lib/braintree/merchant_account.rb +76 -0
  88. data/lib/braintree/merchant_account_gateway.rb +130 -0
  89. data/lib/braintree/merchant_gateway.rb +38 -0
  90. data/lib/braintree/meta_checkout_card.rb +90 -0
  91. data/lib/braintree/meta_checkout_token.rb +89 -0
  92. data/lib/braintree/modification.rb +16 -5
  93. data/lib/braintree/oauth_credentials.rb +22 -0
  94. data/lib/braintree/oauth_gateway.rb +73 -0
  95. data/lib/braintree/paginated_collection.rb +25 -0
  96. data/lib/braintree/paginated_result.rb +15 -0
  97. data/lib/braintree/payment_instrument_type.rb +18 -0
  98. data/lib/braintree/payment_method.rb +37 -0
  99. data/lib/braintree/payment_method_customer_data_updated_metadata.rb +24 -0
  100. data/lib/braintree/payment_method_gateway.rb +221 -0
  101. data/lib/braintree/payment_method_nonce.rb +49 -0
  102. data/lib/braintree/payment_method_nonce_details.rb +40 -0
  103. data/lib/braintree/payment_method_nonce_details_payer_info.rb +32 -0
  104. data/lib/braintree/payment_method_nonce_gateway.rb +38 -0
  105. data/lib/braintree/payment_method_parser.rb +29 -0
  106. data/lib/braintree/paypal_account.rb +60 -0
  107. data/lib/braintree/paypal_account_gateway.rb +73 -0
  108. data/lib/braintree/paypal_payment_resource.rb +22 -0
  109. data/lib/braintree/paypal_payment_resource_gateway.rb +36 -0
  110. data/lib/braintree/plan.rb +62 -0
  111. data/lib/braintree/plan_gateway.rb +117 -0
  112. data/lib/braintree/processor_response_types.rb +7 -0
  113. data/lib/braintree/resource_collection.rb +12 -5
  114. data/lib/braintree/revoked_payment_method_metadata.rb +22 -0
  115. data/lib/braintree/risk_data/liability_shift.rb +22 -0
  116. data/lib/braintree/risk_data.rb +29 -0
  117. data/lib/braintree/samsung_pay_card.rb +85 -0
  118. data/lib/braintree/sepa_direct_debit_account.rb +60 -0
  119. data/lib/braintree/sepa_direct_debit_account_gateway.rb +25 -0
  120. data/lib/braintree/sepa_direct_debit_account_nonce_details.rb +28 -0
  121. data/lib/braintree/settlement_batch_summary.rb +25 -0
  122. data/lib/braintree/settlement_batch_summary_gateway.rb +27 -0
  123. data/lib/braintree/sha256_digest.rb +13 -0
  124. data/lib/braintree/signature_service.rb +19 -0
  125. data/lib/braintree/subscription/status_details.rb +20 -0
  126. data/lib/braintree/subscription.rb +67 -47
  127. data/lib/braintree/subscription_gateway.rb +43 -16
  128. data/lib/braintree/subscription_search.rb +2 -2
  129. data/lib/braintree/successful_result.rb +30 -10
  130. data/lib/braintree/test/authentication_id.rb +21 -0
  131. data/lib/braintree/test/credit_card.rb +76 -0
  132. data/lib/braintree/test/merchant_account.rb +12 -0
  133. data/lib/braintree/test/nonce.rb +81 -0
  134. data/lib/braintree/test/transaction_amounts.rb +3 -5
  135. data/lib/braintree/test/venmo_sdk.rb +21 -0
  136. data/lib/braintree/test_transaction.rb +19 -0
  137. data/lib/braintree/testing_gateway.rb +43 -0
  138. data/lib/braintree/three_d_secure_info.rb +53 -0
  139. data/lib/braintree/transaction/address_details.rb +27 -5
  140. data/lib/braintree/transaction/apple_pay_details.rb +35 -0
  141. data/lib/braintree/transaction/credit_card_details.rb +55 -4
  142. data/lib/braintree/transaction/customer_details.rb +11 -3
  143. data/lib/braintree/transaction/disbursement_details.rb +28 -0
  144. data/lib/braintree/transaction/google_pay_details.rb +42 -0
  145. data/lib/braintree/transaction/installment/adjustment.rb +33 -0
  146. data/lib/braintree/transaction/installment.rb +28 -0
  147. data/lib/braintree/transaction/local_payment_details.rb +27 -0
  148. data/lib/braintree/transaction/meta_checkout_card_details.rb +55 -0
  149. data/lib/braintree/transaction/meta_checkout_token_details.rb +58 -0
  150. data/lib/braintree/transaction/package_details.rb +19 -0
  151. data/lib/braintree/transaction/payment_receipt/card_present_data.rb +36 -0
  152. data/lib/braintree/transaction/payment_receipt/merchant_address.rb +19 -0
  153. data/lib/braintree/transaction/payment_receipt.rb +31 -0
  154. data/lib/braintree/transaction/paypal_details.rb +40 -0
  155. data/lib/braintree/transaction/paypal_here_details.rb +23 -0
  156. data/lib/braintree/transaction/samsung_pay_card_details.rb +50 -0
  157. data/lib/braintree/transaction/sepa_direct_debit_account_details.rb +27 -0
  158. data/lib/braintree/transaction/status_details.rb +6 -2
  159. data/lib/braintree/transaction/subscription_details.rb +5 -2
  160. data/lib/braintree/transaction/us_bank_account_details.rb +22 -0
  161. data/lib/braintree/transaction/venmo_account_details.rb +17 -0
  162. data/lib/braintree/transaction/visa_checkout_card_details.rb +51 -0
  163. data/lib/braintree/transaction.rb +293 -150
  164. data/lib/braintree/transaction_gateway.rb +303 -59
  165. data/lib/braintree/transaction_line_item.rb +43 -0
  166. data/lib/braintree/transaction_line_item_gateway.rb +19 -0
  167. data/lib/braintree/transaction_review.rb +18 -0
  168. data/lib/braintree/transaction_search.rb +17 -9
  169. data/lib/braintree/unknown_payment_method.rb +26 -0
  170. data/lib/braintree/us_bank_account.rb +57 -0
  171. data/lib/braintree/us_bank_account_gateway.rb +17 -0
  172. data/lib/braintree/us_bank_account_verification.rb +89 -0
  173. data/lib/braintree/us_bank_account_verification_gateway.rb +51 -0
  174. data/lib/braintree/us_bank_account_verification_search.rb +19 -0
  175. data/lib/braintree/util.rb +91 -11
  176. data/lib/braintree/validation_error.rb +14 -5
  177. data/lib/braintree/validation_error_collection.rb +5 -5
  178. data/lib/braintree/venmo_account.rb +34 -0
  179. data/lib/braintree/venmo_profile_data.rb +25 -0
  180. data/lib/braintree/version.rb +2 -2
  181. data/lib/braintree/visa_checkout_card.rb +90 -0
  182. data/lib/braintree/webhook_notification.rb +146 -0
  183. data/lib/braintree/webhook_notification_gateway.rb +46 -0
  184. data/lib/braintree/webhook_testing.rb +7 -0
  185. data/lib/braintree/webhook_testing_gateway.rb +1239 -0
  186. data/lib/braintree/xml/generator.rb +18 -10
  187. data/lib/braintree/xml/libxml.rb +1 -1
  188. data/lib/braintree/xml/parser.rb +24 -36
  189. data/lib/braintree/xml/rexml.rb +6 -7
  190. data/lib/braintree/xml.rb +1 -2
  191. data/lib/braintree.rb +186 -52
  192. data/lib/ssl/api_braintreegateway_com.ca.crt +474 -0
  193. data/spec/fixtures/files/bt_logo.png +0 -0
  194. data/spec/fixtures/files/gif_extension_bt_logo.gif +0 -0
  195. data/spec/fixtures/files/malformed_pdf.pdf +1 -0
  196. data/spec/fixtures/files/too_long.pdf +0 -0
  197. data/spec/integration/braintree/add_on_spec.rb +46 -0
  198. data/spec/integration/braintree/address_spec.rb +101 -178
  199. data/spec/integration/braintree/advanced_search_spec.rb +100 -97
  200. data/spec/integration/braintree/apple_pay_spec.rb +63 -0
  201. data/spec/integration/braintree/braintree_gateway_spec.rb +72 -0
  202. data/spec/integration/braintree/client_api/client_token_spec.rb +407 -0
  203. data/spec/integration/braintree/client_api/spec_helper.rb +300 -0
  204. data/spec/integration/braintree/credit_card_spec.rb +885 -654
  205. data/spec/integration/braintree/credit_card_verification_search_spec.rb +193 -0
  206. data/spec/integration/braintree/credit_card_verification_spec.rb +473 -0
  207. data/spec/integration/braintree/customer_search_spec.rb +69 -21
  208. data/spec/integration/braintree/customer_session_spec.rb +143 -0
  209. data/spec/integration/braintree/customer_spec.rb +1437 -518
  210. data/spec/integration/braintree/disbursement_spec.rb +31 -0
  211. data/spec/integration/braintree/discount_spec.rb +34 -0
  212. data/spec/integration/braintree/dispute_search_spec.rb +165 -0
  213. data/spec/integration/braintree/dispute_spec.rb +333 -0
  214. data/spec/integration/braintree/document_upload_spec.rb +87 -0
  215. data/spec/integration/braintree/error_codes_spec.rb +3 -3
  216. data/spec/integration/braintree/exchange_rate_quote_spec.rb +97 -0
  217. data/spec/integration/braintree/graphql_client_spec.rb +72 -0
  218. data/spec/integration/braintree/http_spec.rb +106 -56
  219. data/spec/integration/braintree/merchant_account_spec.rb +603 -0
  220. data/spec/integration/braintree/merchant_spec.rb +227 -0
  221. data/spec/integration/braintree/oauth_spec.rb +225 -0
  222. data/spec/integration/braintree/package_tracking_spec.rb +130 -0
  223. data/spec/integration/braintree/payment_method_nonce_spec.rb +345 -0
  224. data/spec/integration/braintree/payment_method_spec.rb +2146 -0
  225. data/spec/integration/braintree/payment_method_us_bank_account_spec.rb +325 -0
  226. data/spec/integration/braintree/paypal_account_spec.rb +299 -0
  227. data/spec/integration/braintree/paypal_payment_resource_spec.rb +141 -0
  228. data/spec/integration/braintree/plan_spec.rb +136 -0
  229. data/spec/integration/braintree/samsung_pay_card_spec.rb +146 -0
  230. data/spec/integration/braintree/sepa_direct_debit_account_spec.rb +194 -0
  231. data/spec/integration/braintree/settlement_batch_summary_spec.rb +62 -0
  232. data/spec/integration/braintree/subscription_spec.rb +785 -431
  233. data/spec/integration/braintree/test/transaction_amounts_spec.rb +4 -4
  234. data/spec/integration/braintree/test_transaction_spec.rb +145 -0
  235. data/spec/integration/braintree/transaction_line_item_spec.rb +44 -0
  236. data/spec/integration/braintree/transaction_search_spec.rb +745 -156
  237. data/spec/integration/braintree/transaction_spec.rb +7452 -1288
  238. data/spec/integration/braintree/transaction_us_bank_account_spec.rb +196 -0
  239. data/spec/integration/braintree/us_bank_account_spec.rb +113 -0
  240. data/spec/integration/braintree/us_bank_account_verification_search_spec.rb +178 -0
  241. data/spec/integration/braintree/us_bank_account_verification_spec.rb +240 -0
  242. data/spec/integration/braintree/visa_checkout_card_spec.rb +110 -0
  243. data/spec/integration/spec_helper.rb +61 -5
  244. data/spec/oauth_test_helper.rb +17 -0
  245. data/spec/script/httpsd.rb +6 -6
  246. data/spec/spec.opts +4 -0
  247. data/spec/spec_helper.rb +77 -21
  248. data/spec/ssl/certificate.crt +17 -0
  249. data/spec/ssl/geotrust_global.crt +20 -0
  250. data/spec/ssl/privateKey.key +15 -0
  251. data/spec/unit/braintree/address_spec.rb +27 -16
  252. data/spec/unit/braintree/apple_pay_card_spec.rb +133 -0
  253. data/spec/unit/braintree/base_module_spec.rb +4 -4
  254. data/spec/unit/braintree/client_token_spec.rb +37 -0
  255. data/spec/unit/braintree/configuration_spec.rb +293 -43
  256. data/spec/unit/braintree/credentials_parser_spec.rb +81 -0
  257. data/spec/unit/braintree/credit_card_spec.rb +138 -47
  258. data/spec/unit/braintree/credit_card_verification_gateway_spec.rb +56 -0
  259. data/spec/unit/braintree/credit_card_verification_search_spec.rb +79 -0
  260. data/spec/unit/braintree/credit_card_verification_spec.rb +132 -6
  261. data/spec/unit/braintree/customer_session_gateway_spec.rb +120 -0
  262. data/spec/unit/braintree/customer_spec.rb +196 -40
  263. data/spec/unit/braintree/digest_spec.rb +16 -3
  264. data/spec/unit/braintree/disbursement_spec.rb +131 -0
  265. data/spec/unit/braintree/dispute_search_spec.rb +66 -0
  266. data/spec/unit/braintree/dispute_spec.rb +479 -0
  267. data/spec/unit/braintree/document_upload_spec.rb +35 -0
  268. data/spec/unit/braintree/enriched_customer_data_spec.rb +41 -0
  269. data/spec/unit/braintree/error_result_spec.rb +11 -11
  270. data/spec/unit/braintree/errors_spec.rb +17 -17
  271. data/spec/unit/braintree/exchange_rate_quote_input_spec.rb +42 -0
  272. data/spec/unit/braintree/exchange_rate_quote_request_spec.rb +82 -0
  273. data/spec/unit/braintree/exchange_rate_quote_response_spec.rb +52 -0
  274. data/spec/unit/braintree/exchange_rate_quote_spec.rb +42 -0
  275. data/spec/unit/braintree/exchange_rate_spec.rb +23 -0
  276. data/spec/unit/braintree/google_pay_card_spec.rb +8 -0
  277. data/spec/unit/braintree/graphql/create_customer_session_input_spec.rb +81 -0
  278. data/spec/unit/braintree/graphql/customer_recommendations_input_spec.rb +110 -0
  279. data/spec/unit/braintree/graphql/customer_session_input_spec.rb +81 -0
  280. data/spec/unit/braintree/graphql/phone_input_spec.rb +51 -0
  281. data/spec/unit/braintree/graphql/update_customer_session_input_spec.rb +93 -0
  282. data/spec/unit/braintree/graphql_client_spec.rb +37 -0
  283. data/spec/unit/braintree/http_spec.rb +164 -2
  284. data/spec/unit/braintree/local_payment_completed_spec.rb +90 -0
  285. data/spec/unit/braintree/local_payment_expired_spec.rb +24 -0
  286. data/spec/unit/braintree/local_payment_funded_spec.rb +34 -0
  287. data/spec/unit/braintree/merchant_account_spec.rb +33 -0
  288. data/spec/unit/braintree/meta_checkout_card_details_spec.rb +60 -0
  289. data/spec/unit/braintree/meta_checkout_card_spec.rb +62 -0
  290. data/spec/unit/braintree/meta_checkout_token_details_spec.rb +63 -0
  291. data/spec/unit/braintree/meta_checkout_token_spec.rb +65 -0
  292. data/spec/unit/braintree/modification_spec.rb +7 -0
  293. data/spec/unit/braintree/package_tracking_spec.rb +77 -0
  294. data/spec/unit/braintree/payment_method_customer_data_updated_metadata_spec.rb +45 -0
  295. data/spec/unit/braintree/payment_method_nonce_details_payer_info_spec.rb +31 -0
  296. data/spec/unit/braintree/payment_method_nonce_details_spec.rb +51 -0
  297. data/spec/unit/braintree/payment_method_nonce_spec.rb +43 -0
  298. data/spec/unit/braintree/payment_method_spec.rb +135 -0
  299. data/spec/unit/braintree/paypal_account_spec.rb +53 -0
  300. data/spec/unit/braintree/paypal_payment_resource_spec.rb +125 -0
  301. data/spec/unit/braintree/resource_collection_spec.rb +44 -3
  302. data/spec/unit/braintree/risk_data/liability_shift.rb +26 -0
  303. data/spec/unit/braintree/risk_data_spec.rb +55 -0
  304. data/spec/unit/braintree/sepa_debit_account_nonce_details_spec.rb +29 -0
  305. data/spec/unit/braintree/sepa_debit_account_spec.rb +86 -0
  306. data/spec/unit/braintree/sha256_digest_spec.rb +11 -0
  307. data/spec/unit/braintree/signature_service_spec.rb +23 -0
  308. data/spec/unit/braintree/subscription_search_spec.rb +25 -18
  309. data/spec/unit/braintree/subscription_spec.rb +34 -7
  310. data/spec/unit/braintree/successful_result_spec.rb +9 -9
  311. data/spec/unit/braintree/three_d_secure_info_spec.rb +69 -0
  312. data/spec/unit/braintree/transaction/apple_pay_details_spec.rb +8 -0
  313. data/spec/unit/braintree/transaction/credit_card_details_spec.rb +34 -6
  314. data/spec/unit/braintree/transaction/customer_details_spec.rb +3 -2
  315. data/spec/unit/braintree/transaction/deposit_details_spec.rb +18 -0
  316. data/spec/unit/braintree/transaction/google_pay_details_spec.rb +8 -0
  317. data/spec/unit/braintree/transaction/installment_spec.rb +25 -0
  318. data/spec/unit/braintree/transaction/local_payment_details_spec.rb +36 -0
  319. data/spec/unit/braintree/transaction/meta_checkout_card_details_spec.rb +8 -0
  320. data/spec/unit/braintree/transaction/meta_checkout_token_details_spec.rb +8 -0
  321. data/spec/unit/braintree/transaction/payment_receipt_spec.rb +73 -0
  322. data/spec/unit/braintree/transaction/paypal_details_spec.rb +68 -0
  323. data/spec/unit/braintree/transaction/sepa_direct_debit_account_details_spec.rb +33 -0
  324. data/spec/unit/braintree/transaction/visa_checkout_card_details_spec.rb +8 -0
  325. data/spec/unit/braintree/transaction_gateway_spec.rb +150 -0
  326. data/spec/unit/braintree/transaction_search_spec.rb +12 -12
  327. data/spec/unit/braintree/transaction_spec.rb +366 -52
  328. data/spec/unit/braintree/unknown_payment_method_spec.rb +33 -0
  329. data/spec/unit/braintree/us_bank_account_spec.rb +13 -0
  330. data/spec/unit/braintree/us_bank_account_verification_search_spec.rb +60 -0
  331. data/spec/unit/braintree/us_bank_account_verification_spec.rb +98 -0
  332. data/spec/unit/braintree/util_spec.rb +199 -39
  333. data/spec/unit/braintree/validation_error_collection_spec.rb +336 -133
  334. data/spec/unit/braintree/validation_error_spec.rb +4 -4
  335. data/spec/unit/braintree/venmo_profile_data_spec.rb +43 -0
  336. data/spec/unit/braintree/visa_checkout_card_spec.rb +8 -0
  337. data/spec/unit/braintree/webhook_notification_spec.rb +977 -0
  338. data/spec/unit/braintree/xml/libxml_spec.rb +5 -5
  339. data/spec/unit/braintree/xml/parser_spec.rb +39 -5
  340. data/spec/unit/braintree/xml/rexml_spec.rb +5 -5
  341. data/spec/unit/braintree/xml_spec.rb +39 -32
  342. data/spec/unit/braintree_spec.rb +3 -2
  343. data/spec/unit/credit_card_details_spec.rb +8 -0
  344. metadata +314 -73
  345. data/README.rdoc +0 -80
  346. data/lib/braintree/test/credit_card_numbers.rb +0 -52
  347. data/lib/braintree/transparent_redirect.rb +0 -51
  348. data/lib/braintree/transparent_redirect_gateway.rb +0 -105
  349. data/lib/ssl/sandbox_braintreegateway_com.ca.crt +0 -19
  350. data/lib/ssl/www_braintreegateway_com.ca.crt +0 -202
  351. data/spec/hacks/tcp_socket.rb +0 -18
  352. data/spec/integration/braintree/transparent_redirect_spec.rb +0 -236
  353. data/spec/unit/braintree/transparent_redirect_spec.rb +0 -160
@@ -4,14 +4,14 @@ describe Braintree::CreditCard do
4
4
  describe "self.create" do
5
5
  it "raises an exception if attributes contain an invalid key" do
6
6
  expect do
7
- Braintree::CreditCard.create(:invalid_key => 'val')
7
+ Braintree::CreditCard.create(:invalid_key => "val")
8
8
  end.to raise_error(ArgumentError, "invalid keys: invalid_key")
9
9
  end
10
10
  end
11
11
 
12
12
  describe "self.create_signature" do
13
13
  it "should be what we expect" do
14
- Braintree::CreditCardGateway._create_signature.should == [
14
+ expect(Braintree::CreditCardGateway._create_signature).to match([
15
15
  :billing_address_id,
16
16
  :cardholder_name,
17
17
  :cvv,
@@ -20,7 +20,12 @@ describe Braintree::CreditCard do
20
20
  :expiration_year,
21
21
  :number,
22
22
  :token,
23
- {:options => [:make_default, :verification_merchant_account_id, :verify_card]},
23
+ :venmo_sdk_payment_method_code, # NEXT_MAJOR_VERSION Remove this attribute
24
+ :device_data,
25
+ :payment_method_nonce,
26
+ {:external_vault=>[:network_transaction_id]},
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, :fail_on_duplicate_payment_method_for_customer, :verification_account_type, :verification_currency_iso_code])},
24
29
  {:billing_address => [
25
30
  :company,
26
31
  :country_code_alpha2,
@@ -29,20 +34,32 @@ describe Braintree::CreditCard do
29
34
  :country_name,
30
35
  :extended_address,
31
36
  :first_name,
37
+ {:international_phone=>[:country_code, :national_number]},
32
38
  :last_name,
33
39
  :locality,
40
+ :phone_number,
34
41
  :postal_code,
35
42
  :region,
36
43
  :street_address
37
44
  ]},
38
- :customer_id
39
- ]
45
+ {:three_d_secure_pass_thru => [
46
+ :eci_flag,
47
+ :cavv,
48
+ :xid,
49
+ :three_d_secure_version,
50
+ :authentication_response,
51
+ :directory_response,
52
+ :cavv_algorithm,
53
+ :ds_transaction_id,
54
+ ]},
55
+ :customer_id,
56
+ ])
40
57
  end
41
58
  end
42
59
 
43
60
  describe "self.update_signature" do
44
61
  it "should be what we expect" do
45
- Braintree::CreditCardGateway._update_signature.should == [
62
+ expect(Braintree::CreditCardGateway._update_signature).to match([
46
63
  :billing_address_id,
47
64
  :cardholder_name,
48
65
  :cvv,
@@ -51,7 +68,12 @@ describe Braintree::CreditCard do
51
68
  :expiration_year,
52
69
  :number,
53
70
  :token,
54
- {:options => [:make_default, :verification_merchant_account_id, :verify_card]},
71
+ :venmo_sdk_payment_method_code, # NEXT_MAJOR_VERSION Remove this attribute
72
+ :device_data,
73
+ :payment_method_nonce,
74
+ {:external_vault=>[:network_transaction_id]},
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, :fail_on_duplicate_payment_method_for_customer, :verification_account_type, :verification_currency_iso_code])},
55
77
  {:billing_address => [
56
78
  :company,
57
79
  :country_code_alpha2,
@@ -60,29 +82,26 @@ describe Braintree::CreditCard do
60
82
  :country_name,
61
83
  :extended_address,
62
84
  :first_name,
85
+ {:international_phone=>[:country_code, :national_number]},
63
86
  :last_name,
64
87
  :locality,
88
+ :phone_number,
65
89
  :postal_code,
66
90
  :region,
67
91
  :street_address,
68
92
  {:options => [:update_existing]}
69
- ]}
70
- ]
71
- end
72
- end
73
-
74
- describe "self.create_from_transparent_redirect" do
75
- it "raises an exception if the query string is forged" do
76
- expect do
77
- Braintree::CreditCard.create_from_transparent_redirect("http_status=200&forged=query_string")
78
- end.to raise_error(Braintree::ForgedQueryString)
79
- end
80
- end
81
-
82
- describe "self.create_credit_card_url" do
83
- it "returns the url" do
84
- port = Braintree::Configuration.instantiate.port
85
- Braintree::CreditCard.create_credit_card_url.should == "http://localhost:#{port}/merchants/integration_merchant_id/payment_methods/all/create_via_transparent_redirect_request"
93
+ ]},
94
+ {:three_d_secure_pass_thru => [
95
+ :eci_flag,
96
+ :cavv,
97
+ :xid,
98
+ :three_d_secure_version,
99
+ :authentication_response,
100
+ :directory_response,
101
+ :cavv_algorithm,
102
+ :ds_transaction_id,
103
+ ]},
104
+ ])
86
105
  end
87
106
  end
88
107
 
@@ -91,38 +110,65 @@ describe Braintree::CreditCard do
91
110
  first = Braintree::CreditCard._new(:gateway, :token => 123)
92
111
  second = Braintree::CreditCard._new(:gateway, :token => 123)
93
112
 
94
- first.should == second
95
- second.should == first
113
+ expect(first).to eq(second)
114
+ expect(second).to eq(first)
96
115
  end
97
116
 
98
117
  it "returns false if given a credit card with a different token" do
99
118
  first = Braintree::CreditCard._new(:gateway, :token => 123)
100
119
  second = Braintree::CreditCard._new(:gateway, :token => 124)
101
120
 
102
- first.should_not == second
103
- second.should_not == first
121
+ expect(first).not_to eq(second)
122
+ expect(second).not_to eq(first)
104
123
  end
105
124
 
106
125
  it "returns false if not given a credit card" do
107
126
  credit_card = Braintree::CreditCard._new(:gateway, :token => 123)
108
- credit_card.should_not == "not a credit card"
127
+ expect(credit_card).not_to eq("not a credit card")
109
128
  end
110
129
  end
111
130
 
112
131
  describe "default?" do
113
132
  it "is true if the credit card is the default credit card for the customer" do
114
- Braintree::CreditCard._new(:gateway, :default => true).default?.should == true
133
+ expect(Braintree::CreditCard._new(:gateway, :default => true).default?).to eq(true)
115
134
  end
116
135
 
117
136
  it "is false if the credit card is not the default credit card for the customer" do
118
- Braintree::CreditCard._new(:gateway, :default => false).default?.should == false
137
+ expect(Braintree::CreditCard._new(:gateway, :default => false).default?).to eq(false)
138
+ end
139
+ end
140
+
141
+ describe "self.find" do
142
+ it "raises error if passed empty string" do
143
+ expect do
144
+ Braintree::CreditCard.find("")
145
+ end.to raise_error(ArgumentError)
146
+ end
147
+
148
+ it "raises error if passed invalid string" do
149
+ expect do
150
+ Braintree::CreditCard.find("\t")
151
+ end.to raise_error(ArgumentError)
152
+ end
153
+
154
+ it "raises error if passed nil" do
155
+ expect do
156
+ Braintree::CreditCard.find(nil)
157
+ end.to raise_error(ArgumentError)
158
+ end
159
+
160
+ it "does not raise an error if address_id does not respond to strip" do
161
+ allow(Braintree::Http).to receive(:new).and_return double.as_null_object
162
+ expect do
163
+ Braintree::CreditCard.find(8675309)
164
+ end.to_not raise_error
119
165
  end
120
166
  end
121
167
 
122
168
  describe "inspect" do
123
169
  it "includes the token first" do
124
170
  output = Braintree::CreditCard._new(:gateway, :token => "cc123").inspect
125
- output.should include("#<Braintree::CreditCard token: \"cc123\",")
171
+ expect(output).to include("#<Braintree::CreditCard token: \"cc123\",")
126
172
  end
127
173
 
128
174
  it "includes all customer attributes" do
@@ -137,20 +183,22 @@ describe Braintree::CreditCard do
137
183
  :expiration_year => "2020",
138
184
  :last_4 => "1111",
139
185
  :token => "tok1",
140
- :updated_at => Time.now
186
+ :updated_at => Time.now,
187
+ :is_network_tokenized => false,
141
188
  )
142
189
  output = credit_card.inspect
143
- output.should include(%q(bin: "411111"))
144
- output.should include(%q(card_type: "Visa"))
145
- output.should include(%q(cardholder_name: "John Miller"))
146
-
147
- output.should include(%q(customer_id: "cid1"))
148
- output.should include(%q(expiration_month: "01"))
149
- output.should include(%q(expiration_year: "2020"))
150
- output.should include(%q(last_4: "1111"))
151
- output.should include(%q(token: "tok1"))
152
- output.should include(%Q(updated_at: #{credit_card.updated_at.inspect}))
153
- output.should include(%Q(created_at: #{credit_card.created_at.inspect}))
190
+ expect(output).to include(%q(bin: "411111"))
191
+ expect(output).to include(%q(card_type: "Visa"))
192
+ expect(output).to include(%q(cardholder_name: "John Miller"))
193
+
194
+ expect(output).to include(%q(customer_id: "cid1"))
195
+ expect(output).to include(%q(expiration_month: "01"))
196
+ expect(output).to include(%q(expiration_year: "2020"))
197
+ expect(output).to include(%q(last_4: "1111"))
198
+ expect(output).to include(%q(token: "tok1"))
199
+ expect(output).to include(%Q(updated_at: #{credit_card.updated_at.inspect}))
200
+ expect(output).to include(%Q(created_at: #{credit_card.created_at.inspect}))
201
+ expect(output).to include(%q(is_network_tokenized?: false))
154
202
  end
155
203
  end
156
204
 
@@ -159,16 +207,38 @@ describe Braintree::CreditCard do
159
207
  credit_card = Braintree::CreditCard._new(
160
208
  :gateway,
161
209
  :bin => "510510",
162
- :last_4 => "5100"
210
+ :last_4 => "5100",
163
211
  )
164
- credit_card.masked_number.should == "510510******5100"
212
+ expect(credit_card.masked_number).to eq("510510******5100")
213
+ end
214
+ end
215
+
216
+ describe "is_network_tokenized?" do
217
+ it "returns true" do
218
+ credit_card = Braintree::CreditCard._new(
219
+ :gateway,
220
+ :bin => "510510",
221
+ :last_4 => "5100",
222
+ :is_network_tokenized => true,
223
+ )
224
+ expect(credit_card.is_network_tokenized?).to eq(true)
225
+ end
226
+
227
+ it "returns false" do
228
+ credit_card = Braintree::CreditCard._new(
229
+ :gateway,
230
+ :bin => "510510",
231
+ :last_4 => "5100",
232
+ :is_network_tokenized => false,
233
+ )
234
+ expect(credit_card.is_network_tokenized?).to eq(false)
165
235
  end
166
236
  end
167
237
 
168
238
  describe "self.update" do
169
239
  it "raises an exception if attributes contain an invalid key" do
170
240
  expect do
171
- Braintree::CreditCard._new(Braintree::Configuration.gateway, {}).update(:invalid_key => 'val')
241
+ Braintree::CreditCard.update(:gateway, :invalid_key => "val")
172
242
  end.to raise_error(ArgumentError, "invalid keys: invalid_key")
173
243
  end
174
244
  end
@@ -180,4 +250,25 @@ describe Braintree::CreditCard do
180
250
  end.to raise_error(NoMethodError, /protected method .new/)
181
251
  end
182
252
  end
253
+
254
+ describe "self._new" do
255
+ describe "initializing verification" do
256
+ it "picks the youngest verification" do
257
+ verification1 = {:created_at => Time.now, :id => 123}
258
+ verification2 = {:created_at => Time.now - 3600, :id => 456}
259
+ credit_card = Braintree::CreditCard._new(Braintree::Configuration.gateway, {:verifications => [verification1, verification2]})
260
+ expect(credit_card.verification.id).to eq(123)
261
+ end
262
+
263
+ it "picks nil if verifications are empty" do
264
+ credit_card = Braintree::CreditCard._new(Braintree::Configuration.gateway, {})
265
+ expect(credit_card.verification).to be_nil
266
+ end
267
+ end
268
+ end
269
+
270
+ it "initializes prepaid reloadable correctly" do
271
+ card = Braintree::CreditCard._new(:gateway, {:prepaid_reloadable => "No"})
272
+ expect(card.prepaid_reloadable).to eq("No")
273
+ end
183
274
  end
@@ -0,0 +1,56 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe Braintree::CreditCardVerificationGateway do
4
+ describe "Credit Card Verification Gateway" do
5
+ let(:gateway) do
6
+ config = Braintree::Configuration.new(
7
+ :merchant_id => "merchant_id",
8
+ :public_key => "public_key",
9
+ :private_key => "private_key",
10
+ )
11
+ Braintree::Gateway.new(config)
12
+ end
13
+
14
+ it "creates a credit card verification gateway" do
15
+ result = Braintree::CreditCardVerificationGateway.new(gateway)
16
+
17
+ expect(result.inspect).to include("merchant_id")
18
+ expect(result.inspect).to include("public_key")
19
+ expect(result.inspect).to include("private_key")
20
+ end
21
+
22
+ it "creates a credit card verification gateway signature" do
23
+ result = Braintree::CreditCardVerificationGateway._create_signature
24
+ expect(result.inspect).to include("credit_card")
25
+ expect(result.inspect).to include("billing_address")
26
+ expect(result.inspect).to include("cardholder_name")
27
+ expect(result.inspect).to include("cvv")
28
+ expect(result.inspect).to include("expiration_date")
29
+ expect(result.inspect).to include("expiration_month")
30
+ expect(result.inspect).to include("expiration_year")
31
+ expect(result.inspect).to include("number")
32
+ expect(result.inspect).to include("external_vault")
33
+ expect(result.inspect).to include("previous_network_transaction_id")
34
+ expect(result.inspect).to include("status")
35
+ expect(result.inspect).to include("intended_transaction_source")
36
+ expect(result.inspect).to include("options")
37
+ expect(result.inspect).to include("account_type")
38
+ expect(result.inspect).to include("amount")
39
+ expect(result.inspect).to include("merchant_account_id")
40
+ expect(result.inspect).to include("payment_method_nonce")
41
+ expect(result.inspect).to include("risk_data")
42
+ expect(result.inspect).to include("customer_browser")
43
+ expect(result.inspect).to include("customer_ip")
44
+ expect(result.inspect).to include("three_d_secure_authentication_id")
45
+ expect(result.inspect).to include("three_d_secure_pass_thru")
46
+ expect(result.inspect).to include("authentication_response")
47
+ expect(result.inspect).to include("cavv")
48
+ expect(result.inspect).to include("cavv_algorithm")
49
+ expect(result.inspect).to include("directory_response")
50
+ expect(result.inspect).to include("ds_transaction_id")
51
+ expect(result.inspect).to include("eci_flag")
52
+ expect(result.inspect).to include("three_d_secure_version")
53
+ expect(result.inspect).to include("xid")
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,79 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ module Braintree
4
+ describe CreditCardVerificationSearch do
5
+
6
+ context "card_type" do
7
+ it "allows All card types" do
8
+ search = CreditCardVerificationSearch.new
9
+
10
+ expect do
11
+ search.credit_card_card_type.in(
12
+ *Braintree::CreditCard::CardType::All,
13
+ )
14
+ end.not_to raise_error
15
+ end
16
+ end
17
+
18
+ context "id" do
19
+ it "is" do
20
+ search = CreditCardVerificationSearch.new
21
+ search.id.is "v_id"
22
+
23
+ expect(search.to_hash).to eq({:id => {:is => "v_id"}})
24
+ end
25
+ end
26
+
27
+ context "ids" do
28
+ it "correctly builds a hash with ids" do
29
+ search = CreditCardVerificationSearch.new
30
+ search.ids.in("id1","id2")
31
+
32
+ expect(search.to_hash).to eq({:ids => ["id1", "id2"]})
33
+ end
34
+ end
35
+
36
+ context "credit_card_cardholder_name" do
37
+ it "is" do
38
+ search = CreditCardVerificationSearch.new
39
+ search.credit_card_cardholder_name.is "v_cardholder_name"
40
+
41
+ expect(search.to_hash).to eq({:credit_card_cardholder_name => {:is => "v_cardholder_name"}})
42
+ end
43
+ end
44
+
45
+ context "credit_card_expiration_date" do
46
+ it "is_not" do
47
+ search = CreditCardVerificationSearch.new
48
+ search.credit_card_expiration_date.is_not "v_credit_card_expiration_date"
49
+
50
+ expect(search.to_hash).to eq({:credit_card_expiration_date => {:is_not => "v_credit_card_expiration_date"}})
51
+ end
52
+ end
53
+
54
+ context "credit_card_number" do
55
+ it "starts with" do
56
+ search = CreditCardVerificationSearch.new
57
+
58
+ search.credit_card_number.starts_with "v_credit_card_bin"
59
+
60
+ expect(search.to_hash).to eq({:credit_card_number => {:starts_with => "v_credit_card_bin"}})
61
+ end
62
+
63
+ it "ends with" do
64
+ search = CreditCardVerificationSearch.new
65
+
66
+ search.credit_card_number.ends_with "v_credit_card_last_4"
67
+
68
+ expect(search.to_hash).to eq({:credit_card_number => {:ends_with => "v_credit_card_last_4"}})
69
+ end
70
+ end
71
+
72
+ context "created_at" do
73
+ it "is a range node" do
74
+ search = CreditCardVerificationSearch.new
75
+ expect(search.created_at).to be_kind_of(Braintree::AdvancedSearch::RangeNode)
76
+ end
77
+ end
78
+ end
79
+ end
@@ -5,16 +5,21 @@ describe Braintree::CreditCardVerification do
5
5
  it "is better than the default inspect" do
6
6
  verification = Braintree::CreditCardVerification._new(
7
7
  :status => "verified",
8
+ :amount => "12.45",
9
+ :ani_first_name_response_code => "I",
10
+ :ani_last_name_response_code => "I",
11
+ :currency_iso_code => "USD",
8
12
  :avs_error_response_code => "I",
9
13
  :avs_postal_code_response_code => "I",
10
14
  :avs_street_address_response_code => "I",
11
15
  :cvv_response_code => "I",
12
16
  :processor_response_code => "2000",
13
17
  :processor_response_text => "Do Not Honor",
14
- :merchant_account_id => "some_id"
18
+ :merchant_account_id => "some_id",
19
+ :network_response_code => "05",
20
+ :network_response_text => "Do not Honor",
15
21
  )
16
-
17
- verification.inspect.should == %(#<Braintree::CreditCardVerification status: "verified", processor_response_code: "2000", processor_response_text: "Do Not Honor", cvv_response_code: "I", avs_error_response_code: "I", avs_postal_code_response_code: "I", avs_street_address_response_code: "I", merchant_account_id: "some_id", gateway_rejection_reason: 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">))
18
23
  end
19
24
 
20
25
  it "has a status" do
@@ -26,11 +31,132 @@ describe Braintree::CreditCardVerification do
26
31
  :cvv_response_code => "I",
27
32
  :processor_response_code => "2000",
28
33
  :processor_response_text => "Do Not Honor",
29
- :merchant_account_id => "some_id"
34
+ :merchant_account_id => "some_id",
30
35
  )
31
36
 
32
- verification.status.should == Braintree::CreditCardVerification::Status::VERIFIED
37
+ expect(verification.status).to eq(Braintree::CreditCardVerification::Status::Verified)
33
38
  end
34
39
  end
35
- end
36
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
+
51
+ it "accepts amount as either a String or BigDecimal" do
52
+ expect(Braintree::CreditCardVerification._new(:amount => "12.34").amount).to eq(BigDecimal("12.34"))
53
+ expect(Braintree::CreditCardVerification._new(:amount => BigDecimal("12.34")).amount).to eq(BigDecimal("12.34"))
54
+ end
55
+
56
+ it "accepts network_transaction_id" do
57
+ verification = Braintree::CreditCardVerification._new(
58
+ :network_transaction_id => "123456789012345",
59
+ )
60
+ expect(verification.network_transaction_id).to eq "123456789012345"
61
+ end
62
+
63
+ describe "self.create" do
64
+ it "rejects invalid parameters" do
65
+ expect do
66
+ Braintree::CreditCardVerification.create(:invalid_key => 4, :credit_card => {:number => "number"})
67
+ end.to raise_error(ArgumentError, "invalid keys: invalid_key")
68
+ end
69
+
70
+ it "rejects parameters that are only valid for 'payment methods create'" do
71
+ expect do
72
+ Braintree::CreditCardVerification.create(:credit_card => {:options => {:verify_card => true}})
73
+ end.to raise_error(ArgumentError, "invalid keys: credit_card[options][verify_card]")
74
+ end
75
+ end
76
+
77
+ describe "self.find" do
78
+ it "raises error if passed empty string" do
79
+ expect do
80
+ Braintree::CreditCardVerification.find("")
81
+ end.to raise_error(ArgumentError)
82
+ end
83
+
84
+ it "raises error if passed empty string wth space" do
85
+ expect do
86
+ Braintree::CreditCardVerification.find(" ")
87
+ end.to raise_error(ArgumentError)
88
+ end
89
+
90
+ it "raises error if passed nil" do
91
+ expect do
92
+ Braintree::CreditCardVerification.find(nil)
93
+ end.to raise_error(ArgumentError)
94
+ end
95
+ end
96
+
97
+ describe "==" do
98
+ it "returns true for verifications with the same id" do
99
+ first = Braintree::CreditCardVerification._new(:id => 123)
100
+ second = Braintree::CreditCardVerification._new(:id => 123)
101
+
102
+ expect(first).to eq(second)
103
+ expect(second).to eq(first)
104
+ end
105
+
106
+ it "returns false for verifications with different ids" do
107
+ first = Braintree::CreditCardVerification._new(:id => 123)
108
+ second = Braintree::CreditCardVerification._new(:id => 124)
109
+
110
+ expect(first).not_to eq(second)
111
+ expect(second).not_to eq(first)
112
+ end
113
+
114
+ it "returns false when comparing to nil" do
115
+ expect(Braintree::CreditCardVerification._new({})).not_to eq(nil)
116
+ end
117
+
118
+ it "returns false when comparing to non-verifications" do
119
+ same_id_different_object = Object.new
120
+ def same_id_different_object.id; 123; end
121
+ verification = Braintree::CreditCardVerification._new(:id => 123)
122
+ expect(verification).not_to eq(same_id_different_object)
123
+ end
124
+ end
125
+
126
+ describe "risk_data" do
127
+ it "initializes a RiskData object" do
128
+ verification = Braintree::CreditCardVerification._new(:risk_data => {
129
+ :id => "123",
130
+ :decision => "WOO YOU WON $1000 dollars",
131
+ :decision_reasons => ["reason"],
132
+ :device_data_captured => true,
133
+ :fraud_service_provider => "paypal_fraud_protection",
134
+ :transaction_risk_score => "12",
135
+ })
136
+
137
+ expect(verification.risk_data.id).to eq("123")
138
+ expect(verification.risk_data.decision).to eq("WOO YOU WON $1000 dollars")
139
+ expect(verification.risk_data.decision_reasons).to eq(["reason"])
140
+ expect(verification.risk_data.device_data_captured).to eq(true)
141
+ expect(verification.risk_data.fraud_service_provider).to eq("paypal_fraud_protection")
142
+ expect(verification.risk_data.transaction_risk_score).to eq("12")
143
+ end
144
+
145
+ it "handles a nil risk_data" do
146
+ verification = Braintree::CreditCardVerification._new(:risk_data => nil)
147
+ expect(verification.risk_data).to be_nil
148
+ end
149
+ end
150
+
151
+ describe "network responses" do
152
+ it "accepts network_response_code and network_response_text" do
153
+ verification = Braintree::CreditCardVerification._new(
154
+ :network_response_code => "00",
155
+ :network_response_text => "Successful approval/completion or V.I.P. PIN verification is successful",
156
+ )
157
+
158
+ expect(verification.network_response_code).to eq("00")
159
+ expect(verification.network_response_text).to eq("Successful approval/completion or V.I.P. PIN verification is successful")
160
+ end
161
+ end
162
+ end