tomriley-active_merchant 1.4.2.3

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 (278) hide show
  1. data/CHANGELOG +442 -0
  2. data/CONTRIBUTERS +102 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README +134 -0
  5. data/Rakefile +153 -0
  6. data/active_merchant.gemspec +15 -0
  7. data/gem-public_cert.pem +20 -0
  8. data/init.rb +4 -0
  9. data/lib/active_merchant/billing/avs_result.rb +98 -0
  10. data/lib/active_merchant/billing/base.rb +57 -0
  11. data/lib/active_merchant/billing/check.rb +68 -0
  12. data/lib/active_merchant/billing/credit_card.rb +159 -0
  13. data/lib/active_merchant/billing/credit_card_formatting.rb +21 -0
  14. data/lib/active_merchant/billing/credit_card_methods.rb +125 -0
  15. data/lib/active_merchant/billing/cvv_result.rb +38 -0
  16. data/lib/active_merchant/billing/expiry_date.rb +28 -0
  17. data/lib/active_merchant/billing/gateway.rb +158 -0
  18. data/lib/active_merchant/billing/gateways/authorize_net.rb +646 -0
  19. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +702 -0
  20. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +233 -0
  21. data/lib/active_merchant/billing/gateways/beanstream.rb +102 -0
  22. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
  23. data/lib/active_merchant/billing/gateways/bogus.rb +98 -0
  24. data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
  25. data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
  26. data/lib/active_merchant/billing/gateways/cyber_source.rb +406 -0
  27. data/lib/active_merchant/billing/gateways/data_cash.rb +595 -0
  28. data/lib/active_merchant/billing/gateways/efsnet.rb +229 -0
  29. data/lib/active_merchant/billing/gateways/eway.rb +272 -0
  30. data/lib/active_merchant/billing/gateways/exact.rb +222 -0
  31. data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
  32. data/lib/active_merchant/billing/gateways/linkpoint.rb +396 -0
  33. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +154 -0
  34. data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
  35. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +214 -0
  36. data/lib/active_merchant/billing/gateways/moneris.rb +205 -0
  37. data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
  38. data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
  39. data/lib/active_merchant/billing/gateways/pay_junction.rb +392 -0
  40. data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
  41. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
  42. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
  43. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  44. data/lib/active_merchant/billing/gateways/payflow.rb +236 -0
  45. data/lib/active_merchant/billing/gateways/payflow_express.rb +138 -0
  46. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
  47. data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
  48. data/lib/active_merchant/billing/gateways/payment_express.rb +230 -0
  49. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +325 -0
  50. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +38 -0
  51. data/lib/active_merchant/billing/gateways/paypal.rb +108 -0
  52. data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
  53. data/lib/active_merchant/billing/gateways/paypal_express.rb +130 -0
  54. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +20 -0
  55. data/lib/active_merchant/billing/gateways/plugnpay.rb +292 -0
  56. data/lib/active_merchant/billing/gateways/protx.rb +349 -0
  57. data/lib/active_merchant/billing/gateways/psigate.rb +214 -0
  58. data/lib/active_merchant/billing/gateways/psl_card.rb +306 -0
  59. data/lib/active_merchant/billing/gateways/quickpay.rb +213 -0
  60. data/lib/active_merchant/billing/gateways/realex.rb +200 -0
  61. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
  62. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +110 -0
  63. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
  64. data/lib/active_merchant/billing/gateways/sage.rb +146 -0
  65. data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
  66. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +157 -0
  67. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
  68. data/lib/active_merchant/billing/gateways/skip_jack.rb +442 -0
  69. data/lib/active_merchant/billing/gateways/smart_ps.rb +254 -0
  70. data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
  71. data/lib/active_merchant/billing/gateways/transax.rb +26 -0
  72. data/lib/active_merchant/billing/gateways/trust_commerce.rb +418 -0
  73. data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
  74. data/lib/active_merchant/billing/gateways/verifi.rb +228 -0
  75. data/lib/active_merchant/billing/gateways/viaklix.rb +165 -0
  76. data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
  77. data/lib/active_merchant/billing/gateways.rb +3 -0
  78. data/lib/active_merchant/billing/integrations/action_view_helper.rb +79 -0
  79. data/lib/active_merchant/billing/integrations/bogus/helper.rb +17 -0
  80. data/lib/active_merchant/billing/integrations/bogus/notification.rb +11 -0
  81. data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
  82. data/lib/active_merchant/billing/integrations/bogus.rb +22 -0
  83. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +81 -0
  84. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +156 -0
  85. data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
  86. data/lib/active_merchant/billing/integrations/chronopay.rb +22 -0
  87. data/lib/active_merchant/billing/integrations/gestpay/common.rb +42 -0
  88. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +70 -0
  89. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +83 -0
  90. data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
  91. data/lib/active_merchant/billing/integrations/gestpay.rb +26 -0
  92. data/lib/active_merchant/billing/integrations/helper.rb +93 -0
  93. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
  94. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +59 -0
  95. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
  96. data/lib/active_merchant/billing/integrations/hi_trust.rb +26 -0
  97. data/lib/active_merchant/billing/integrations/nochex/helper.rb +68 -0
  98. data/lib/active_merchant/billing/integrations/nochex/notification.rb +94 -0
  99. data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
  100. data/lib/active_merchant/billing/integrations/nochex.rb +87 -0
  101. data/lib/active_merchant/billing/integrations/notification.rb +62 -0
  102. data/lib/active_merchant/billing/integrations/paypal/helper.rb +118 -0
  103. data/lib/active_merchant/billing/integrations/paypal/notification.rb +154 -0
  104. data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
  105. data/lib/active_merchant/billing/integrations/paypal.rb +40 -0
  106. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +72 -0
  107. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +74 -0
  108. data/lib/active_merchant/billing/integrations/quickpay.rb +18 -0
  109. data/lib/active_merchant/billing/integrations/return.rb +35 -0
  110. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +59 -0
  111. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +114 -0
  112. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
  113. data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -0
  114. data/lib/active_merchant/billing/integrations.rb +22 -0
  115. data/lib/active_merchant/billing/response.rb +32 -0
  116. data/lib/active_merchant/lib/connection.rb +170 -0
  117. data/lib/active_merchant/lib/country.rb +319 -0
  118. data/lib/active_merchant/lib/error.rb +4 -0
  119. data/lib/active_merchant/lib/post_data.rb +22 -0
  120. data/lib/active_merchant/lib/posts_data.rb +47 -0
  121. data/lib/active_merchant/lib/requires_parameters.rb +16 -0
  122. data/lib/active_merchant/lib/utils.rb +18 -0
  123. data/lib/active_merchant/lib/validateable.rb +76 -0
  124. data/lib/active_merchant.rb +60 -0
  125. data/lib/certs/cacert.pem +7815 -0
  126. data/lib/support/gateway_support.rb +58 -0
  127. data/script/destroy +14 -0
  128. data/script/generate +14 -0
  129. data/test/fixtures.yml +330 -0
  130. data/test/remote/gateways/remote_authorize_net_cim_test.rb +459 -0
  131. data/test/remote/gateways/remote_authorize_net_test.rb +145 -0
  132. data/test/remote/gateways/remote_beanstream_interac_test.rb +53 -0
  133. data/test/remote/gateways/remote_beanstream_test.rb +150 -0
  134. data/test/remote/gateways/remote_braintree_test.rb +154 -0
  135. data/test/remote/gateways/remote_card_stream_test.rb +148 -0
  136. data/test/remote/gateways/remote_cyber_source_test.rb +144 -0
  137. data/test/remote/gateways/remote_data_cash_test.rb +357 -0
  138. data/test/remote/gateways/remote_efsnet_test.rb +81 -0
  139. data/test/remote/gateways/remote_eway_test.rb +74 -0
  140. data/test/remote/gateways/remote_exact_test.rb +60 -0
  141. data/test/remote/gateways/remote_instapay_test.rb +61 -0
  142. data/test/remote/gateways/remote_linkpoint_test.rb +112 -0
  143. data/test/remote/gateways/remote_merchant_e_solutions_test.rb +173 -0
  144. data/test/remote/gateways/remote_modern_payments_cim_test.rb +58 -0
  145. data/test/remote/gateways/remote_modern_payments_test.rb +43 -0
  146. data/test/remote/gateways/remote_moneris_test.rb +82 -0
  147. data/test/remote/gateways/remote_net_registry_test.rb +85 -0
  148. data/test/remote/gateways/remote_netbilling_test.rb +70 -0
  149. data/test/remote/gateways/remote_pay_junction_test.rb +143 -0
  150. data/test/remote/gateways/remote_pay_secure_test.rb +39 -0
  151. data/test/remote/gateways/remote_payflow_express_test.rb +50 -0
  152. data/test/remote/gateways/remote_payflow_test.rb +237 -0
  153. data/test/remote/gateways/remote_payflow_uk_test.rb +173 -0
  154. data/test/remote/gateways/remote_payment_express_test.rb +136 -0
  155. data/test/remote/gateways/remote_paypal_express_test.rb +49 -0
  156. data/test/remote/gateways/remote_paypal_test.rb +167 -0
  157. data/test/remote/gateways/remote_plugnpay_test.rb +72 -0
  158. data/test/remote/gateways/remote_protx_test.rb +219 -0
  159. data/test/remote/gateways/remote_psigate_test.rb +50 -0
  160. data/test/remote/gateways/remote_psl_card_test.rb +125 -0
  161. data/test/remote/gateways/remote_quickpay_test.rb +190 -0
  162. data/test/remote/gateways/remote_realex_test.rb +224 -0
  163. data/test/remote/gateways/remote_sage_bankcard_test.rb +109 -0
  164. data/test/remote/gateways/remote_sage_test.rb +87 -0
  165. data/test/remote/gateways/remote_sage_virtual_check_test.rb +62 -0
  166. data/test/remote/gateways/remote_secure_pay_au_test.rb +40 -0
  167. data/test/remote/gateways/remote_secure_pay_tech_test.rb +37 -0
  168. data/test/remote/gateways/remote_secure_pay_test.rb +28 -0
  169. data/test/remote/gateways/remote_skipjack_test.rb +105 -0
  170. data/test/remote/gateways/remote_trans_first_test.rb +34 -0
  171. data/test/remote/gateways/remote_transax_test.rb +112 -0
  172. data/test/remote/gateways/remote_trust_commerce_test.rb +152 -0
  173. data/test/remote/gateways/remote_usa_epay_test.rb +46 -0
  174. data/test/remote/gateways/remote_verifi_test.rb +107 -0
  175. data/test/remote/gateways/remote_viaklix_test.rb +43 -0
  176. data/test/remote/gateways/remote_wirecard_test.rb +111 -0
  177. data/test/remote/integrations/remote_gestpay_integration_test.rb +37 -0
  178. data/test/remote/integrations/remote_paypal_integration_test.rb +26 -0
  179. data/test/test_helper.rb +182 -0
  180. data/test/unit/avs_result_test.rb +59 -0
  181. data/test/unit/base_test.rb +55 -0
  182. data/test/unit/check_test.rb +88 -0
  183. data/test/unit/connection_test.rb +129 -0
  184. data/test/unit/country_code_test.rb +33 -0
  185. data/test/unit/country_test.rb +64 -0
  186. data/test/unit/credit_card_formatting_test.rb +19 -0
  187. data/test/unit/credit_card_methods_test.rb +170 -0
  188. data/test/unit/credit_card_test.rb +318 -0
  189. data/test/unit/cvv_result_test.rb +33 -0
  190. data/test/unit/expiry_date_test.rb +21 -0
  191. data/test/unit/gateways/authorize_net_cim_test.rb +638 -0
  192. data/test/unit/gateways/authorize_net_test.rb +290 -0
  193. data/test/unit/gateways/beanstream_interac_test.rb +51 -0
  194. data/test/unit/gateways/beanstream_test.rb +108 -0
  195. data/test/unit/gateways/bogus_test.rb +46 -0
  196. data/test/unit/gateways/braintree_test.rb +126 -0
  197. data/test/unit/gateways/card_stream_test.rb +90 -0
  198. data/test/unit/gateways/cyber_source_test.rb +188 -0
  199. data/test/unit/gateways/data_cash_test.rb +133 -0
  200. data/test/unit/gateways/efsnet_test.rb +123 -0
  201. data/test/unit/gateways/eway_test.rb +118 -0
  202. data/test/unit/gateways/exact_test.rb +156 -0
  203. data/test/unit/gateways/gateway_test.rb +48 -0
  204. data/test/unit/gateways/instapay_test.rb +102 -0
  205. data/test/unit/gateways/linkpoint_test.rb +167 -0
  206. data/test/unit/gateways/merchant_e_solutions_test.rb +169 -0
  207. data/test/unit/gateways/modern_payments_cim_test.rb +171 -0
  208. data/test/unit/gateways/moneris_test.rb +158 -0
  209. data/test/unit/gateways/net_registry_test.rb +416 -0
  210. data/test/unit/gateways/netbilling_test.rb +54 -0
  211. data/test/unit/gateways/pay_junction_test.rb +123 -0
  212. data/test/unit/gateways/pay_secure_test.rb +71 -0
  213. data/test/unit/gateways/payflow_express_test.rb +173 -0
  214. data/test/unit/gateways/payflow_express_uk_test.rb +86 -0
  215. data/test/unit/gateways/payflow_test.rb +305 -0
  216. data/test/unit/gateways/payflow_uk_test.rb +30 -0
  217. data/test/unit/gateways/payment_express_test.rb +195 -0
  218. data/test/unit/gateways/paypal_express_test.rb +382 -0
  219. data/test/unit/gateways/paypal_test.rb +520 -0
  220. data/test/unit/gateways/plugnpay_test.rb +86 -0
  221. data/test/unit/gateways/protx_test.rb +139 -0
  222. data/test/unit/gateways/psigate_test.rb +169 -0
  223. data/test/unit/gateways/psl_card_test.rb +64 -0
  224. data/test/unit/gateways/quickpay_test.rb +112 -0
  225. data/test/unit/gateways/realex_test.rb +151 -0
  226. data/test/unit/gateways/sage_bankcard_test.rb +162 -0
  227. data/test/unit/gateways/sage_virtual_check_test.rb +71 -0
  228. data/test/unit/gateways/secure_pay_au_test.rb +207 -0
  229. data/test/unit/gateways/secure_pay_tech_test.rb +44 -0
  230. data/test/unit/gateways/secure_pay_test.rb +87 -0
  231. data/test/unit/gateways/skip_jack_test.rb +133 -0
  232. data/test/unit/gateways/trans_first_test.rb +112 -0
  233. data/test/unit/gateways/trust_commerce_test.rb +90 -0
  234. data/test/unit/gateways/usa_epay_test.rb +128 -0
  235. data/test/unit/gateways/verifi_test.rb +96 -0
  236. data/test/unit/gateways/viaklix_test.rb +78 -0
  237. data/test/unit/gateways/wirecard_test.rb +250 -0
  238. data/test/unit/generators/test_gateway_generator.rb +46 -0
  239. data/test/unit/generators/test_generator_helper.rb +20 -0
  240. data/test/unit/generators/test_integration_generator.rb +53 -0
  241. data/test/unit/integrations/action_view_helper_test.rb +50 -0
  242. data/test/unit/integrations/bogus_module_test.rb +20 -0
  243. data/test/unit/integrations/chronopay_module_test.rb +13 -0
  244. data/test/unit/integrations/gestpay_module_test.rb +14 -0
  245. data/test/unit/integrations/helpers/bogus_helper_test.rb +28 -0
  246. data/test/unit/integrations/helpers/chronopay_helper_test.rb +67 -0
  247. data/test/unit/integrations/helpers/gestpay_helper_test.rb +100 -0
  248. data/test/unit/integrations/helpers/hi_trust_helper_test.rb +16 -0
  249. data/test/unit/integrations/helpers/nochex_helper_test.rb +53 -0
  250. data/test/unit/integrations/helpers/paypal_helper_test.rb +162 -0
  251. data/test/unit/integrations/helpers/quickpay_helper_test.rb +40 -0
  252. data/test/unit/integrations/helpers/two_checkout_helper_test.rb +92 -0
  253. data/test/unit/integrations/hi_trust_module_test.rb +13 -0
  254. data/test/unit/integrations/nochex_module_test.rb +13 -0
  255. data/test/unit/integrations/notifications/chronopay_notification_test.rb +66 -0
  256. data/test/unit/integrations/notifications/gestpay_notification_test.rb +60 -0
  257. data/test/unit/integrations/notifications/hi_trust_notification_test.rb +59 -0
  258. data/test/unit/integrations/notifications/nochex_notification_test.rb +51 -0
  259. data/test/unit/integrations/notifications/notification_test.rb +54 -0
  260. data/test/unit/integrations/notifications/paypal_notification_test.rb +85 -0
  261. data/test/unit/integrations/notifications/quickpay_notification_test.rb +69 -0
  262. data/test/unit/integrations/notifications/two_checkout_notification_test.rb +55 -0
  263. data/test/unit/integrations/paypal_module_test.rb +28 -0
  264. data/test/unit/integrations/quickpay_module_test.rb +9 -0
  265. data/test/unit/integrations/returns/chronopay_return_test.rb +11 -0
  266. data/test/unit/integrations/returns/gestpay_return_test.rb +10 -0
  267. data/test/unit/integrations/returns/hi_trust_return_test.rb +24 -0
  268. data/test/unit/integrations/returns/nochex_return_test.rb +10 -0
  269. data/test/unit/integrations/returns/paypal_return_test.rb +10 -0
  270. data/test/unit/integrations/returns/return_test.rb +11 -0
  271. data/test/unit/integrations/returns/two_checkout_return_test.rb +24 -0
  272. data/test/unit/integrations/two_checkout_module_test.rb +13 -0
  273. data/test/unit/post_data_test.rb +55 -0
  274. data/test/unit/posts_data_test.rb +48 -0
  275. data/test/unit/response_test.rb +28 -0
  276. data/test/unit/utils_test.rb +7 -0
  277. data/test/unit/validateable_test.rb +60 -0
  278. metadata +364 -0
@@ -0,0 +1,520 @@
1
+ require 'test_helper'
2
+
3
+ class PaypalTest < Test::Unit::TestCase
4
+ def setup
5
+ Base.mode = :test
6
+ PaypalGateway.pem_file = nil
7
+
8
+ @amount = 100
9
+ @gateway = PaypalGateway.new(
10
+ :login => 'cody',
11
+ :password => 'test',
12
+ :pem => 'PEM'
13
+ )
14
+
15
+ @credit_card = credit_card('4242424242424242')
16
+ @options = { :billing_address => address, :ip => '127.0.0.1' }
17
+ end
18
+
19
+ def test_no_ip_address
20
+ assert_raise(ArgumentError){ @gateway.purchase(@amount, @credit_card, :billing_address => address)}
21
+ end
22
+
23
+ def test_successful_purchase
24
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
25
+
26
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
27
+ assert_instance_of Response, response
28
+ assert_success response
29
+ assert_equal '62U664727W5914806', response.authorization
30
+ assert response.test?
31
+ end
32
+
33
+ def test_failed_purchase
34
+ @gateway.expects(:ssl_post).returns(failed_purchase_response)
35
+
36
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
37
+ assert_instance_of Response, response
38
+ assert_failure response
39
+ assert response.test?
40
+ end
41
+
42
+ def test_reauthorization
43
+ @gateway.expects(:ssl_post).returns(successful_reauthorization_response)
44
+ response = @gateway.reauthorize(@amount, '32J876265E528623B')
45
+ assert response.success?
46
+ assert_equal('1TX27389GX108740X', response.authorization)
47
+ assert response.test?
48
+ end
49
+
50
+ def test_reauthorization_with_warning
51
+ @gateway.expects(:ssl_post).returns(successful_with_warning_reauthorization_response)
52
+ response = @gateway.reauthorize(@amount, '32J876265E528623B')
53
+ assert response.success?
54
+ assert_equal('1TX27389GX108740X', response.authorization)
55
+ assert response.test?
56
+ end
57
+
58
+ def test_amount_style
59
+ assert_equal '10.34', @gateway.send(:amount, 1034)
60
+
61
+ assert_raise(ArgumentError) do
62
+ @gateway.send(:amount, '10.34')
63
+ end
64
+ end
65
+
66
+ def test_paypal_timeout_error
67
+ @gateway.stubs(:ssl_post).returns(paypal_timeout_error_response)
68
+ response = @gateway.purchase(@amount, @credit_card, @options)
69
+ assert_equal "SOAP-ENV:Server", response.params['faultcode']
70
+ assert_equal "Internal error", response.params['faultstring']
71
+ assert_equal "Timeout processing request", response.params['detail']
72
+ assert_equal "SOAP-ENV:Server: Internal error - Timeout processing request", response.message
73
+ end
74
+
75
+ def test_pem_file_accessor
76
+ PaypalGateway.pem_file = '123456'
77
+ gateway = PaypalGateway.new(:login => 'test', :password => 'test')
78
+ assert_equal '123456', gateway.options[:pem]
79
+ end
80
+
81
+ def test_passed_in_pem_overrides_class_accessor
82
+ PaypalGateway.pem_file = '123456'
83
+ gateway = PaypalGateway.new(:login => 'test', :password => 'test', :pem => 'Clobber')
84
+ assert_equal 'Clobber', gateway.options[:pem]
85
+ end
86
+
87
+ def test_ensure_options_are_transferred_to_express_instance
88
+ PaypalGateway.pem_file = '123456'
89
+ gateway = PaypalGateway.new(:login => 'test', :password => 'password')
90
+ express = gateway.express
91
+ assert_instance_of PaypalExpressGateway, express
92
+ assert_equal 'test', express.options[:login]
93
+ assert_equal 'password', express.options[:password]
94
+ assert_equal '123456', express.options[:pem]
95
+ end
96
+
97
+ def test_supported_countries
98
+ assert_equal ['US'], PaypalGateway.supported_countries
99
+ end
100
+
101
+ def test_supported_card_types
102
+ assert_equal [:visa, :master, :american_express, :discover], PaypalGateway.supported_cardtypes
103
+ end
104
+
105
+ def test_button_source
106
+ PaypalGateway.application_id = 'ActiveMerchant_DC'
107
+
108
+ xml = REXML::Document.new(@gateway.send(:build_sale_or_authorization_request, 'Test', @amount, @credit_card, {}))
109
+ assert_equal 'ActiveMerchant_DC', REXML::XPath.first(xml, '//n2:ButtonSource').text
110
+ end
111
+
112
+ def test_item_total_shipping_handling_and_tax_not_included_unless_all_are_present
113
+ xml = @gateway.send(:build_sale_or_authorization_request, 'Authorization', @amount, @credit_card,
114
+ :tax => @amount,
115
+ :shipping => @amount,
116
+ :handling => @amount
117
+ )
118
+
119
+ doc = REXML::Document.new(xml)
120
+ assert_nil REXML::XPath.first(doc, '//n2:PaymentDetails/n2:TaxTotal')
121
+ end
122
+
123
+ def test_item_total_shipping_handling_and_tax
124
+ xml = @gateway.send(:build_sale_or_authorization_request, 'Authorization', @amount, @credit_card,
125
+ :tax => @amount,
126
+ :shipping => @amount,
127
+ :handling => @amount,
128
+ :subtotal => 200
129
+ )
130
+
131
+ doc = REXML::Document.new(xml)
132
+ assert_equal '1.00', REXML::XPath.first(doc, '//n2:PaymentDetails/n2:TaxTotal').text
133
+ end
134
+
135
+ def test_should_use_test_certificate_endpoint
136
+ gateway = PaypalGateway.new(
137
+ :login => 'cody',
138
+ :password => 'test',
139
+ :pem => 'PEM'
140
+ )
141
+ assert_equal PaypalGateway::URLS[:test][:certificate], gateway.send(:endpoint_url)
142
+ end
143
+
144
+ def test_should_use_live_certificate_endpoint
145
+ gateway = PaypalGateway.new(
146
+ :login => 'cody',
147
+ :password => 'test',
148
+ :pem => 'PEM'
149
+ )
150
+ gateway.expects(:test?).returns(false)
151
+
152
+ assert_equal PaypalGateway::URLS[:live][:certificate], gateway.send(:endpoint_url)
153
+ end
154
+
155
+ def test_should_use_test_signature_endpoint
156
+ gateway = PaypalGateway.new(
157
+ :login => 'cody',
158
+ :password => 'test',
159
+ :signature => 'SIG'
160
+ )
161
+
162
+ assert_equal PaypalGateway::URLS[:test][:signature], gateway.send(:endpoint_url)
163
+ end
164
+
165
+ def test_should_use_live_signature_endpoint
166
+ gateway = PaypalGateway.new(
167
+ :login => 'cody',
168
+ :password => 'test',
169
+ :signature => 'SIG'
170
+ )
171
+ gateway.expects(:test?).returns(false)
172
+
173
+ assert_equal PaypalGateway::URLS[:live][:signature], gateway.send(:endpoint_url)
174
+ end
175
+
176
+ def test_should_raise_argument_when_credentials_not_present
177
+ assert_raises(ArgumentError) do
178
+ PaypalGateway.new(:login => 'cody', :password => 'test')
179
+ end
180
+ end
181
+
182
+ def test_avs_result
183
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
184
+
185
+ response = @gateway.purchase(@amount, @credit_card, @options)
186
+ assert_equal 'X', response.avs_result['code']
187
+ end
188
+
189
+ def test_cvv_result
190
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
191
+
192
+ response = @gateway.purchase(@amount, @credit_card, @options)
193
+ assert_equal 'M', response.cvv_result['code']
194
+ end
195
+
196
+ def test_fraud_review
197
+ @gateway.expects(:ssl_post).returns(fraud_review_response)
198
+
199
+ response = @gateway.purchase(@amount, @credit_card, @options)
200
+ assert_success response
201
+ assert_equal "SuccessWithWarning", response.params["ack"]
202
+ assert_equal "Payment Pending your review in Fraud Management Filters", response.message
203
+ assert response.fraud_review?
204
+ end
205
+
206
+ def test_failed_capture_due_to_pending_fraud_review
207
+ @gateway.expects(:ssl_post).returns(failed_capture_due_to_pending_fraud_review)
208
+
209
+ response = @gateway.capture(@amount, 'authorization')
210
+ assert_failure response
211
+ assert_equal "Transaction must be accepted in Fraud Management Filters before capture.", response.message
212
+ end
213
+
214
+ # This occurs when sufficient 3rd party API permissions are not present to make the call for the user
215
+ def test_authentication_failed_response
216
+ @gateway.expects(:ssl_post).returns(authentication_failed_response)
217
+ response = @gateway.purchase(@amount, @credit_card, @options)
218
+ assert_failure response
219
+ assert_equal "10002", response.params["error_codes"]
220
+ assert_equal "You do not have permissions to make this API call", response.message
221
+ end
222
+
223
+ private
224
+ def successful_purchase_response
225
+ <<-RESPONSE
226
+ <?xml version="1.0" encoding="UTF-8"?>
227
+ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:cc="urn:ebay:apis:CoreComponentTypes" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:market="urn:ebay:apis:Market" xmlns:auction="urn:ebay:apis:Auction" xmlns:sizeship="urn:ebay:api:PayPalAPI/sizeship.xsd" xmlns:ship="urn:ebay:apis:ship" xmlns:skype="urn:ebay:apis:skype" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:ebl="urn:ebay:apis:eBLBaseComponents" xmlns:ns="urn:ebay:api:PayPalAPI">
228
+ <SOAP-ENV:Header>
229
+ <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext" xsi:type="wsse:SecurityType"/>
230
+ <RequesterCredentials xmlns="urn:ebay:api:PayPalAPI" xsi:type="ebl:CustomSecurityHeaderType">
231
+ <Credentials xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:UserIdPasswordType">
232
+ <Username xsi:type="xs:string"/>
233
+ <Password xsi:type="xs:string"/>
234
+ <Subject xsi:type="xs:string"/>
235
+ </Credentials>
236
+ </RequesterCredentials>
237
+ </SOAP-ENV:Header>
238
+ <SOAP-ENV:Body id="_0">
239
+ <DoDirectPaymentResponse xmlns="urn:ebay:api:PayPalAPI">
240
+ <Timestamp xmlns="urn:ebay:apis:eBLBaseComponents">2008-01-06T23:41:25Z</Timestamp>
241
+ <Ack xmlns="urn:ebay:apis:eBLBaseComponents">Success</Ack>
242
+ <CorrelationID xmlns="urn:ebay:apis:eBLBaseComponents">fee61882e6f47</CorrelationID>
243
+ <Version xmlns="urn:ebay:apis:eBLBaseComponents">2.000000</Version>
244
+ <Build xmlns="urn:ebay:apis:eBLBaseComponents">1.0006</Build>
245
+ <Amount xsi:type="cc:BasicAmountType" currencyID="USD">3.00</Amount>
246
+ <AVSCode xsi:type="xs:string">X</AVSCode>
247
+ <CVV2Code xsi:type="xs:string">M</CVV2Code>
248
+ <TransactionID>62U664727W5914806</TransactionID>
249
+ </DoDirectPaymentResponse>
250
+ </SOAP-ENV:Body>
251
+ </SOAP-ENV:Envelope>
252
+ RESPONSE
253
+ end
254
+
255
+ def failed_purchase_response
256
+ <<-RESPONSE
257
+ <?xml version="1.0" encoding="UTF-8"?>
258
+ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:cc="urn:ebay:apis:CoreComponentTypes" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:market="urn:ebay:apis:Market" xmlns:auction="urn:ebay:apis:Auction" xmlns:sizeship="urn:ebay:api:PayPalAPI/sizeship.xsd" xmlns:ship="urn:ebay:apis:ship" xmlns:skype="urn:ebay:apis:skype" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:ebl="urn:ebay:apis:eBLBaseComponents" xmlns:ns="urn:ebay:api:PayPalAPI">
259
+ <SOAP-ENV:Header>
260
+ <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext" xsi:type="wsse:SecurityType"/>
261
+ <RequesterCredentials xmlns="urn:ebay:api:PayPalAPI" xsi:type="ebl:CustomSecurityHeaderType">
262
+ <Credentials xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:UserIdPasswordType">
263
+ <Username xsi:type="xs:string"/>
264
+ <Password xsi:type="xs:string"/>
265
+ <Subject xsi:type="xs:string"/>
266
+ </Credentials>
267
+ </RequesterCredentials>
268
+ </SOAP-ENV:Header>
269
+ <SOAP-ENV:Body id="_0">
270
+ <DoDirectPaymentResponse xmlns="urn:ebay:api:PayPalAPI">
271
+ <Timestamp xmlns="urn:ebay:apis:eBLBaseComponents">2008-01-06T23:41:25Z</Timestamp>
272
+ <Ack xmlns="urn:ebay:apis:eBLBaseComponents">Failure</Ack>
273
+ <CorrelationID xmlns="urn:ebay:apis:eBLBaseComponents">fee61882e6f47</CorrelationID>
274
+ <Version xmlns="urn:ebay:apis:eBLBaseComponents">2.000000</Version>
275
+ <Build xmlns="urn:ebay:apis:eBLBaseComponents">1.0006</Build>
276
+ <Amount xsi:type="cc:BasicAmountType" currencyID="USD">3.00</Amount>
277
+ <AVSCode xsi:type="xs:string">X</AVSCode>
278
+ <CVV2Code xsi:type="xs:string">M</CVV2Code>
279
+ </DoDirectPaymentResponse>
280
+ </SOAP-ENV:Body>
281
+ </SOAP-ENV:Envelope>
282
+ RESPONSE
283
+ end
284
+
285
+ def paypal_timeout_error_response
286
+ <<-RESPONSE
287
+ <?xml version='1.0' encoding='UTF-8'?>
288
+ <SOAP-ENV:Envelope xmlns:cc='urn:ebay:apis:CoreComponentTypes' xmlns:sizeship='urn:ebay:api:PayPalAPI/sizeship.xsd' xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' xmlns:saml='urn:oasis:names:tc:SAML:1.0:assertion' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:wsu='http://schemas.xmlsoap.org/ws/2002/07/utility' xmlns:ebl='urn:ebay:apis:eBLBaseComponents' xmlns:ds='http://www.w3.org/2000/09/xmldsig#' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:ns='urn:ebay:api:PayPalAPI' xmlns:market='urn:ebay:apis:Market' xmlns:ship='urn:ebay:apis:ship' xmlns:auction='urn:ebay:apis:Auction' xmlns:wsse='http://schemas.xmlsoap.org/ws/2002/12/secext' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
289
+ <SOAP-ENV:Header>
290
+ <Security xsi:type='wsse:SecurityType' xmlns='http://schemas.xmlsoap.org/ws/2002/12/secext'/>
291
+ <RequesterCredentials xsi:type='ebl:CustomSecurityHeaderType' xmlns='urn:ebay:api:PayPalAPI'>
292
+ <Credentials xsi:type='ebl:UserIdPasswordType' xmlns='urn:ebay:apis:eBLBaseComponents'>
293
+ <Username xsi:type='xs:string'/>
294
+ <Password xsi:type='xs:string'/>
295
+ <Subject xsi:type='xs:string'/>
296
+ </Credentials>
297
+ </RequesterCredentials>
298
+ </SOAP-ENV:Header>
299
+ <SOAP-ENV:Body id='_0'>
300
+ <SOAP-ENV:Fault>
301
+ <faultcode>SOAP-ENV:Server</faultcode>
302
+ <faultstring>Internal error</faultstring>
303
+ <detail>Timeout processing request</detail>
304
+ </SOAP-ENV:Fault>
305
+ </SOAP-ENV:Body>
306
+ </SOAP-ENV:Envelope>
307
+ RESPONSE
308
+ end
309
+
310
+ def successful_reauthorization_response
311
+ <<-RESPONSE
312
+ <?xml version="1.0" encoding="UTF-8"?>
313
+ <SOAP-ENV:Envelope
314
+ xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
315
+ xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
316
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
317
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
318
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
319
+ xmlns:cc="urn:ebay:apis:CoreComponentTypes"
320
+ xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
321
+ xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
322
+ xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
323
+ xmlns:market="urn:ebay:apis:Market"
324
+ xmlns:auction="urn:ebay:apis:Auction"
325
+ xmlns:sizeship="urn:ebay:api:PayPalAPI/sizeship.xsd"
326
+ xmlns:ship="urn:ebay:apis:ship"
327
+ xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext"
328
+ xmlns:ebl="urn:ebay:apis:eBLBaseComponents"
329
+ xmlns:ns="urn:ebay:api:PayPalAPI">
330
+ <SOAP-ENV:Header>
331
+ <Security
332
+ xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext"
333
+ xsi:type="wsse:SecurityType">
334
+ </Security>
335
+ <RequesterCredentials xmlns="urn:ebay:api:PayPalAPI"
336
+ xsi:type="ebl:CustomSecurityHeaderType">
337
+ <Credentials xmlns="urn:ebay:apis:eBLBaseComponents"
338
+ xsi:type="ebl:UserIdPasswordType">
339
+ <Username xsi:type="xs:string"></Username>
340
+ <Password xsi:type="xs:string"></Password>
341
+ <Subject xsi:type="xs:string"></Subject>
342
+ </Credentials>
343
+ </RequesterCredentials>
344
+ </SOAP-ENV:Header>
345
+ <SOAP-ENV:Body id="_0">
346
+ <DoReauthorizationResponse xmlns="urn:ebay:api:PayPalAPI">
347
+ <Timestamp xmlns="urn:ebay:apis:eBLBaseComponents">2007-03-04T23:34:42Z</Timestamp>
348
+ <Ack xmlns="urn:ebay:apis:eBLBaseComponents">Success</Ack>
349
+ <CorrelationID xmlns="urn:ebay:apis:eBLBaseComponents">e444ddb7b3ed9</CorrelationID>
350
+ <Version xmlns="urn:ebay:apis:eBLBaseComponents">2.000000</Version>
351
+ <Build xmlns="urn:ebay:apis:eBLBaseComponents">1.0006</Build>
352
+ <AuthorizationID xsi:type="ebl:AuthorizationId">1TX27389GX108740X</AuthorizationID>
353
+ </DoReauthorizationResponse>
354
+ </SOAP-ENV:Body>
355
+ </SOAP-ENV:Envelope>
356
+ RESPONSE
357
+ end
358
+
359
+ def successful_with_warning_reauthorization_response
360
+ <<-RESPONSE
361
+ <?xml version="1.0" encoding="UTF-8"?>
362
+ <SOAP-ENV:Envelope
363
+ xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
364
+ xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
365
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
366
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
367
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
368
+ xmlns:cc="urn:ebay:apis:CoreComponentTypes"
369
+ xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"
370
+ xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
371
+ xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
372
+ xmlns:market="urn:ebay:apis:Market"
373
+ xmlns:auction="urn:ebay:apis:Auction"
374
+ xmlns:sizeship="urn:ebay:api:PayPalAPI/sizeship.xsd"
375
+ xmlns:ship="urn:ebay:apis:ship"
376
+ xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext"
377
+ xmlns:ebl="urn:ebay:apis:eBLBaseComponents"
378
+ xmlns:ns="urn:ebay:api:PayPalAPI">
379
+ <SOAP-ENV:Header>
380
+ <Security
381
+ xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext"
382
+ xsi:type="wsse:SecurityType">
383
+ </Security>
384
+ <RequesterCredentials xmlns="urn:ebay:api:PayPalAPI"
385
+ xsi:type="ebl:CustomSecurityHeaderType">
386
+ <Credentials xmlns="urn:ebay:apis:eBLBaseComponents"
387
+ xsi:type="ebl:UserIdPasswordType">
388
+ <Username xsi:type="xs:string"></Username>
389
+ <Password xsi:type="xs:string"></Password>
390
+ <Subject xsi:type="xs:string"></Subject>
391
+ </Credentials>
392
+ </RequesterCredentials>
393
+ </SOAP-ENV:Header>
394
+ <SOAP-ENV:Body id="_0">
395
+ <DoReauthorizationResponse xmlns="urn:ebay:api:PayPalAPI">
396
+ <Timestamp xmlns="urn:ebay:apis:eBLBaseComponents">2007-03-04T23:34:42Z</Timestamp>
397
+ <Ack xmlns="urn:ebay:apis:eBLBaseComponents">SuccessWithWarning</Ack>
398
+ <CorrelationID xmlns="urn:ebay:apis:eBLBaseComponents">e444ddb7b3ed9</CorrelationID>
399
+ <Version xmlns="urn:ebay:apis:eBLBaseComponents">2.000000</Version>
400
+ <Build xmlns="urn:ebay:apis:eBLBaseComponents">1.0006</Build>
401
+ <AuthorizationID xsi:type="ebl:AuthorizationId">1TX27389GX108740X</AuthorizationID>
402
+ </DoReauthorizationResponse>
403
+ </SOAP-ENV:Body>
404
+ </SOAP-ENV:Envelope>
405
+ RESPONSE
406
+ end
407
+
408
+ def fraud_review_response
409
+ <<-RESPONSE
410
+ <?xml version="1.0" encoding="UTF-8"?>
411
+ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:cc="urn:ebay:apis:CoreComponentTypes" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:ebl="urn:ebay:apis:eBLBaseComponents" xmlns:ns="urn:ebay:api:PayPalAPI">
412
+ <SOAP-ENV:Header>
413
+ <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext" xsi:type="wsse:SecurityType"/>
414
+ <RequesterCredentials xmlns="urn:ebay:api:PayPalAPI" xsi:type="ebl:CustomSecurityHeaderType">
415
+ <Credentials xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:UserIdPasswordType">
416
+ <Username xsi:type="xs:string"/>
417
+ <Password xsi:type="xs:string"/>
418
+ <Signature xsi:type="xs:string">An5ns1Kso7MWUdW4ErQKJJJ4qi4-Azffuo82oMt-Cv9I8QTOs-lG5sAv</Signature>
419
+ <Subject xsi:type="xs:string"/>
420
+ </Credentials>
421
+ </RequesterCredentials>
422
+ </SOAP-ENV:Header>
423
+ <SOAP-ENV:Body id="_0">
424
+ <DoDirectPaymentResponse xmlns="urn:ebay:api:PayPalAPI">
425
+ <Timestamp xmlns="urn:ebay:apis:eBLBaseComponents">2008-07-04T19:27:39Z</Timestamp>
426
+ <Ack xmlns="urn:ebay:apis:eBLBaseComponents">SuccessWithWarning</Ack>
427
+ <CorrelationID xmlns="urn:ebay:apis:eBLBaseComponents">205d8397e7ed</CorrelationID>
428
+ <Errors xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:ErrorType">
429
+ <ShortMessage xsi:type="xs:string">Payment Pending your review in Fraud Management Filters</ShortMessage>
430
+ <LongMessage xsi:type="xs:string">Payment Pending your review in Fraud Management Filters</LongMessage>
431
+ <ErrorCode xsi:type="xs:token">11610</ErrorCode>
432
+ <SeverityCode xmlns="urn:ebay:apis:eBLBaseComponents">Warning</SeverityCode>
433
+ </Errors>
434
+ <Version xmlns="urn:ebay:apis:eBLBaseComponents">50.0</Version>
435
+ <Build xmlns="urn:ebay:apis:eBLBaseComponents">623197</Build>
436
+ <Amount xsi:type="cc:BasicAmountType" currencyID="USD">1500.00</Amount>
437
+ <AVSCode xsi:type="xs:string">X</AVSCode>
438
+ <CVV2Code xsi:type="xs:string">M</CVV2Code>
439
+ <TransactionID>5V117995ER6796022</TransactionID>
440
+ </DoDirectPaymentResponse>
441
+ </SOAP-ENV:Body>
442
+ </SOAP-ENV:Envelope>
443
+ RESPONSE
444
+ end
445
+
446
+ def failed_capture_due_to_pending_fraud_review
447
+ <<-RESPONSE
448
+ <?xml version="1.0" encoding="UTF-8"?>
449
+ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:cc="urn:ebay:apis:CoreComponentTypes" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:market="urn:ebay:apis:Market" xmlns:auction="urn:ebay:apis:Auction" xmlns:sizeship="urn:ebay:api:PayPalAPI/sizeship.xsd" xmlns:ship="urn:ebay:apis:ship" xmlns:skype="urn:ebay:apis:skype" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:ebl="urn:ebay:apis:eBLBaseComponents" xmlns:ns="urn:ebay:api:PayPalAPI">
450
+ <SOAP-ENV:Header>
451
+ <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext" xsi:type="wsse:SecurityType"/>
452
+ <RequesterCredentials xmlns="urn:ebay:api:PayPalAPI" xsi:type="ebl:CustomSecurityHeaderType">
453
+ <Credentials xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:UserIdPasswordType">
454
+ <Username xsi:type="xs:string"/>
455
+ <Password xsi:type="xs:string"/>
456
+ <Subject xsi:type="xs:string"/>
457
+ </Credentials>
458
+ </RequesterCredentials>
459
+ </SOAP-ENV:Header>
460
+ <SOAP-ENV:Body id="_0">
461
+ <DoCaptureResponse xmlns="urn:ebay:api:PayPalAPI">
462
+ <Timestamp xmlns="urn:ebay:apis:eBLBaseComponents">2008-07-04T21:45:35Z</Timestamp>
463
+ <Ack xmlns="urn:ebay:apis:eBLBaseComponents">Failure</Ack>
464
+ <CorrelationID xmlns="urn:ebay:apis:eBLBaseComponents">32a3855bd35b7</CorrelationID>
465
+ <Errors xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:ErrorType">
466
+ <ShortMessage xsi:type="xs:string">Transaction must be accepted in Fraud Management Filters before capture.</ShortMessage>
467
+ <LongMessage xsi:type="xs:string"/>
468
+ <ErrorCode xsi:type="xs:token">11612</ErrorCode>
469
+ <SeverityCode xmlns="urn:ebay:apis:eBLBaseComponents">Error</SeverityCode>
470
+ </Errors>
471
+ <Version xmlns="urn:ebay:apis:eBLBaseComponents">52.000000</Version>
472
+ <Build xmlns="urn:ebay:apis:eBLBaseComponents">588340</Build>
473
+ <DoCaptureResponseDetails xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:DoCaptureResponseDetailsType">
474
+ <PaymentInfo xsi:type="ebl:PaymentInfoType">
475
+ <TransactionType xsi:type="ebl:PaymentTransactionCodeType">none</TransactionType>
476
+ <PaymentType xsi:type="ebl:PaymentCodeType">none</PaymentType>
477
+ <PaymentStatus xsi:type="ebl:PaymentStatusCodeType">None</PaymentStatus>
478
+ <PendingReason xsi:type="ebl:PendingStatusCodeType">none</PendingReason>
479
+ <ReasonCode xsi:type="ebl:ReversalReasonCodeType">none</ReasonCode>
480
+ </PaymentInfo>
481
+ </DoCaptureResponseDetails>
482
+ </DoCaptureResponse>
483
+ </SOAP-ENV:Body>
484
+ </SOAP-ENV:Envelope>
485
+ RESPONSE
486
+ end
487
+
488
+ def authentication_failed_response
489
+ <<-RESPONSE
490
+ <?xml version="1.0" encoding="UTF-8"?>
491
+ <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:cc="urn:ebay:apis:CoreComponentTypes" xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:market="urn:ebay:apis:Market" xmlns:auction="urn:ebay:apis:Auction" xmlns:sizeship="urn:ebay:api:PayPalAPI/sizeship.xsd" xmlns:ship="urn:ebay:apis:ship" xmlns:skype="urn:ebay:apis:skype" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:ebl="urn:ebay:apis:eBLBaseComponents" xmlns:ns="urn:ebay:api:PayPalAPI">
492
+ <SOAP-ENV:Header>
493
+ <Security xmlns="http://schemas.xmlsoap.org/ws/2002/12/secext" xsi:type="wsse:SecurityType"/>
494
+ <RequesterCredentials xmlns="urn:ebay:api:PayPalAPI" xsi:type="ebl:CustomSecurityHeaderType">
495
+ <Credentials xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:UserIdPasswordType">
496
+ <Username xsi:type="xs:string"/>
497
+ <Password xsi:type="xs:string"/>
498
+ <Subject xsi:type="xs:string"/>
499
+ </Credentials>
500
+ </RequesterCredentials>
501
+ </SOAP-ENV:Header>
502
+ <SOAP-ENV:Body id="_0">
503
+ <DoDirectPaymentResponse xmlns="urn:ebay:api:PayPalAPI">
504
+ <Timestamp xmlns="urn:ebay:apis:eBLBaseComponents">2008-08-12T19:40:59Z</Timestamp>
505
+ <Ack xmlns="urn:ebay:apis:eBLBaseComponents">Failure</Ack>
506
+ <CorrelationID xmlns="urn:ebay:apis:eBLBaseComponents">b874109bfd11</CorrelationID>
507
+ <Errors xmlns="urn:ebay:apis:eBLBaseComponents" xsi:type="ebl:ErrorType">
508
+ <ShortMessage xsi:type="xs:string">Authentication/Authorization Failed</ShortMessage>
509
+ <LongMessage xsi:type="xs:string">You do not have permissions to make this API call</LongMessage>
510
+ <ErrorCode xsi:type="xs:token">10002</ErrorCode>
511
+ <SeverityCode xmlns="urn:ebay:apis:eBLBaseComponents">Error</SeverityCode>
512
+ </Errors>
513
+ <Version xmlns="urn:ebay:apis:eBLBaseComponents">52.000000</Version>
514
+ <Build xmlns="urn:ebay:apis:eBLBaseComponents">628921</Build>
515
+ </DoDirectPaymentResponse>
516
+ </SOAP-ENV:Body>
517
+ </SOAP-ENV:Envelope>
518
+ RESPONSE
519
+ end
520
+ end
@@ -0,0 +1,86 @@
1
+ require 'test_helper'
2
+
3
+ class PlugnpayTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ Base.gateway_mode = :test
7
+
8
+ @gateway = PlugnpayGateway.new(
9
+ :login => 'X',
10
+ :password => 'Y'
11
+ )
12
+
13
+ @credit_card = credit_card
14
+ @options = {
15
+ :billing_address => address,
16
+ :description => 'Store purchase'
17
+ }
18
+ @amount = 100
19
+ end
20
+
21
+ def test_purchase_success
22
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
23
+
24
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
25
+ assert_equal Response, response.class
26
+ assert_success response
27
+ assert_equal '2008012522252119738', response.authorization
28
+ end
29
+
30
+ def test_purchase_error
31
+ @gateway.expects(:ssl_post).returns(unsuccessful_purchase_response)
32
+
33
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
34
+ assert_equal Response, response.class
35
+ assert_failure response
36
+ end
37
+
38
+ def test_add_address_outsite_north_america
39
+ result = PlugnpayGateway::PlugnpayPostData.new
40
+
41
+ @gateway.send(:add_addresses, result, :billing_address => {:address1 => '164 Waverley Street', :country => 'DE', :state => 'Dortmund'} )
42
+
43
+ assert_equal result[:state], 'ZZ'
44
+ assert_equal result[:province], 'Dortmund'
45
+
46
+ assert_equal result[:card_state], 'ZZ'
47
+ assert_equal result[:card_prov], 'Dortmund'
48
+
49
+ assert_equal result[:card_address1], '164 Waverley Street'
50
+ assert_equal result[:card_country], 'DE'
51
+
52
+ end
53
+
54
+ def test_add_address
55
+ result = PlugnpayGateway::PlugnpayPostData.new
56
+
57
+ @gateway.send(:add_addresses, result, :billing_address => {:address1 => '164 Waverley Street', :country => 'US', :state => 'CO'} )
58
+
59
+ assert_equal result[:card_state], 'CO'
60
+ assert_equal result[:card_address1], '164 Waverley Street'
61
+ assert_equal result[:card_country], 'US'
62
+ end
63
+
64
+ def test_avs_result
65
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
66
+
67
+ response = @gateway.purchase(@amount, @credit_card, @options)
68
+ assert_equal 'X', response.avs_result['code']
69
+ end
70
+
71
+ def test_cvv_result
72
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
73
+
74
+ response = @gateway.purchase(@amount, @credit_card, @options)
75
+ assert_equal 'M', response.cvv_result['code']
76
+ end
77
+
78
+ private
79
+ def successful_purchase_response
80
+ "FinalStatus=success&IPaddress=72%2e138%2e32%2e216&MStatus=success&User_Agent=&acct_code3=newcard&address1=1234%20My%20Street&address2=Apt%201&app_level=5&auth_code=TSTAUT&auth_date=20080125&auth_msg=%20&authtype=authpostauth&avs_code=X&card_address1=1234%20My%20Street&card_amount=1%2e00&card_city=Ottawa&card_country=CA&card_name=Longbob%20Longsen&card_state=ON&card_type=VISA&card_zip=K1C2N6&city=Ottawa&convert=underscores&country=CA&currency=usd&cvvresp=M&dontsndmail=yes&easycart=0&merchant=pnpdemo2&merchfraudlev=&mode=auth&orderID=2008012522252119738&phone=555%2d555%2d5555&publisher_email=trash%40plugnpay%2ecom&publisher_name=pnpdemo2&publisher_password=pnpdemo222&resp_code=00&shipinfo=0&shipname=Jim%20Smith&sresp=A&state=ON&success=yes&zip=K1C2N6&a=b\n"
81
+ end
82
+
83
+ def unsuccessful_purchase_response
84
+ "FinalStatus=fraud&IPaddress=72%2e138%2e32%2e216&MStatus=badcard&User_Agent=&address1=1234%20My%20Street&address2=Apt%201&app_level=5&auth_code=&auth_date=20080125&auth_msg=%20Invalid%20Credit%20Card%20Number%2e%7c&authtype=authonly&card_address1=1234%20My%20Street&card_amount=1%2e00&card_city=Ottawa&card_country=CA&card_name=Longbob%20Longsen&card_state=ON&card_type=failure&card_zip=K1C2N6&city=Ottawa&convert=underscores&country=CA&currency=usd&dontsndmail=yes&easycart=0&errdetails=card%2dnumber%7cCard%20Number%20fails%20LUHN%20%2d%2010%20check%2e%7c&errlevel=1&merchant=pnpdemo2&mode=auth&orderID=2008012522275901541&phone=555%2d555%2d5555&publisher_email=trash%40plugnpay%2ecom&publisher_name=pnpdemo2&publisher_password=pnpdemo222&resp_code=P55&shipinfo=0&shipname=Jim%20Smith&sresp=E&state=ON&success=no&zip=K1C2N6&MErrMsg=Invalid%20Credit%20Card%20Number%2e%7c&a=b\n"
85
+ end
86
+ end