mattbauer-activemerchant 1.4.2

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 (292) hide show
  1. data/CHANGELOG +459 -0
  2. data/CONTRIBUTERS +118 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README +134 -0
  5. data/Rakefile +153 -0
  6. data/gem-public_cert.pem +20 -0
  7. data/init.rb +3 -0
  8. data/lib/active_merchant.rb +60 -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 +34 -0
  17. data/lib/active_merchant/billing/gateway.rb +158 -0
  18. data/lib/active_merchant/billing/gateways.rb +3 -0
  19. data/lib/active_merchant/billing/gateways/authorize_net.rb +657 -0
  20. data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +703 -0
  21. data/lib/active_merchant/billing/gateways/beanstream.rb +102 -0
  22. data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +233 -0
  23. data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
  24. data/lib/active_merchant/billing/gateways/bogus.rb +98 -0
  25. data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
  26. data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
  27. data/lib/active_merchant/billing/gateways/cyber_source.rb +406 -0
  28. data/lib/active_merchant/billing/gateways/data_cash.rb +595 -0
  29. data/lib/active_merchant/billing/gateways/efsnet.rb +229 -0
  30. data/lib/active_merchant/billing/gateways/elavon.rb +106 -0
  31. data/lib/active_merchant/billing/gateways/eway.rb +277 -0
  32. data/lib/active_merchant/billing/gateways/exact.rb +222 -0
  33. data/lib/active_merchant/billing/gateways/first_pay.rb +172 -0
  34. data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
  35. data/lib/active_merchant/billing/gateways/linkpoint.rb +396 -0
  36. data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +154 -0
  37. data/lib/active_merchant/billing/gateways/merchant_ware.rb +283 -0
  38. data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
  39. data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +214 -0
  40. data/lib/active_merchant/billing/gateways/moneris.rb +295 -0
  41. data/lib/active_merchant/billing/gateways/moneris_usa.rb +258 -0
  42. data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
  43. data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
  44. data/lib/active_merchant/billing/gateways/ogone.rb +259 -0
  45. data/lib/active_merchant/billing/gateways/pay_junction.rb +392 -0
  46. data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
  47. data/lib/active_merchant/billing/gateways/payflow.rb +236 -0
  48. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
  49. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
  50. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  51. data/lib/active_merchant/billing/gateways/payflow_express.rb +138 -0
  52. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
  53. data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
  54. data/lib/active_merchant/billing/gateways/payment_express.rb +230 -0
  55. data/lib/active_merchant/billing/gateways/paypal.rb +121 -0
  56. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +325 -0
  57. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +38 -0
  58. data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
  59. data/lib/active_merchant/billing/gateways/paypal_express.rb +130 -0
  60. data/lib/active_merchant/billing/gateways/paypal_express_common.rb +20 -0
  61. data/lib/active_merchant/billing/gateways/plugnpay.rb +292 -0
  62. data/lib/active_merchant/billing/gateways/psigate.rb +214 -0
  63. data/lib/active_merchant/billing/gateways/psl_card.rb +306 -0
  64. data/lib/active_merchant/billing/gateways/quickpay.rb +213 -0
  65. data/lib/active_merchant/billing/gateways/realex.rb +200 -0
  66. data/lib/active_merchant/billing/gateways/sage.rb +146 -0
  67. data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
  68. data/lib/active_merchant/billing/gateways/sage/sage_core.rb +110 -0
  69. data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
  70. data/lib/active_merchant/billing/gateways/sage_pay.rb +308 -0
  71. data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
  72. data/lib/active_merchant/billing/gateways/secure_pay_au.rb +157 -0
  73. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
  74. data/lib/active_merchant/billing/gateways/skip_jack.rb +442 -0
  75. data/lib/active_merchant/billing/gateways/smart_ps.rb +254 -0
  76. data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
  77. data/lib/active_merchant/billing/gateways/transax.rb +26 -0
  78. data/lib/active_merchant/billing/gateways/trust_commerce.rb +418 -0
  79. data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
  80. data/lib/active_merchant/billing/gateways/verifi.rb +228 -0
  81. data/lib/active_merchant/billing/gateways/viaklix.rb +189 -0
  82. data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
  83. data/lib/active_merchant/billing/integrations.rb +22 -0
  84. data/lib/active_merchant/billing/integrations/action_view_helper.rb +79 -0
  85. data/lib/active_merchant/billing/integrations/bogus.rb +22 -0
  86. data/lib/active_merchant/billing/integrations/bogus/helper.rb +17 -0
  87. data/lib/active_merchant/billing/integrations/bogus/notification.rb +11 -0
  88. data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
  89. data/lib/active_merchant/billing/integrations/chronopay.rb +22 -0
  90. data/lib/active_merchant/billing/integrations/chronopay/helper.rb +81 -0
  91. data/lib/active_merchant/billing/integrations/chronopay/notification.rb +156 -0
  92. data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
  93. data/lib/active_merchant/billing/integrations/gestpay.rb +26 -0
  94. data/lib/active_merchant/billing/integrations/gestpay/common.rb +42 -0
  95. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +70 -0
  96. data/lib/active_merchant/billing/integrations/gestpay/notification.rb +83 -0
  97. data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
  98. data/lib/active_merchant/billing/integrations/helper.rb +93 -0
  99. data/lib/active_merchant/billing/integrations/hi_trust.rb +26 -0
  100. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
  101. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +59 -0
  102. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
  103. data/lib/active_merchant/billing/integrations/nochex.rb +87 -0
  104. data/lib/active_merchant/billing/integrations/nochex/helper.rb +68 -0
  105. data/lib/active_merchant/billing/integrations/nochex/notification.rb +94 -0
  106. data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
  107. data/lib/active_merchant/billing/integrations/notification.rb +62 -0
  108. data/lib/active_merchant/billing/integrations/paypal.rb +40 -0
  109. data/lib/active_merchant/billing/integrations/paypal/helper.rb +119 -0
  110. data/lib/active_merchant/billing/integrations/paypal/notification.rb +154 -0
  111. data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
  112. data/lib/active_merchant/billing/integrations/quickpay.rb +18 -0
  113. data/lib/active_merchant/billing/integrations/quickpay/helper.rb +72 -0
  114. data/lib/active_merchant/billing/integrations/quickpay/notification.rb +74 -0
  115. data/lib/active_merchant/billing/integrations/return.rb +35 -0
  116. data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -0
  117. data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +59 -0
  118. data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +114 -0
  119. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
  120. data/lib/active_merchant/billing/response.rb +32 -0
  121. data/lib/active_merchant/lib/connection.rb +170 -0
  122. data/lib/active_merchant/lib/country.rb +319 -0
  123. data/lib/active_merchant/lib/error.rb +4 -0
  124. data/lib/active_merchant/lib/post_data.rb +22 -0
  125. data/lib/active_merchant/lib/posts_data.rb +47 -0
  126. data/lib/active_merchant/lib/requires_parameters.rb +16 -0
  127. data/lib/active_merchant/lib/utils.rb +18 -0
  128. data/lib/active_merchant/lib/validateable.rb +76 -0
  129. data/lib/certs/cacert.pem +7815 -0
  130. data/lib/support/gateway_support.rb +58 -0
  131. data/script/destroy +14 -0
  132. data/script/generate +14 -0
  133. data/test/fixtures.yml +353 -0
  134. data/test/remote/gateways/remote_authorize_net_cim_test.rb +459 -0
  135. data/test/remote/gateways/remote_authorize_net_test.rb +145 -0
  136. data/test/remote/gateways/remote_beanstream_interac_test.rb +53 -0
  137. data/test/remote/gateways/remote_beanstream_test.rb +150 -0
  138. data/test/remote/gateways/remote_braintree_test.rb +154 -0
  139. data/test/remote/gateways/remote_card_stream_test.rb +148 -0
  140. data/test/remote/gateways/remote_cyber_source_test.rb +144 -0
  141. data/test/remote/gateways/remote_data_cash_test.rb +357 -0
  142. data/test/remote/gateways/remote_efsnet_test.rb +81 -0
  143. data/test/remote/gateways/remote_elavon_test.rb +66 -0
  144. data/test/remote/gateways/remote_eway_test.rb +74 -0
  145. data/test/remote/gateways/remote_exact_test.rb +60 -0
  146. data/test/remote/gateways/remote_first_pay_test.rb +87 -0
  147. data/test/remote/gateways/remote_instapay_test.rb +61 -0
  148. data/test/remote/gateways/remote_linkpoint_test.rb +112 -0
  149. data/test/remote/gateways/remote_merchant_e_solutions_test.rb +173 -0
  150. data/test/remote/gateways/remote_merchant_ware_test.rb +113 -0
  151. data/test/remote/gateways/remote_modern_payments_cim_test.rb +58 -0
  152. data/test/remote/gateways/remote_modern_payments_test.rb +43 -0
  153. data/test/remote/gateways/remote_moneris_test.rb +118 -0
  154. data/test/remote/gateways/remote_moneris_usa_test.rb +115 -0
  155. data/test/remote/gateways/remote_net_registry_test.rb +85 -0
  156. data/test/remote/gateways/remote_netbilling_test.rb +70 -0
  157. data/test/remote/gateways/remote_ogone_test.rb +108 -0
  158. data/test/remote/gateways/remote_pay_junction_test.rb +143 -0
  159. data/test/remote/gateways/remote_pay_secure_test.rb +39 -0
  160. data/test/remote/gateways/remote_payflow_express_test.rb +50 -0
  161. data/test/remote/gateways/remote_payflow_test.rb +237 -0
  162. data/test/remote/gateways/remote_payflow_uk_test.rb +173 -0
  163. data/test/remote/gateways/remote_payment_express_test.rb +136 -0
  164. data/test/remote/gateways/remote_paypal_express_test.rb +49 -0
  165. data/test/remote/gateways/remote_paypal_test.rb +178 -0
  166. data/test/remote/gateways/remote_plugnpay_test.rb +72 -0
  167. data/test/remote/gateways/remote_psigate_test.rb +50 -0
  168. data/test/remote/gateways/remote_psl_card_test.rb +125 -0
  169. data/test/remote/gateways/remote_quickpay_test.rb +190 -0
  170. data/test/remote/gateways/remote_realex_test.rb +224 -0
  171. data/test/remote/gateways/remote_sage_bankcard_test.rb +109 -0
  172. data/test/remote/gateways/remote_sage_pay_test.rb +219 -0
  173. data/test/remote/gateways/remote_sage_test.rb +87 -0
  174. data/test/remote/gateways/remote_sage_virtual_check_test.rb +62 -0
  175. data/test/remote/gateways/remote_secure_pay_au_test.rb +40 -0
  176. data/test/remote/gateways/remote_secure_pay_tech_test.rb +37 -0
  177. data/test/remote/gateways/remote_secure_pay_test.rb +28 -0
  178. data/test/remote/gateways/remote_skipjack_test.rb +105 -0
  179. data/test/remote/gateways/remote_trans_first_test.rb +34 -0
  180. data/test/remote/gateways/remote_transax_test.rb +112 -0
  181. data/test/remote/gateways/remote_trust_commerce_test.rb +152 -0
  182. data/test/remote/gateways/remote_usa_epay_test.rb +46 -0
  183. data/test/remote/gateways/remote_verifi_test.rb +107 -0
  184. data/test/remote/gateways/remote_viaklix_test.rb +43 -0
  185. data/test/remote/gateways/remote_wirecard_test.rb +111 -0
  186. data/test/remote/integrations/remote_gestpay_integration_test.rb +37 -0
  187. data/test/remote/integrations/remote_paypal_integration_test.rb +26 -0
  188. data/test/test_helper.rb +182 -0
  189. data/test/unit/avs_result_test.rb +59 -0
  190. data/test/unit/base_test.rb +55 -0
  191. data/test/unit/check_test.rb +88 -0
  192. data/test/unit/connection_test.rb +129 -0
  193. data/test/unit/country_code_test.rb +33 -0
  194. data/test/unit/country_test.rb +64 -0
  195. data/test/unit/credit_card_formatting_test.rb +19 -0
  196. data/test/unit/credit_card_methods_test.rb +179 -0
  197. data/test/unit/credit_card_test.rb +318 -0
  198. data/test/unit/cvv_result_test.rb +33 -0
  199. data/test/unit/expiry_date_test.rb +32 -0
  200. data/test/unit/gateways/authorize_net_cim_test.rb +638 -0
  201. data/test/unit/gateways/authorize_net_test.rb +290 -0
  202. data/test/unit/gateways/beanstream_interac_test.rb +51 -0
  203. data/test/unit/gateways/beanstream_test.rb +108 -0
  204. data/test/unit/gateways/bogus_test.rb +46 -0
  205. data/test/unit/gateways/braintree_test.rb +126 -0
  206. data/test/unit/gateways/card_stream_test.rb +90 -0
  207. data/test/unit/gateways/cyber_source_test.rb +188 -0
  208. data/test/unit/gateways/data_cash_test.rb +133 -0
  209. data/test/unit/gateways/efsnet_test.rb +123 -0
  210. data/test/unit/gateways/elavon_test.rb +139 -0
  211. data/test/unit/gateways/eway_test.rb +118 -0
  212. data/test/unit/gateways/exact_test.rb +156 -0
  213. data/test/unit/gateways/first_pay_test.rb +125 -0
  214. data/test/unit/gateways/gateway_test.rb +48 -0
  215. data/test/unit/gateways/instapay_test.rb +102 -0
  216. data/test/unit/gateways/linkpoint_test.rb +167 -0
  217. data/test/unit/gateways/merchant_e_solutions_test.rb +169 -0
  218. data/test/unit/gateways/merchant_ware_test.rb +188 -0
  219. data/test/unit/gateways/modern_payments_cim_test.rb +171 -0
  220. data/test/unit/gateways/moneris_test.rb +185 -0
  221. data/test/unit/gateways/moneris_usa_test.rb +183 -0
  222. data/test/unit/gateways/net_registry_test.rb +416 -0
  223. data/test/unit/gateways/netbilling_test.rb +54 -0
  224. data/test/unit/gateways/ogone_test.rb +256 -0
  225. data/test/unit/gateways/pay_junction_test.rb +123 -0
  226. data/test/unit/gateways/pay_secure_test.rb +71 -0
  227. data/test/unit/gateways/payflow_express_test.rb +173 -0
  228. data/test/unit/gateways/payflow_express_uk_test.rb +86 -0
  229. data/test/unit/gateways/payflow_test.rb +305 -0
  230. data/test/unit/gateways/payflow_uk_test.rb +30 -0
  231. data/test/unit/gateways/payment_express_test.rb +195 -0
  232. data/test/unit/gateways/paypal_express_test.rb +382 -0
  233. data/test/unit/gateways/paypal_test.rb +569 -0
  234. data/test/unit/gateways/plugnpay_test.rb +86 -0
  235. data/test/unit/gateways/psigate_test.rb +169 -0
  236. data/test/unit/gateways/psl_card_test.rb +64 -0
  237. data/test/unit/gateways/quickpay_test.rb +112 -0
  238. data/test/unit/gateways/realex_test.rb +151 -0
  239. data/test/unit/gateways/sage_bankcard_test.rb +162 -0
  240. data/test/unit/gateways/sage_pay_test.rb +139 -0
  241. data/test/unit/gateways/sage_virtual_check_test.rb +71 -0
  242. data/test/unit/gateways/secure_pay_au_test.rb +207 -0
  243. data/test/unit/gateways/secure_pay_tech_test.rb +44 -0
  244. data/test/unit/gateways/secure_pay_test.rb +87 -0
  245. data/test/unit/gateways/skip_jack_test.rb +133 -0
  246. data/test/unit/gateways/trans_first_test.rb +112 -0
  247. data/test/unit/gateways/trust_commerce_test.rb +90 -0
  248. data/test/unit/gateways/usa_epay_test.rb +128 -0
  249. data/test/unit/gateways/verifi_test.rb +96 -0
  250. data/test/unit/gateways/viaklix_test.rb +78 -0
  251. data/test/unit/gateways/wirecard_test.rb +250 -0
  252. data/test/unit/generators/test_gateway_generator.rb +46 -0
  253. data/test/unit/generators/test_generator_helper.rb +20 -0
  254. data/test/unit/generators/test_integration_generator.rb +53 -0
  255. data/test/unit/integrations/action_view_helper_test.rb +50 -0
  256. data/test/unit/integrations/bogus_module_test.rb +20 -0
  257. data/test/unit/integrations/chronopay_module_test.rb +13 -0
  258. data/test/unit/integrations/gestpay_module_test.rb +14 -0
  259. data/test/unit/integrations/helpers/bogus_helper_test.rb +28 -0
  260. data/test/unit/integrations/helpers/chronopay_helper_test.rb +67 -0
  261. data/test/unit/integrations/helpers/gestpay_helper_test.rb +100 -0
  262. data/test/unit/integrations/helpers/hi_trust_helper_test.rb +16 -0
  263. data/test/unit/integrations/helpers/nochex_helper_test.rb +53 -0
  264. data/test/unit/integrations/helpers/paypal_helper_test.rb +171 -0
  265. data/test/unit/integrations/helpers/quickpay_helper_test.rb +40 -0
  266. data/test/unit/integrations/helpers/two_checkout_helper_test.rb +92 -0
  267. data/test/unit/integrations/hi_trust_module_test.rb +13 -0
  268. data/test/unit/integrations/nochex_module_test.rb +13 -0
  269. data/test/unit/integrations/notifications/chronopay_notification_test.rb +66 -0
  270. data/test/unit/integrations/notifications/gestpay_notification_test.rb +60 -0
  271. data/test/unit/integrations/notifications/hi_trust_notification_test.rb +59 -0
  272. data/test/unit/integrations/notifications/nochex_notification_test.rb +51 -0
  273. data/test/unit/integrations/notifications/notification_test.rb +54 -0
  274. data/test/unit/integrations/notifications/paypal_notification_test.rb +85 -0
  275. data/test/unit/integrations/notifications/quickpay_notification_test.rb +69 -0
  276. data/test/unit/integrations/notifications/two_checkout_notification_test.rb +55 -0
  277. data/test/unit/integrations/paypal_module_test.rb +28 -0
  278. data/test/unit/integrations/quickpay_module_test.rb +9 -0
  279. data/test/unit/integrations/returns/chronopay_return_test.rb +11 -0
  280. data/test/unit/integrations/returns/gestpay_return_test.rb +10 -0
  281. data/test/unit/integrations/returns/hi_trust_return_test.rb +24 -0
  282. data/test/unit/integrations/returns/nochex_return_test.rb +10 -0
  283. data/test/unit/integrations/returns/paypal_return_test.rb +10 -0
  284. data/test/unit/integrations/returns/return_test.rb +11 -0
  285. data/test/unit/integrations/returns/two_checkout_return_test.rb +24 -0
  286. data/test/unit/integrations/two_checkout_module_test.rb +13 -0
  287. data/test/unit/post_data_test.rb +55 -0
  288. data/test/unit/posts_data_test.rb +48 -0
  289. data/test/unit/response_test.rb +28 -0
  290. data/test/unit/utils_test.rb +7 -0
  291. data/test/unit/validateable_test.rb +60 -0
  292. metadata +396 -0
@@ -0,0 +1,173 @@
1
+ require 'test_helper'
2
+
3
+ class PayflowExpressTest < Test::Unit::TestCase
4
+ TEST_REDIRECT_URL = 'https://test-expresscheckout.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=1234567890'
5
+ LIVE_REDIRECT_URL = 'https://www.paypal.com/cgibin/webscr?cmd=_express-checkout&token=1234567890'
6
+
7
+ TEST_REDIRECT_URL_WITHOUT_REVIEW = "#{TEST_REDIRECT_URL}&useraction=commit"
8
+ LIVE_REDIRECT_URL_WITHOUT_REVIEW = "#{LIVE_REDIRECT_URL}&useraction=commit"
9
+
10
+ def setup
11
+ Base.gateway_mode = :test
12
+
13
+ @gateway = PayflowExpressGateway.new(
14
+ :login => 'LOGIN',
15
+ :password => 'PASSWORD'
16
+ )
17
+
18
+ @address = { :address1 => '1234 My Street',
19
+ :address2 => 'Apt 1',
20
+ :company => 'Widgets Inc',
21
+ :city => 'Ottawa',
22
+ :state => 'ON',
23
+ :zip => 'K1C2N6',
24
+ :country => 'Canada',
25
+ :phone => '(555)555-5555'
26
+ }
27
+ end
28
+
29
+ def teardown
30
+ Base.gateway_mode = :test
31
+ end
32
+
33
+ def test_using_test_mode
34
+ assert @gateway.test?
35
+ end
36
+
37
+ def test_overriding_test_mode
38
+ Base.gateway_mode = :production
39
+
40
+ gateway = PayflowExpressGateway.new(
41
+ :login => 'LOGIN',
42
+ :password => 'PASSWORD',
43
+ :test => true
44
+ )
45
+
46
+ assert gateway.test?
47
+ end
48
+
49
+ def test_using_production_mode
50
+ Base.gateway_mode = :production
51
+
52
+ gateway = PayflowExpressGateway.new(
53
+ :login => 'LOGIN',
54
+ :password => 'PASSWORD'
55
+ )
56
+
57
+ assert !gateway.test?
58
+ end
59
+
60
+ def test_live_redirect_url
61
+ Base.gateway_mode = :production
62
+ assert_equal LIVE_REDIRECT_URL, @gateway.redirect_url_for('1234567890')
63
+ end
64
+
65
+ def test_test_redirect_url
66
+ assert_equal TEST_REDIRECT_URL, @gateway.redirect_url_for('1234567890')
67
+ end
68
+
69
+ def test_live_redirect_url_without_review
70
+ Base.gateway_mode = :production
71
+ assert_equal LIVE_REDIRECT_URL_WITHOUT_REVIEW, @gateway.redirect_url_for('1234567890', :review => false)
72
+ end
73
+
74
+ def test_test_redirect_url_without_review
75
+ assert_equal :test, Base.gateway_mode
76
+ assert_equal TEST_REDIRECT_URL_WITHOUT_REVIEW, @gateway.redirect_url_for('1234567890', :review => false)
77
+ end
78
+
79
+ def test_invalid_get_express_details_request
80
+ @gateway.expects(:ssl_post).returns(invalid_get_express_details_response)
81
+ response = @gateway.details_for('EC-2OPN7UJGFWK9OYFV')
82
+ assert_failure response
83
+ assert response.test?
84
+ assert_equal 'Field format error: Invalid Token', response.message
85
+ end
86
+
87
+ def test_get_express_details
88
+ @gateway.expects(:ssl_post).returns(successful_get_express_details_response)
89
+ response = @gateway.details_for('EC-2OPN7UJGFWK9OYFV')
90
+ assert_instance_of PayflowExpressResponse, response
91
+ assert_success response
92
+ assert response.test?
93
+
94
+ assert_equal 'EC-2OPN7UJGFWK9OYFV', response.token
95
+ assert_equal '12345678901234567', response.payer_id
96
+ assert_equal 'Buyer1@paypal.com', response.email
97
+ assert_equal 'Joe Smith', response.full_name
98
+ assert_equal 'US', response.payer_country
99
+
100
+ assert address = response.address
101
+ assert_equal 'Joe Smith', address['name']
102
+ assert_nil address['company']
103
+ assert_equal '111 Main St.', address['address1']
104
+ assert_nil address['address2']
105
+ assert_equal 'San Jose', address['city']
106
+ assert_equal 'CA', address['state']
107
+ assert_equal '95100', address['zip']
108
+ assert_equal 'US', address['country']
109
+ assert_nil address['phone']
110
+ end
111
+
112
+ def test_button_source
113
+ xml = Builder::XmlMarkup.new
114
+ @gateway.send(:add_paypal_details, xml, {})
115
+ xml_doc = REXML::Document.new(xml.target!)
116
+ assert_equal 'ActiveMerchant', REXML::XPath.first(xml_doc, '/PayPal/ButtonSource').text
117
+ end
118
+
119
+ private
120
+
121
+ def successful_get_express_details_response
122
+ <<-RESPONSE
123
+ <XMLPayResponse xmlns='http://www.verisign.com/XMLPay'>
124
+ <ResponseData>
125
+ <Vendor>TEST</Vendor>
126
+ <Partner>verisign</Partner>
127
+ <TransactionResults>
128
+ <TransactionResult>
129
+ <Result>0</Result>
130
+ <Message>Approved</Message>
131
+ <PayPalResult>
132
+ <EMail>Buyer1@paypal.com</EMail>
133
+ <PayerID>12345678901234567</PayerID>
134
+ <Token>EC-2OPN7UJGFWK9OYFV</Token>
135
+ <FeeAmount>0</FeeAmount>
136
+ <PayerStatus>verified</PayerStatus>
137
+ <Name>Joe</Name>
138
+ <ShipTo>
139
+ <Address>
140
+ <Street>111 Main St.</Street>
141
+ <City>San Jose</City>
142
+ <State>CA</State>
143
+ <Zip>95100</Zip>
144
+ <Country>US</Country>
145
+ </Address>
146
+ </ShipTo>
147
+ <CorrelationID>9c3706997455e</CorrelationID>
148
+ </PayPalResult>
149
+ <ExtData Name='LASTNAME' Value='Smith'/>
150
+ </TransactionResult>
151
+ </TransactionResults>
152
+ </ResponseData>
153
+ </XMLPayResponse>
154
+ RESPONSE
155
+ end
156
+
157
+ def invalid_get_express_details_response
158
+ <<-RESPONSE
159
+ <XMLPayResponse xmlns='http://www.verisign.com/XMLPay'>
160
+ <ResponseData>
161
+ <Vendor>TEST</Vendor>
162
+ <Partner>verisign</Partner>
163
+ <TransactionResults>
164
+ <TransactionResult>
165
+ <Result>7</Result>
166
+ <Message>Field format error: Invalid Token</Message>
167
+ </TransactionResult>
168
+ </TransactionResults>
169
+ </ResponseData>
170
+ </XMLPayResponse>
171
+ RESPONSE
172
+ end
173
+ end
@@ -0,0 +1,86 @@
1
+ require 'test_helper'
2
+
3
+ class PayflowExpressUkTest < Test::Unit::TestCase
4
+ def setup
5
+ @gateway = PayflowExpressUkGateway.new(
6
+ :login => 'LOGIN',
7
+ :password => 'PASSWORD'
8
+ )
9
+ end
10
+
11
+ def test_supported_countries
12
+ assert_equal ['GB'], PayflowExpressUkGateway.supported_countries
13
+ end
14
+
15
+ def test_get_express_details
16
+ @gateway.expects(:ssl_post).returns(successful_get_express_details_response)
17
+ response = @gateway.details_for('EC-2OPN7UJGFWK9OYFV')
18
+ assert_instance_of PayflowExpressResponse, response
19
+ assert_success response
20
+ assert response.test?
21
+
22
+ assert_equal 'EC-2OPN7UJGFWK9OYFV', response.token
23
+ assert_equal 'LYWCMEN4FA7ZQ', response.payer_id
24
+ assert_equal 'paul@test.com', response.email
25
+ assert_equal 'paul smith', response.full_name
26
+ assert_equal 'GB', response.payer_country
27
+
28
+ assert address = response.address
29
+ assert_equal 'paul smith', address['name']
30
+ assert_nil address['company']
31
+ assert_equal '10 keyworth avenue', address['address1']
32
+ assert_equal 'grangetown', address['address2']
33
+ assert_equal 'hinterland', address['city']
34
+ assert_equal 'Tyne and Wear', address['state']
35
+ assert_equal 'sr5 2uh', address['zip']
36
+ assert_equal 'GB', address['country']
37
+ assert_nil address['phone']
38
+ end
39
+
40
+ private
41
+ def successful_get_express_details_response
42
+ <<-RESPONSE
43
+ <?xml version="1.0"?>
44
+ <XMLPayResponse xmlns="http://www.paypal.com/XMLPay">
45
+ <ResponseData>
46
+ <Vendor>markcoop</Vendor>
47
+ <Partner>paypaluk</Partner>
48
+ <TransactionResults>
49
+ <TransactionResult>
50
+ <Result>0</Result>
51
+ <AVSResult>
52
+ <StreetMatch>Match</StreetMatch>
53
+ <ZipMatch>Match</ZipMatch>
54
+ </AVSResult>
55
+ <Message>Approved</Message>
56
+ <PayPalResult>
57
+ <EMail>paul@test.com</EMail>
58
+ <PayerID>LYWCMEN4FA7ZQ</PayerID>
59
+ <Token>EC-2OPN7UJGFWK9OYFV</Token>
60
+ <FeeAmount>0</FeeAmount>
61
+ <PayerStatus>unverified</PayerStatus>
62
+ <Name>paul</Name>
63
+ <ShipTo>
64
+ <Address>
65
+ <Street>10 keyworth avenue</Street>
66
+ <City>hinterland</City>
67
+ <State>Tyne and Wear</State>
68
+ <Zip>sr5 2uh</Zip>
69
+ <Country>GB</Country>
70
+ </Address>
71
+ </ShipTo>
72
+ <CorrelationID>1ea22ef3873ba</CorrelationID>
73
+ </PayPalResult>
74
+ <ExtData Name="LASTNAME" Value="smith"/>
75
+ <ExtData Name="SHIPTOSTREET2" Value="grangetown"/>
76
+ <ExtData Name="SHIPTONAME" Value="paul smith"/>
77
+ <ExtData Name="STREET2" Value="ALLAWAY AVENUE"/>
78
+ <ExtData Name="COUNTRYCODE" Value="GB"/>
79
+ <ExtData Name="ADDRESSSTATUS" Value="Y"/>
80
+ </TransactionResult>
81
+ </TransactionResults>
82
+ </ResponseData>
83
+ </XMLPayResponse>
84
+ RESPONSE
85
+ end
86
+ end
@@ -0,0 +1,305 @@
1
+ require 'test_helper'
2
+
3
+ class PayflowTest < Test::Unit::TestCase
4
+ def setup
5
+ Base.mode = :test
6
+
7
+ @gateway = PayflowGateway.new(
8
+ :login => 'LOGIN',
9
+ :password => 'PASSWORD'
10
+ )
11
+
12
+ @amount = 100
13
+ @credit_card = credit_card('4242424242424242')
14
+ @options = { :billing_address => address }
15
+ end
16
+
17
+ def test_successful_authorization
18
+ @gateway.stubs(:ssl_post).returns(successful_authorization_response)
19
+
20
+ assert response = @gateway.authorize(@amount, @credit_card, @options)
21
+ assert_equal "Approved", response.message
22
+ assert_success response
23
+ assert response.test?
24
+ assert_equal "VUJN1A6E11D9", response.authorization
25
+ end
26
+
27
+ def test_failed_authorization
28
+ @gateway.stubs(:ssl_post).returns(failed_authorization_response)
29
+
30
+ assert response = @gateway.authorize(@amount, @credit_card, @options)
31
+ assert_equal "Declined", response.message
32
+ assert_failure response
33
+ assert response.test?
34
+ end
35
+
36
+ def test_avs_result
37
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
38
+
39
+ response = @gateway.purchase(@amount, @credit_card, @options)
40
+ assert_equal 'Y', response.avs_result['code']
41
+ assert_equal 'Y', response.avs_result['street_match']
42
+ assert_equal 'Y', response.avs_result['postal_match']
43
+ end
44
+
45
+ def test_partial_avs_match
46
+ @gateway.expects(:ssl_post).returns(successful_duplicate_response)
47
+
48
+ response = @gateway.purchase(@amount, @credit_card, @options)
49
+ assert_equal 'A', response.avs_result['code']
50
+ assert_equal 'Y', response.avs_result['street_match']
51
+ assert_equal 'N', response.avs_result['postal_match']
52
+ end
53
+
54
+ def test_cvv_result
55
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
56
+
57
+ response = @gateway.purchase(@amount, @credit_card, @options)
58
+ assert_equal 'M', response.cvv_result['code']
59
+ end
60
+
61
+ def test_using_test_mode
62
+ assert @gateway.test?
63
+ end
64
+
65
+ def test_overriding_test_mode
66
+ Base.gateway_mode = :production
67
+
68
+ gateway = PayflowGateway.new(
69
+ :login => 'LOGIN',
70
+ :password => 'PASSWORD',
71
+ :test => true
72
+ )
73
+
74
+ assert gateway.test?
75
+ end
76
+
77
+ def test_using_production_mode
78
+ Base.gateway_mode = :production
79
+
80
+ gateway = PayflowGateway.new(
81
+ :login => 'LOGIN',
82
+ :password => 'PASSWORD'
83
+ )
84
+
85
+ assert !gateway.test?
86
+ end
87
+
88
+ def test_partner_class_accessor
89
+ assert_equal 'PayPal', PayflowGateway.partner
90
+ gateway = PayflowGateway.new(:login => 'test', :password => 'test')
91
+ assert_equal 'PayPal', gateway.options[:partner]
92
+ end
93
+
94
+ def test_partner_class_accessor_used_when_passed_in_partner_is_blank
95
+ assert_equal 'PayPal', PayflowGateway.partner
96
+ gateway = PayflowGateway.new(:login => 'test', :password => 'test', :partner => '')
97
+ assert_equal 'PayPal', gateway.options[:partner]
98
+ end
99
+
100
+ def test_passed_in_partner_overrides_class_accessor
101
+ assert_equal 'PayPal', PayflowGateway.partner
102
+ gateway = PayflowGateway.new(:login => 'test', :password => 'test', :partner => 'PayPalUk')
103
+ assert_equal 'PayPalUk', gateway.options[:partner]
104
+ end
105
+
106
+ def test_express_instance
107
+ gateway = PayflowGateway.new(
108
+ :login => 'test',
109
+ :password => 'password'
110
+ )
111
+ express = gateway.express
112
+ assert_instance_of PayflowExpressGateway, express
113
+ assert_equal 'PayPal', express.options[:partner]
114
+ assert_equal 'test', express.options[:login]
115
+ assert_equal 'password', express.options[:password]
116
+ end
117
+
118
+ def test_default_currency
119
+ assert_equal 'USD', PayflowGateway.default_currency
120
+ end
121
+
122
+ def test_supported_countries
123
+ assert_equal ['US', 'CA', 'SG', 'AU'], PayflowGateway.supported_countries
124
+ end
125
+
126
+ def test_supported_card_types
127
+ assert_equal [:visa, :master, :american_express, :jcb, :discover, :diners_club], PayflowGateway.supported_cardtypes
128
+ end
129
+
130
+ def test_initial_recurring_transaction_missing_parameters
131
+ assert_raises ArgumentError do
132
+ response = @gateway.recurring(@amount, @credit_card,
133
+ :periodicity => :monthly,
134
+ :initial_transaction => { }
135
+ )
136
+ end
137
+ end
138
+
139
+ def test_initial_purchase_missing_amount
140
+ assert_raises ArgumentError do
141
+ response = @gateway.recurring(@amount, @credit_card,
142
+ :periodicity => :monthly,
143
+ :initial_transaction => { :amount => :purchase }
144
+ )
145
+ end
146
+ end
147
+
148
+ def test_successful_recurring_action
149
+ @gateway.stubs(:ssl_post).returns(successful_recurring_response)
150
+
151
+ response = @gateway.recurring(@amount, @credit_card, :periodicity => :monthly)
152
+
153
+ assert_instance_of PayflowResponse, response
154
+ assert_success response
155
+ assert_equal 'RT0000000009', response.profile_id
156
+ assert response.test?
157
+ assert_equal "R7960E739F80", response.authorization
158
+ end
159
+
160
+ def test_recurring_profile_payment_history_inquiry
161
+ @gateway.stubs(:ssl_post).returns(successful_payment_history_recurring_response)
162
+
163
+ response = @gateway.recurring_inquiry('RT0000000009', :history => true)
164
+ assert_equal 1, response.payment_history.size
165
+ assert_equal '1', response.payment_history.first['payment_num']
166
+ assert_equal '7.25', response.payment_history.first['amt']
167
+ end
168
+
169
+ def test_recurring_profile_payment_history_inquiry_contains_the_proper_xml
170
+ request = @gateway.send( :build_recurring_request, :inquiry, nil, :profile_id => 'RT0000000009', :history => true)
171
+ assert_match %r(<PaymentHistory>Y</PaymentHistory), request
172
+ end
173
+
174
+ def test_format_issue_number
175
+ xml = Builder::XmlMarkup.new
176
+ credit_card = credit_card("5641820000000005",
177
+ :type => "switch",
178
+ :issue_number => 1
179
+ )
180
+
181
+ @gateway.send(:add_credit_card, xml, credit_card)
182
+ doc = REXML::Document.new(xml.target!)
183
+ node = REXML::XPath.first(doc, '/Card/ExtData')
184
+ assert_equal '01', node.attributes['Value']
185
+ end
186
+
187
+ def test_duplicate_response_flag
188
+ @gateway.expects(:ssl_post).returns(successful_duplicate_response)
189
+
190
+ response = @gateway.authorize(@amount, @credit_card, @options)
191
+ assert_success response
192
+ assert response.params['duplicate']
193
+ end
194
+
195
+ def test_ensure_gateway_uses_safe_retry
196
+ assert @gateway.retry_safe
197
+ end
198
+
199
+ private
200
+ def successful_recurring_response
201
+ <<-XML
202
+ <ResponseData>
203
+ <Result>0</Result>
204
+ <Message>Approved</Message>
205
+ <Partner>paypal</Partner>
206
+ <RPRef>R7960E739F80</RPRef>
207
+ <Vendor>ActiveMerchant</Vendor>
208
+ <ProfileId>RT0000000009</ProfileId>
209
+ </ResponseData>
210
+ XML
211
+ end
212
+
213
+ def successful_payment_history_recurring_response
214
+ <<-XML
215
+ <ResponseData>
216
+ <Result>0</Result>
217
+ <Partner>paypal</Partner>
218
+ <RPRef>R7960E739F80</RPRef>
219
+ <Vendor>ActiveMerchant</Vendor>
220
+ <ProfileId>RT0000000009</ProfileId>
221
+ <RPPaymentResult>
222
+ <PaymentNum>1</PaymentNum>
223
+ <PNRef>V18A0D3048AF</PNRef>
224
+ <TransTime>12-Jan-08 04:30 AM</TransTime>
225
+ <Result>0</Result>
226
+ <Tender>C</Tender>
227
+ <Amt Currency="7.25"></Amt>
228
+ <TransState>6</TransState>
229
+ </RPPaymentResult>
230
+ </ResponseData>
231
+ XML
232
+ end
233
+
234
+ def successful_authorization_response
235
+ <<-XML
236
+ <ResponseData>
237
+ <Result>0</Result>
238
+ <Message>Approved</Message>
239
+ <Partner>verisign</Partner>
240
+ <HostCode>000</HostCode>
241
+ <ResponseText>AP</ResponseText>
242
+ <PnRef>VUJN1A6E11D9</PnRef>
243
+ <IavsResult>N</IavsResult>
244
+ <ZipMatch>Match</ZipMatch>
245
+ <AuthCode>094016</AuthCode>
246
+ <Vendor>ActiveMerchant</Vendor>
247
+ <AvsResult>Y</AvsResult>
248
+ <StreetMatch>Match</StreetMatch>
249
+ <CvResult>Match</CvResult>
250
+ </ResponseData>
251
+ XML
252
+ end
253
+
254
+ def failed_authorization_response
255
+ <<-XML
256
+ <ResponseData>
257
+ <Result>12</Result>
258
+ <Message>Declined</Message>
259
+ <Partner>verisign</Partner>
260
+ <HostCode>000</HostCode>
261
+ <ResponseText>AP</ResponseText>
262
+ <PnRef>VUJN1A6E11D9</PnRef>
263
+ <IavsResult>N</IavsResult>
264
+ <ZipMatch>Match</ZipMatch>
265
+ <AuthCode>094016</AuthCode>
266
+ <Vendor>ActiveMerchant</Vendor>
267
+ <AvsResult>Y</AvsResult>
268
+ <StreetMatch>Match</StreetMatch>
269
+ <CvResult>Match</CvResult>
270
+ </ResponseData>
271
+ XML
272
+ end
273
+
274
+ def successful_duplicate_response
275
+ <<-XML
276
+ <?xml version="1.0"?>
277
+ <XMLPayResponse xmlns="http://www.verisign.com/XMLPay">
278
+ <ResponseData>
279
+ <Vendor>ActiveMerchant</Vendor>
280
+ <Partner>paypal</Partner>
281
+ <TransactionResults>
282
+ <TransactionResult Duplicate="true">
283
+ <Result>0</Result>
284
+ <ProcessorResult>
285
+ <AVSResult>A</AVSResult>
286
+ <CVResult>M</CVResult>
287
+ <HostCode>A</HostCode>
288
+ </ProcessorResult>
289
+ <IAVSResult>N</IAVSResult>
290
+ <AVSResult>
291
+ <StreetMatch>Match</StreetMatch>
292
+ <ZipMatch>No Match</ZipMatch>
293
+ </AVSResult>
294
+ <CVResult>Match</CVResult>
295
+ <Message>Approved</Message>
296
+ <PNRef>V18A0CBB04CF</PNRef>
297
+ <AuthCode>692PNI</AuthCode>
298
+ <ExtData Name="DATE_TO_SETTLE" Value="2007-11-28 10:53:50"/>
299
+ </TransactionResult>
300
+ </TransactionResults>
301
+ </ResponseData>
302
+ </XMLPayResponse>
303
+ XML
304
+ end
305
+ end