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,162 @@
1
+ require 'test_helper'
2
+
3
+ class SageBankcardGatewayTest < Test::Unit::TestCase
4
+ def setup
5
+ @gateway = SageBankcardGateway.new(
6
+ :login => 'login',
7
+ :password => 'password'
8
+ )
9
+
10
+ @credit_card = credit_card
11
+ @amount = 100
12
+
13
+ @options = {
14
+ :order_id => '1',
15
+ :billing_address => address,
16
+ :description => 'Store Purchase'
17
+ }
18
+ end
19
+
20
+ def test_successful_authorization
21
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
22
+
23
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
24
+ assert_instance_of Response, response
25
+ assert_success response
26
+
27
+ assert_equal "APPROVED", response.message
28
+ assert_equal "1234567890;bankcard", response.authorization
29
+
30
+ assert_equal "A", response.params["success"]
31
+ assert_equal "911911", response.params["code"]
32
+ assert_equal "APPROVED", response.params["message"]
33
+ assert_equal "00", response.params["front_end"]
34
+ assert_equal "M", response.params["cvv_result"]
35
+ assert_equal "X", response.params["avs_result"]
36
+ assert_equal "00", response.params["risk"]
37
+ assert_equal "1234567890", response.params["reference"]
38
+ assert_equal "1000", response.params["order_number"]
39
+ assert_equal "0", response.params["recurring"]
40
+ end
41
+
42
+ def test_successful_purchase
43
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
44
+
45
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
46
+ assert_instance_of Response, response
47
+ assert_success response
48
+
49
+ assert_equal "APPROVED 000001", response.message
50
+ assert_equal "B5O89VPdf0;bankcard", response.authorization
51
+
52
+ assert_equal "A", response.params["success"]
53
+ assert_equal "000001", response.params["code"]
54
+ assert_equal "APPROVED 000001", response.params["message"]
55
+ assert_equal "10", response.params["front_end"]
56
+ assert_equal "M", response.params["cvv_result"]
57
+ assert_equal "", response.params["avs_result"]
58
+ assert_equal "00", response.params["risk"]
59
+ assert_equal "B5O89VPdf0", response.params["reference"]
60
+ assert_equal "e81cab9e6144a160da82", response.params["order_number"]
61
+ assert_equal "0", response.params["recurring"]
62
+ end
63
+
64
+ def test_declined_purchase
65
+ @gateway.expects(:ssl_post).returns(declined_purchase_response)
66
+
67
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
68
+ assert_failure response
69
+ assert response.test?
70
+ assert_equal "DECLINED", response.message
71
+ assert_equal "A5O89kkix0;bankcard", response.authorization
72
+
73
+ assert_equal "E", response.params["success"]
74
+ assert_equal "000002", response.params["code"]
75
+ assert_equal "DECLINED", response.params["message"]
76
+ assert_equal "10", response.params["front_end"]
77
+ assert_equal "N", response.params["cvv_result"]
78
+ assert_equal "", response.params["avs_result"]
79
+ assert_equal "00", response.params["risk"]
80
+ assert_equal "A5O89kkix0", response.params["reference"]
81
+ assert_equal "3443d6426188f8256b8f", response.params["order_number"]
82
+ assert_equal "0", response.params["recurring"]
83
+ end
84
+
85
+ def test_successful_capture
86
+ @gateway.expects(:ssl_post).returns(successful_capture_response)
87
+
88
+ assert response = @gateway.capture(@amount, "A5O89kkix0")
89
+ assert_instance_of Response, response
90
+ assert_success response
91
+
92
+ assert_equal "APPROVED 000001", response.message
93
+ assert_equal "B5O8AdFhu0;bankcard", response.authorization
94
+
95
+ assert_equal "A", response.params["success"]
96
+ assert_equal "000001", response.params["code"]
97
+ assert_equal "APPROVED 000001", response.params["message"]
98
+ assert_equal "10", response.params["front_end"]
99
+ assert_equal "P", response.params["cvv_result"]
100
+ assert_equal "", response.params["avs_result"]
101
+ assert_equal "00", response.params["risk"]
102
+ assert_equal "B5O8AdFhu0", response.params["reference"]
103
+ assert_equal "ID5O8AdFhw", response.params["order_number"]
104
+ assert_equal "0", response.params["recurring"]
105
+ end
106
+
107
+ def test_invalid_login
108
+ @gateway.expects(:ssl_post).returns(invalid_login_response)
109
+
110
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
111
+ assert_failure response
112
+ assert response.test?
113
+ assert_equal "SECURITY VIOLATION", response.message
114
+ assert_equal "0000000000;bankcard", response.authorization
115
+
116
+ assert_equal "X", response.params["success"]
117
+ assert_equal "911911", response.params["code"]
118
+ assert_equal "SECURITY VIOLATION", response.params["message"]
119
+ assert_equal "00", response.params["front_end"]
120
+ assert_equal "P", response.params["cvv_result"]
121
+ assert_equal "", response.params["avs_result"]
122
+ assert_equal "00", response.params["risk"]
123
+ assert_equal "0000000000", response.params["reference"]
124
+ assert_equal "", response.params["order_number"]
125
+ assert_equal "0", response.params["recurring"]
126
+ end
127
+
128
+ def test_avs_result
129
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
130
+
131
+ response = @gateway.purchase(@amount, @credit_card, @options)
132
+ assert_equal 'X', response.avs_result['code']
133
+ end
134
+
135
+ def test_cvv_result
136
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
137
+
138
+ response = @gateway.purchase(@amount, @credit_card, @options)
139
+ assert_equal 'M', response.cvv_result['code']
140
+ end
141
+
142
+ private
143
+ def successful_authorization_response
144
+ "\002A911911APPROVED 00MX001234567890\0341000\0340\034\003"
145
+ end
146
+
147
+ def successful_purchase_response
148
+ "\002A000001APPROVED 000001 10M 00B5O89VPdf0\034e81cab9e6144a160da82\0340\034\003"
149
+ end
150
+
151
+ def successful_capture_response
152
+ "\002A000001APPROVED 000001 10P 00B5O8AdFhu0\034ID5O8AdFhw\0340\034\003"
153
+ end
154
+
155
+ def declined_purchase_response
156
+ "\002E000002DECLINED 10N 00A5O89kkix0\0343443d6426188f8256b8f\0340\034\003"
157
+ end
158
+
159
+ def invalid_login_response
160
+ "\002X911911SECURITY VIOLATION 00P 000000000000\034\0340\034\003"
161
+ end
162
+ end
@@ -0,0 +1,139 @@
1
+ require 'test_helper'
2
+
3
+ class SagePayTest < Test::Unit::TestCase
4
+ def setup
5
+ @gateway = SagePayGateway.new(
6
+ :login => 'X'
7
+ )
8
+
9
+ @credit_card = credit_card('4242424242424242', :type => 'visa')
10
+ @options = {
11
+ :billing_address => {
12
+ :name => 'Tekin Suleyman',
13
+ :address1 => 'Flat 10 Lapwing Court',
14
+ :address2 => 'West Didsbury',
15
+ :city => "Manchester",
16
+ :county => 'Greater Manchester',
17
+ :country => 'GB',
18
+ :zip => 'M20 2PS'
19
+ },
20
+ :order_id => '1',
21
+ :description => 'Store purchase',
22
+ :ip => '86.150.65.37',
23
+ :email => 'tekin@tekin.co.uk',
24
+ :phone => '0161 123 4567'
25
+ }
26
+ @amount = 100
27
+ end
28
+
29
+ def test_successful_purchase
30
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
31
+
32
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
33
+ assert_instance_of Response, response
34
+ assert_equal "1;B8AE1CF6-9DEF-C876-1BB4-9B382E6CE520;4193753;OHMETD7DFK;purchase", response.authorization
35
+ assert_success response
36
+ end
37
+
38
+ def test_unsuccessful_purchase
39
+ @gateway.expects(:ssl_post).returns(unsuccessful_purchase_response)
40
+
41
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
42
+ assert_instance_of Response, response
43
+ assert_failure response
44
+ end
45
+
46
+ def test_purchase_url
47
+ assert_equal 'https://test.sagepay.com/gateway/service/vspdirect-register.vsp', @gateway.send(:url_for, :purchase)
48
+ end
49
+
50
+ def test_capture_url
51
+ assert_equal 'https://test.sagepay.com/gateway/service/release.vsp', @gateway.send(:url_for, :capture)
52
+ end
53
+
54
+ def test_electron_cards
55
+ # Visa range
56
+ assert_no_match SagePayGateway::ELECTRON, '4245180000000000'
57
+
58
+ # First electron range
59
+ assert_match SagePayGateway::ELECTRON, '4245190000000000'
60
+
61
+ # Second range
62
+ assert_match SagePayGateway::ELECTRON, '4249620000000000'
63
+ assert_match SagePayGateway::ELECTRON, '4249630000000000'
64
+
65
+ # Third
66
+ assert_match SagePayGateway::ELECTRON, '4508750000000000'
67
+
68
+ # Fourth
69
+ assert_match SagePayGateway::ELECTRON, '4844060000000000'
70
+ assert_match SagePayGateway::ELECTRON, '4844080000000000'
71
+
72
+ # Fifth
73
+ assert_match SagePayGateway::ELECTRON, '4844110000000000'
74
+ assert_match SagePayGateway::ELECTRON, '4844550000000000'
75
+
76
+ # Sixth
77
+ assert_match SagePayGateway::ELECTRON, '4917300000000000'
78
+ assert_match SagePayGateway::ELECTRON, '4917590000000000'
79
+
80
+ # Seventh
81
+ assert_match SagePayGateway::ELECTRON, '4918800000000000'
82
+
83
+ # Visa
84
+ assert_no_match SagePayGateway::ELECTRON, '4918810000000000'
85
+
86
+ # 19 PAN length
87
+ assert_match SagePayGateway::ELECTRON, '4249620000000000000'
88
+
89
+ # 20 PAN length
90
+ assert_no_match SagePayGateway::ELECTRON, '42496200000000000'
91
+ end
92
+
93
+ def test_avs_result
94
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
95
+
96
+ response = @gateway.purchase(@amount, @credit_card, @options)
97
+ assert_equal 'Y', response.avs_result['postal_match']
98
+ assert_equal 'N', response.avs_result['street_match']
99
+ end
100
+
101
+ def test_cvv_result
102
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
103
+
104
+ response = @gateway.purchase(@amount, @credit_card, @options)
105
+ assert_equal 'N', response.cvv_result['code']
106
+ end
107
+
108
+ private
109
+
110
+ def successful_purchase_response
111
+ <<-RESP
112
+ VPSProtocol=2.23
113
+ Status=OK
114
+ StatusDetail=0000 : The Authorisation was Successful.
115
+ VPSTxId=B8AE1CF6-9DEF-C876-1BB4-9B382E6CE520
116
+ SecurityKey=OHMETD7DFK
117
+ TxAuthNo=4193753
118
+ AVSCV2=NO DATA MATCHES
119
+ AddressResult=NOTMATCHED
120
+ PostCodeResult=MATCHED
121
+ CV2Result=NOTMATCHED
122
+ 3DSecureStatus=NOTCHECKED
123
+ RESP
124
+ end
125
+
126
+ def unsuccessful_purchase_response
127
+ <<-RESP
128
+ VPSProtocol=2.23
129
+ Status=NOTAUTHED
130
+ StatusDetail=VSP Direct transaction from VSP Simulator.
131
+ VPSTxId=7BBA9078-8489-48CD-BF0D-10B0E6B0EF30
132
+ SecurityKey=DKDYLDYLXV
133
+ AVSCV2=ALL MATCH
134
+ AddressResult=MATCHED
135
+ PostCodeResult=MATCHED
136
+ CV2Result=MATCHED
137
+ RESP
138
+ end
139
+ end
@@ -0,0 +1,71 @@
1
+ require 'test_helper'
2
+
3
+ class SageVirtualCheckTest < Test::Unit::TestCase
4
+ def setup
5
+ @gateway = SageVirtualCheckGateway.new(
6
+ :login => 'login',
7
+ :password => 'password'
8
+ )
9
+
10
+ @check = check
11
+
12
+ @options = {
13
+ :order_id => generate_unique_id,
14
+ :billing_address => address,
15
+ :shipping_address => address,
16
+ :email => 'longbob@example.com',
17
+ :drivers_license_state => 'CA',
18
+ :drivers_license_number => '12345689',
19
+ :date_of_birth => Date.new(1978, 8, 11),
20
+ :ssn => '078051120'
21
+ }
22
+ end
23
+
24
+ def test_successful_purchase
25
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
26
+
27
+ assert response = @gateway.purchase(@amount, @check, @options)
28
+ assert_instance_of Response, response
29
+ assert_success response
30
+
31
+ assert_equal "ACCEPTED", response.message
32
+ assert_equal "C5O8NUdNt0;virtual_check", response.authorization
33
+
34
+ assert_equal "A", response.params["success"]
35
+ assert_equal "", response.params["code"]
36
+ assert_equal "ACCEPTED", response.params["message"]
37
+ assert_equal "00", response.params["risk"]
38
+ assert_equal "C5O8NUdNt0", response.params["reference"]
39
+ assert_equal "89be635e663b05eca587", response.params["order_number"]
40
+ assert_equal "0", response.params["authentication_indicator"]
41
+ assert_equal "NONE", response.params["authentication_disclosure"]
42
+ end
43
+
44
+ def test_declined_purchase
45
+ @gateway.expects(:ssl_post).returns(declined_purchase_response)
46
+
47
+ assert response = @gateway.purchase(@amount, @check, @options)
48
+ assert_failure response
49
+ assert response.test?
50
+ assert_equal "INVALID C_RTE", response.message
51
+ assert_equal "C5O8NR6Nr0;virtual_check", response.authorization
52
+
53
+ assert_equal "X", response.params["success"]
54
+ assert_equal "900016", response.params["code"]
55
+ assert_equal "INVALID C_RTE", response.params["message"]
56
+ assert_equal "00", response.params["risk"]
57
+ assert_equal "C5O8NR6Nr0", response.params["reference"]
58
+ assert_equal "d98cf50f7a2430fe04ad", response.params["order_number"]
59
+ assert_equal "0", response.params["authentication_indicator"]
60
+ assert_equal nil, response.params["authentication_disclosure"]
61
+ end
62
+
63
+ private
64
+ def successful_purchase_response
65
+ "\002A ACCEPTED 00C5O8NUdNt0\03489be635e663b05eca587\0340\034NONE\034\003"
66
+ end
67
+
68
+ def declined_purchase_response
69
+ "\002X900016INVALID C_RTE 00C5O8NR6Nr0\034d98cf50f7a2430fe04ad\0340\034\034\003"
70
+ end
71
+ end
@@ -0,0 +1,207 @@
1
+ require 'test_helper'
2
+
3
+ class SecurePayAuTest < Test::Unit::TestCase
4
+ def setup
5
+ @gateway = SecurePayAuGateway.new(
6
+ :login => 'login',
7
+ :password => 'password'
8
+ )
9
+
10
+ @credit_card = credit_card
11
+ @amount = 100
12
+
13
+ @options = {
14
+ :order_id => '1',
15
+ :billing_address => address,
16
+ :description => 'Store Purchase'
17
+ }
18
+ end
19
+
20
+ def test_successful_purchase_with_live_data
21
+ @gateway.expects(:ssl_post).returns(successful_live_purchase_response)
22
+
23
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
24
+ assert_instance_of Response, response
25
+ assert_success response
26
+
27
+ assert_equal '000000', response.authorization
28
+ assert response.test?
29
+ end
30
+
31
+ def test_successful_purchase
32
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
33
+
34
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
35
+ assert_instance_of Response, response
36
+ assert_success response
37
+
38
+ assert_equal '024259', response.authorization
39
+ assert response.test?
40
+ end
41
+
42
+ def test_unsuccessful_purchase
43
+ @gateway.expects(:ssl_post).returns(failed_purchase_response)
44
+
45
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
46
+ assert_instance_of Response, response
47
+ assert_failure response
48
+ assert response.test?
49
+ assert_equal "CARD EXPIRED", response.message
50
+ end
51
+
52
+ def test_failed_login
53
+ @gateway.expects(:ssl_post).returns(failed_login_response)
54
+
55
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
56
+ assert_instance_of Response, response
57
+ assert_failure response
58
+ assert_equal "Invalid merchant ID", response.message
59
+ end
60
+
61
+ private
62
+
63
+ def failed_login_response
64
+ '<SecurePayMessage><Status><statusCode>504</statusCode><statusDescription>Invalid merchant ID</statusDescription></Status></SecurePayMessage>'
65
+ end
66
+
67
+ def successful_purchase_response
68
+ <<-XML
69
+ <?xml version="1.0" encoding="UTF-8"?>
70
+ <SecurePayMessage>
71
+ <MessageInfo>
72
+ <messageID>8af793f9af34bea0cf40f5fb5c630c</messageID>
73
+ <messageTimestamp>20080802041625665000+660</messageTimestamp>
74
+ <apiVersion>xml-4.2</apiVersion>
75
+ </MessageInfo>
76
+ <RequestType>Payment</RequestType>
77
+ <MerchantInfo>
78
+ <merchantID>XYZ0001</merchantID>
79
+ </MerchantInfo>
80
+ <Status>
81
+ <statusCode>000</statusCode>
82
+ <statusDescription>Normal</statusDescription>
83
+ </Status>
84
+ <Payment>
85
+ <TxnList count="1">
86
+ <Txn ID="1">
87
+ <txnType>0</txnType>
88
+ <txnSource>0</txnSource>
89
+ <amount>1000</amount>
90
+ <currency>AUD</currency>
91
+ <purchaseOrderNo>test</purchaseOrderNo>
92
+ <approved>Yes</approved>
93
+ <responseCode>00</responseCode>
94
+ <responseText>Approved</responseText>
95
+ <thinlinkResponseCode>100</thinlinkResponseCode>
96
+ <thinlinkResponseText>000</thinlinkResponseText>
97
+ <thinlinkEventStatusCode>000</thinlinkEventStatusCode>
98
+ <thinlinkEventStatusText>Normal</thinlinkEventStatusText>
99
+ <settlementDate>20080208</settlementDate>
100
+ <txnID>024259</txnID>
101
+ <CreditCardInfo>
102
+ <pan>424242...242</pan>
103
+ <expiryDate>07/11</expiryDate>
104
+ <cardType>6</cardType>
105
+ <cardDescription>Visa</cardDescription>
106
+ </CreditCardInfo>
107
+ </Txn>
108
+ </TxnList>
109
+ </Payment>
110
+ </SecurePayMessage>
111
+ XML
112
+ end
113
+
114
+ def failed_purchase_response
115
+ <<-XML
116
+ <?xml version="1.0" encoding="UTF-8"?>
117
+ <SecurePayMessage>
118
+ <MessageInfo>
119
+ <messageID>8af793f9af34bea0cf40f5fb5c630c</messageID>
120
+ <messageTimestamp>20080802040346380000+660</messageTimestamp>
121
+ <apiVersion>xml-4.2</apiVersion>
122
+ </MessageInfo>
123
+ <RequestType>Payment</RequestType>
124
+ <MerchantInfo>
125
+ <merchantID>XYZ0001</merchantID>
126
+ </MerchantInfo>
127
+ <Status>
128
+ <statusCode>000</statusCode>
129
+ <statusDescription>Normal</statusDescription>
130
+ </Status>
131
+ <Payment>
132
+ <TxnList count="1">
133
+ <Txn ID="1">
134
+ <txnType>0</txnType>
135
+ <txnSource>0</txnSource>
136
+ <amount>1000</amount>
137
+ <currency>AUD</currency>
138
+ <purchaseOrderNo>test</purchaseOrderNo>
139
+ <approved>No</approved>
140
+ <responseCode>907</responseCode>
141
+ <responseText>CARD EXPIRED</responseText>
142
+ <thinlinkResponseCode>300</thinlinkResponseCode>
143
+ <thinlinkResponseText>000</thinlinkResponseText>
144
+ <thinlinkEventStatusCode>981</thinlinkEventStatusCode>
145
+ <thinlinkEventStatusText>Error - Expired Card</thinlinkEventStatusText>
146
+ <settlementDate> </settlementDate>
147
+ <txnID>000000</txnID>
148
+ <CreditCardInfo>
149
+ <pan>424242...242</pan>
150
+ <expiryDate>07/06</expiryDate>
151
+ <cardType>6</cardType>
152
+ <cardDescription>Visa</cardDescription>
153
+ </CreditCardInfo>
154
+ </Txn>
155
+ </TxnList>
156
+ </Payment>
157
+ </SecurePayMessage>
158
+ XML
159
+ end
160
+
161
+ def successful_live_purchase_response
162
+ <<-XML
163
+ <?xml version="1.0" encoding="UTF-8"?>
164
+ <SecurePayMessage>
165
+ <MessageInfo>
166
+ <messageID>8af793f9af34bea0cf40f5fb5c630c</messageID>
167
+ <messageTimestamp>20080802041625665000+660</messageTimestamp>
168
+ <apiVersion>xml-4.2</apiVersion>
169
+ </MessageInfo>
170
+ <RequestType>Payment</RequestType>
171
+ <MerchantInfo>
172
+ <merchantID>XYZ0001</merchantID>
173
+ </MerchantInfo>
174
+ <Status>
175
+ <statusCode>000</statusCode>
176
+ <statusDescription>Normal</statusDescription>
177
+ </Status>
178
+ <Payment>
179
+ <TxnList count="1">
180
+ <Txn ID="1">
181
+ <txnType>0</txnType>
182
+ <txnSource>23</txnSource>
183
+ <amount>211700</amount>
184
+ <currency>AUD</currency>
185
+ <purchaseOrderNo>#1047.5</purchaseOrderNo>
186
+ <approved>Yes</approved>
187
+ <responseCode>77</responseCode>
188
+ <responseText>Approved</responseText>
189
+ <thinlinkResponseCode>100</thinlinkResponseCode>
190
+ <thinlinkResponseText>000</thinlinkResponseText>
191
+ <thinlinkEventStatusCode>000</thinlinkEventStatusCode>
192
+ <thinlinkEventStatusText>Normal</thinlinkEventStatusText>
193
+ <settlementDate>20080525</settlementDate>
194
+ <txnID>000000</txnID>
195
+ <CreditCardInfo>
196
+ <pan>424242...242</pan>
197
+ <expiryDate>07/11</expiryDate>
198
+ <cardType>6</cardType>
199
+ <cardDescription>Visa</cardDescription>
200
+ </CreditCardInfo>
201
+ </Txn>
202
+ </TxnList>
203
+ </Payment>
204
+ </SecurePayMessage>
205
+ XML
206
+ end
207
+ end