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,90 @@
1
+ require 'test_helper'
2
+
3
+ class CardStreamTest < Test::Unit::TestCase
4
+ def setup
5
+ @gateway = CardStreamGateway.new(
6
+ :login => 'LOGIN',
7
+ :password => 'PASSWORD'
8
+ )
9
+
10
+ @amount = 100
11
+ @credit_card = credit_card('4242424242424242')
12
+ @options = { :order_id => '1', :billing_address => address }
13
+ end
14
+
15
+ def test_successful_purchase
16
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
17
+
18
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
19
+ assert_instance_of Response, response
20
+ assert_success response
21
+ assert_equal '08010706065208191057', response.authorization
22
+ end
23
+
24
+ def test_failed_purchase
25
+ @gateway.expects(:ssl_post).returns(failed_purchase_response)
26
+
27
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
28
+ assert_instance_of Response, response
29
+ assert_failure response
30
+ end
31
+
32
+ def test_successful_avs_result
33
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
34
+
35
+ response = @gateway.purchase(@amount, @credit_card, @options)
36
+ assert_equal 'Y', response.avs_result['street_match']
37
+ assert_equal 'Y', response.avs_result['postal_match']
38
+ end
39
+
40
+ def test_failed_avs_result
41
+ @gateway.expects(:ssl_post).returns(successful_purchase_failed_avs_cvv_response)
42
+
43
+ response = @gateway.purchase(@amount, @credit_card, @options)
44
+ assert_equal 'N', response.cvv_result['code']
45
+ assert_equal 'N', response.avs_result['street_match']
46
+ assert_equal 'N', response.avs_result['postal_match']
47
+ end
48
+
49
+ def test_cvv_result
50
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
51
+
52
+ response = @gateway.purchase(@amount, @credit_card, @options)
53
+ assert_equal 'M', response.cvv_result['code']
54
+ end
55
+
56
+ def test_supported_countries
57
+ assert_equal ['GB'], CardStreamGateway.supported_countries
58
+ end
59
+
60
+ def test_supported_card_types
61
+ assert_equal [:visa, :master, :american_express, :diners_club, :discover, :jcb, :maestro, :solo, :switch], CardStreamGateway.supported_cardtypes
62
+ end
63
+
64
+ def test_default_currency
65
+ params = {}
66
+
67
+ @gateway.send(:add_amount, params, 1000, {})
68
+ assert_equal '826', params[:CurrencyCode]
69
+ end
70
+
71
+ def test_override_currency
72
+ params = {}
73
+
74
+ @gateway.send(:add_amount, params, 1000, :currency => 'USD')
75
+ assert_equal '840', params[:CurrencyCode]
76
+ end
77
+
78
+ private
79
+ def successful_purchase_response
80
+ 'VPResponseCode=00&VPCrossReference=08010706065208191057&VPMessage=AUTHCODE:08191&VPTransactionUnique=c3871e2d005b924bf81565537caba82d&VPOrderDesc=Store purchase&VPBillingCountry=826&VPCardName=Longbob Longsen&VPBillingPostCode=LE10 2RT&VPAmountRecieved=100&VPAVSCV2ResponseCode=222100&VPCV2ResultMessage=CV2 Matched&VPAVSResultMessage=Postcode Matched&VPAVSAddressMessage=Address Numeric Matched&VPCardType=MC&VPBillingAddress=25 The Larches, Narborough, Leicester&VPReturnPoint=0090'
81
+ end
82
+
83
+ def successful_purchase_failed_avs_cvv_response
84
+ 'VPResponseCode=00&VPCrossReference=08010706065208191057&VPMessage=AUTHCODE:08191&VPTransactionUnique=c3871e2d005b924bf81565537caba82d&VPOrderDesc=Store purchase&VPBillingCountry=826&VPCardName=Longbob Longsen&VPBillingPostCode=LE10 2RT&VPAmountRecieved=100&VPAVSCV2ResponseCode=444100&VPCV2ResultMessage=CV2 Matched&VPAVSResultMessage=Postcode Matched&VPAVSAddressMessage=Address Numeric Matched&VPCardType=MC&VPBillingAddress=25 The Larches, Narborough, Leicester&VPReturnPoint=0090'
85
+ end
86
+
87
+ def failed_purchase_response
88
+ 'VPResponseCode=05&VPCrossReference=NoCrossReference&VPMessage=CARD DECLINED&VPTransactionUnique=d966e18a2983faff3715a541983792e0&VPOrderDesc=Store purchase&VPBillingCountry=826&VPCardName=Longbob Longsen&VPBillingPostCode=LE10 2RT&VPAmountRecieved=NA&VPAVSCV2ResponseCode=222100&VPCV2ResultMessage=CV2 Matched&VPAVSResultMessage=Postcode Matched&VPAVSAddressMessage=Address Numeric Matched&VPCardType=MC&VPBillingAddress=25 The Larches, Narborough, Leicester&VPReturnPoint=0090'
89
+ end
90
+ end
@@ -0,0 +1,188 @@
1
+ require 'test_helper'
2
+
3
+ class CyberSourceTest < Test::Unit::TestCase
4
+ def setup
5
+ Base.gateway_mode = :test
6
+
7
+ @gateway = CyberSourceGateway.new(
8
+ :login => 'l',
9
+ :password => 'p'
10
+ )
11
+
12
+ @amount = 100
13
+ @credit_card = credit_card('4111111111111111', :type => 'visa')
14
+ @declined_card = credit_card('801111111111111', :type => 'visa')
15
+
16
+ @options = { :billing_address => {
17
+ :address1 => '1234 My Street',
18
+ :address2 => 'Apt 1',
19
+ :company => 'Widgets Inc',
20
+ :city => 'Ottawa',
21
+ :state => 'ON',
22
+ :zip => 'K1C2N6',
23
+ :country => 'Canada',
24
+ :phone => '(555)555-5555'
25
+ },
26
+
27
+ :email => 'someguy1232@fakeemail.net',
28
+ :order_id => '1000',
29
+ :line_items => [
30
+ {
31
+ :declared_value => @amount,
32
+ :quantity => 2,
33
+ :code => 'default',
34
+ :description => 'Giant Walrus',
35
+ :sku => 'WA323232323232323'
36
+ },
37
+ {
38
+ :declared_value => @amount,
39
+ :quantity => 2,
40
+ :description => 'Marble Snowcone',
41
+ :sku => 'FAKE1232132113123'
42
+ }
43
+ ],
44
+ :currency => 'USD'
45
+ }
46
+ end
47
+
48
+ def test_successful_purchase
49
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
50
+
51
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
52
+ assert_equal 'Successful transaction', response.message
53
+ assert_success response
54
+ assert_equal "#{@options[:order_id]};#{response.params['requestID']};#{response.params['requestToken']}", response.authorization
55
+ assert response.test?
56
+ end
57
+
58
+ def test_unsuccessful_authorization
59
+ @gateway.expects(:ssl_post).returns(unsuccessful_authorization_response)
60
+
61
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
62
+ assert_instance_of Response, response
63
+ assert_failure response
64
+ end
65
+
66
+ def test_successful_auth_request
67
+ @gateway.stubs(:ssl_post).returns(successful_authorization_response)
68
+ assert response = @gateway.authorize(@amount, @credit_card, @options)
69
+ assert_equal Response, response.class
70
+ assert response.success?
71
+ assert response.test?
72
+ end
73
+
74
+ def test_successful_tax_request
75
+ @gateway.stubs(:ssl_post).returns(successful_tax_response)
76
+ assert response = @gateway.calculate_tax(@credit_card, @options)
77
+ assert_equal Response, response.class
78
+ assert response.success?
79
+ assert response.test?
80
+ end
81
+
82
+ def test_successful_capture_request
83
+ @gateway.stubs(:ssl_post).returns(successful_authorization_response, successful_capture_response)
84
+ assert response = @gateway.authorize(@amount, @credit_card, @options)
85
+ assert response.success?
86
+ assert response.test?
87
+ assert response_capture = @gateway.capture(@amount, response.authorization)
88
+ assert response_capture.success?
89
+ assert response_capture.test?
90
+ end
91
+
92
+ def test_successful_purchase_request
93
+ @gateway.stubs(:ssl_post).returns(successful_capture_response)
94
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
95
+ assert response.success?
96
+ assert response.test?
97
+ end
98
+
99
+ def test_requires_error_on_purchase_without_order_id
100
+ assert_raise(ArgumentError){ @gateway.purchase(@amount, @credit_card, @options.delete_if{|key, val| key == :order_id}) }
101
+ end
102
+
103
+ def test_requires_error_on_authorization_without_order_id
104
+ assert_raise(ArgumentError){ @gateway.purchase(@amount, @credit_card, @options.delete_if{|key, val| key == :order_id}) }
105
+ end
106
+
107
+ def test_requires_error_on_tax_calculation_without_line_items
108
+ assert_raise(ArgumentError){ @gateway.calculate_tax(@credit_card, @options.delete_if{|key, val| key == :line_items})}
109
+ end
110
+
111
+ def test_default_currency
112
+ assert_equal 'USD', CyberSourceGateway.default_currency
113
+ end
114
+
115
+ def test_avs_result
116
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
117
+
118
+ response = @gateway.purchase(@amount, @credit_card, @options)
119
+ assert_equal 'Y', response.avs_result['code']
120
+ end
121
+
122
+ def test_cvv_result
123
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
124
+
125
+ response = @gateway.purchase(@amount, @credit_card, @options)
126
+ assert_equal 'M', response.cvv_result['code']
127
+ end
128
+
129
+ def test_successful_credit_request
130
+ @gateway.stubs(:ssl_post).returns(successful_capture_response, successful_credit_response)
131
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
132
+ assert response.success?
133
+ assert response.test?
134
+ assert response_capture = @gateway.credit(@amount, response.authorization)
135
+ assert response_capture.success?
136
+ assert response_capture.test?
137
+ end
138
+
139
+ private
140
+
141
+ def successful_purchase_response
142
+ <<-XML
143
+ <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
144
+ <soap:Header>
145
+ <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-2636690"><wsu:Created>2008-01-15T21:42:03.343Z</wsu:Created></wsu:Timestamp></wsse:Security></soap:Header><soap:Body><c:replyMessage xmlns:c="urn:schemas-cybersource-com:transaction-data-1.26"><c:merchantReferenceCode>b0a6cf9aa07f1a8495f89c364bbd6a9a</c:merchantReferenceCode><c:requestID>2004333231260008401927</c:requestID><c:decision>ACCEPT</c:decision><c:reasonCode>100</c:reasonCode><c:requestToken>Afvvj7Ke2Fmsbq0wHFE2sM6R4GAptYZ0jwPSA+R9PhkyhFTb0KRjoE4+ynthZrG6tMBwjAtT</c:requestToken><c:purchaseTotals><c:currency>USD</c:currency></c:purchaseTotals><c:ccAuthReply><c:reasonCode>100</c:reasonCode><c:amount>1.00</c:amount><c:authorizationCode>123456</c:authorizationCode><c:avsCode>Y</c:avsCode><c:avsCodeRaw>Y</c:avsCodeRaw><c:cvCode>M</c:cvCode><c:cvCodeRaw>M</c:cvCodeRaw><c:authorizedDateTime>2008-01-15T21:42:03Z</c:authorizedDateTime><c:processorResponse>00</c:processorResponse><c:authFactorCode>U</c:authFactorCode></c:ccAuthReply></c:replyMessage></soap:Body></soap:Envelope>
146
+ XML
147
+ end
148
+
149
+ def successful_authorization_response
150
+ <<-XML
151
+ <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
152
+ <soap:Header>
153
+ <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-32551101"><wsu:Created>2007-07-12T18:31:53.838Z</wsu:Created></wsu:Timestamp></wsse:Security></soap:Header><soap:Body><c:replyMessage xmlns:c="urn:schemas-cybersource-com:transaction-data-1.26"><c:merchantReferenceCode>TEST11111111111</c:merchantReferenceCode><c:requestID>1842651133440156177166</c:requestID><c:decision>ACCEPT</c:decision><c:reasonCode>100</c:reasonCode><c:requestToken>AP4JY+Or4xRonEAOERAyMzQzOTEzMEM0MFZaNUZCBgDH3fgJ8AEGAMfd+AnwAwzRpAAA7RT/</c:requestToken><c:purchaseTotals><c:currency>USD</c:currency></c:purchaseTotals><c:ccAuthReply><c:reasonCode>100</c:reasonCode><c:amount>1.00</c:amount><c:authorizationCode>004542</c:authorizationCode><c:avsCode>A</c:avsCode><c:avsCodeRaw>I7</c:avsCodeRaw><c:authorizedDateTime>2007-07-12T18:31:53Z</c:authorizedDateTime><c:processorResponse>100</c:processorResponse><c:reconciliationID>23439130C40VZ2FB</c:reconciliationID></c:ccAuthReply></c:replyMessage></soap:Body></soap:Envelope>
154
+ XML
155
+ end
156
+
157
+ def unsuccessful_authorization_response
158
+ <<-XML
159
+ <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
160
+ <soap:Header>
161
+ <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-28121162"><wsu:Created>2008-01-15T21:50:41.580Z</wsu:Created></wsu:Timestamp></wsse:Security></soap:Header><soap:Body><c:replyMessage xmlns:c="urn:schemas-cybersource-com:transaction-data-1.26"><c:merchantReferenceCode>a1efca956703a2a5037178a8a28f7357</c:merchantReferenceCode><c:requestID>2004338415330008402434</c:requestID><c:decision>REJECT</c:decision><c:reasonCode>231</c:reasonCode><c:requestToken>Afvvj7KfIgU12gooCFE2/DanQIApt+G1OgTSA+R9PTnyhFTb0KRjgFY+ynyIFNdoKKAghwgx</c:requestToken><c:ccAuthReply><c:reasonCode>231</c:reasonCode></c:ccAuthReply></c:replyMessage></soap:Body></soap:Envelope>
162
+ XML
163
+ end
164
+
165
+ def successful_tax_response
166
+ <<-XML
167
+ <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
168
+ <soap:Header>
169
+ <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-21248497"><wsu:Created>2007-07-11T18:27:56.314Z</wsu:Created></wsu:Timestamp></wsse:Security></soap:Header><soap:Body><c:replyMessage xmlns:c="urn:schemas-cybersource-com:transaction-data-1.26"><c:merchantReferenceCode>TEST11111111111</c:merchantReferenceCode><c:requestID>1841784762620176127166</c:requestID><c:decision>ACCEPT</c:decision><c:reasonCode>100</c:reasonCode><c:requestToken>AMYJY9fl62i+vx2OEQYAx9zv/9UBZAAA5h5D</c:requestToken><c:taxReply><c:reasonCode>100</c:reasonCode><c:grandTotalAmount>1.00</c:grandTotalAmount><c:totalCityTaxAmount>0</c:totalCityTaxAmount><c:city>Madison</c:city><c:totalCountyTaxAmount>0</c:totalCountyTaxAmount><c:totalDistrictTaxAmount>0</c:totalDistrictTaxAmount><c:totalStateTaxAmount>0</c:totalStateTaxAmount><c:state>WI</c:state><c:totalTaxAmount>0</c:totalTaxAmount><c:postalCode>53717</c:postalCode><c:item id="0"><c:totalTaxAmount>0</c:totalTaxAmount></c:item></c:taxReply></c:replyMessage></soap:Body></soap:Envelope>
170
+ XML
171
+ end
172
+
173
+
174
+ def successful_capture_response
175
+ <<-XML
176
+ <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-6000655"><wsu:Created>2007-07-17T17:15:32.642Z</wsu:Created></wsu:Timestamp></wsse:Security></soap:Header><soap:Body><c:replyMessage xmlns:c="urn:schemas-cybersource-com:transaction-data-1.26"><c:merchantReferenceCode>test1111111111111111</c:merchantReferenceCode><c:requestID>1846925324700976124593</c:requestID><c:decision>ACCEPT</c:decision><c:reasonCode>100</c:reasonCode><c:requestToken>AP4JZB883WKS/34BEZAzMTE1OTI5MVQzWE0wQjEzBTUt3wbOAQUy3D7oDgMMmvQAnQgl</c:requestToken><c:purchaseTotals><c:currency>GBP</c:currency></c:purchaseTotals><c:ccCaptureReply><c:reasonCode>100</c:reasonCode><c:requestDateTime>2007-07-17T17:15:32Z</c:requestDateTime><c:amount>1.00</c:amount><c:reconciliationID>31159291T3XM2B13</c:reconciliationID></c:ccCaptureReply></c:replyMessage></soap:Body></soap:Envelope>
177
+ XML
178
+ end
179
+
180
+ def successful_credit_response
181
+ <<-XML
182
+ <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
183
+ <soap:Header>
184
+ <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-5589339"><wsu:Created>2008-01-21T16:00:38.927Z</wsu:Created></wsu:Timestamp></wsse:Security></soap:Header><soap:Body><c:replyMessage xmlns:c="urn:schemas-cybersource-com:transaction-data-1.32"><c:merchantReferenceCode>TEST11111111111</c:merchantReferenceCode><c:requestID>2009312387810008401927</c:requestID><c:decision>ACCEPT</c:decision><c:reasonCode>100</c:reasonCode><c:requestToken>Af/vj7OzPmut/eogHFCrBiwYsWTJy1r127CpCn0KdOgyTZnzKwVYCmzPmVgr9ID5H1WGTSTKuj0i30IE4+zsz2d/QNzwBwAACCPA</c:requestToken><c:purchaseTotals><c:currency>USD</c:currency></c:purchaseTotals><c:ccCreditReply><c:reasonCode>100</c:reasonCode><c:requestDateTime>2008-01-21T16:00:38Z</c:requestDateTime><c:amount>1.00</c:amount><c:reconciliationID>010112295WW70TBOPSSP2</c:reconciliationID></c:ccCreditReply></c:replyMessage></soap:Body></soap:Envelope>
185
+ XML
186
+ end
187
+
188
+ end
@@ -0,0 +1,133 @@
1
+ require 'test_helper'
2
+
3
+ class DataCashTest < Test::Unit::TestCase
4
+ # 100 Cents
5
+ AMOUNT = 100
6
+
7
+ def setup
8
+ @gateway = DataCashGateway.new(
9
+ :login => 'LOGIN',
10
+ :password => 'PASSWORD'
11
+ )
12
+
13
+ @credit_card = credit_card('4242424242424242')
14
+
15
+ @address = {
16
+ :name => 'Mark McBride',
17
+ :address1 => 'Flat 12/3',
18
+ :address2 => '45 Main Road',
19
+ :city => 'London',
20
+ :state => 'None',
21
+ :country => 'GBR',
22
+ :zip => 'A987AA',
23
+ :phone => '(555)555-5555'
24
+ }
25
+
26
+ @options = {
27
+ :order_id => generate_unique_id,
28
+ :billing_address => @address
29
+ }
30
+ end
31
+
32
+ def test_successful_purchase
33
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
34
+
35
+ response = @gateway.purchase(@amount, @credit_card, @options)
36
+ assert_instance_of Response, response
37
+ assert_success response
38
+ assert response.test?
39
+ assert_equal 'The transaction was successful', response.message
40
+ assert_equal '4400200050664928;123456789;', response.authorization
41
+ end
42
+
43
+ def test_unsuccessful_purchase
44
+ @gateway.expects(:ssl_post).returns(failed_purchase_response)
45
+
46
+ response = @gateway.purchase(@amount, @credit_card, @options)
47
+ assert_instance_of Response, response
48
+ assert_failure response
49
+ assert response.test?
50
+ assert_equal 'Invalid reference number', response.message
51
+ end
52
+
53
+ def test_error_response
54
+ @gateway.expects(:ssl_post).returns(failed_purchase_response)
55
+
56
+ response = @gateway.purchase(@amount, @credit_card, @options)
57
+ assert_instance_of Response, response
58
+ assert_failure response
59
+ assert response.test?
60
+ assert_equal 'Invalid reference number', response.message
61
+ end
62
+
63
+ def test_supported_countries
64
+ assert_equal ['GB'], DataCashGateway.supported_countries
65
+ end
66
+
67
+ def test_supported_card_types
68
+ assert_equal [ :visa, :master, :american_express, :discover, :diners_club, :jcb, :maestro, :switch, :solo, :laser ], DataCashGateway.supported_cardtypes
69
+ end
70
+
71
+ def test_purchase_with_missing_order_id_option
72
+ assert_raise(ArgumentError){ @gateway.purchase(100, @credit_card, {}) }
73
+ end
74
+
75
+ def test_authorize_with_missing_order_id_option
76
+ assert_raise(ArgumentError){ @gateway.authorize(100, @credit_card, {}) }
77
+ end
78
+
79
+ def test_purchase_does_not_raise_exception_with_missing_billing_address
80
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
81
+ assert @gateway.authorize(100, @credit_card, {:order_id => generate_unique_id }).is_a?(ActiveMerchant::Billing::Response)
82
+ end
83
+
84
+ def test_continuous_authority_purchase_with_missing_continuous_authority_reference
85
+ assert_raise(ArgumentError) do
86
+ @gateway.authorize(100, "a;b;", @options)
87
+ end
88
+ end
89
+
90
+ def test_successful_continuous_authority_purchase
91
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
92
+
93
+ response = @gateway.purchase(@amount, '4400200050664928;123456789;10000000', @options)
94
+ assert_instance_of Response, response
95
+ assert_success response
96
+ assert response.test?
97
+ assert_equal 'The transaction was successful', response.message
98
+ end
99
+
100
+ private
101
+ def failed_purchase_response
102
+ <<-XML
103
+ <Response>
104
+ <status>22</status>
105
+ <time>1196414665</time>
106
+ <mode>TEST</mode>
107
+ <country>United Kingdom</country>
108
+ <merchantreference>2d24cc91284c1ed5c65d8821f1e752c7</merchantreference>
109
+ <issuer>Clydesdale Bank PLC</issuer>
110
+ <reason>Invalid reference number</reason>
111
+ <card_scheme>Solo</card_scheme>
112
+ <datacash_reference>4400200050664928</datacash_reference>
113
+ </Response>
114
+ XML
115
+ end
116
+
117
+ def successful_purchase_response
118
+ <<-XML
119
+ <Response>
120
+ <status>1</status>
121
+ <time>1196414665</time>
122
+ <mode>TEST</mode>
123
+ <country>United Kingdom</country>
124
+ <merchantreference>2d24cc91284c1ed5c65d8821f1e752c7</merchantreference>
125
+ <issuer>Clydesdale Bank PLC</issuer>
126
+ <reason>The transaction was successful</reason>
127
+ <card_scheme>Visa</card_scheme>
128
+ <datacash_reference>4400200050664928</datacash_reference>
129
+ <authcode>123456789</authcode>
130
+ </Response>
131
+ XML
132
+ end
133
+ end
@@ -0,0 +1,123 @@
1
+ require 'test_helper'
2
+
3
+ class EfsnetTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @gateway = EfsnetGateway.new(
7
+ :login => 'LOGIN',
8
+ :password => 'PASSWORD'
9
+ )
10
+
11
+ @credit_card = credit_card('4242424242424242')
12
+ @amount = 100
13
+ @options = { :order_id => 1, :billing_address => address }
14
+ end
15
+
16
+ def test_successful_purchase
17
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
18
+
19
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
20
+ assert_instance_of Response, response
21
+ assert_success response
22
+ assert response.test?
23
+ assert_equal '100018347764;1.00', response.authorization
24
+ assert_equal 'Approved', response.message
25
+
26
+ end
27
+
28
+ def test_unsuccessful_purchase
29
+ @gateway.expects(:ssl_post).returns(unsuccessful_purchase_response)
30
+
31
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
32
+ assert_instance_of Response, response
33
+ assert_failure response
34
+ assert response.test?
35
+ assert_equal 'Declined', response.message
36
+ end
37
+
38
+ def test_authorize_is_valid_xml
39
+ params = {
40
+ :order_id => "order1",
41
+ :transaction_amount => "1.01",
42
+ :account_number => "4242424242424242",
43
+ :expiration_month => "12",
44
+ :expiration_year => "2029",
45
+ }
46
+
47
+ assert data = @gateway.send(:post_data, :credit_card_authorize, params)
48
+ assert REXML::Document.new(data)
49
+ end
50
+
51
+ def test_settle_is_valid_xml
52
+ params = {
53
+ :order_id => "order1",
54
+ :transaction_amount => "1.01",
55
+ :original_transaction_amount => "1.01",
56
+ :original_transaction_id => "1",
57
+ }
58
+
59
+ assert data = @gateway.send(:post_data, :credit_card_settle, params)
60
+ assert REXML::Document.new(data)
61
+ end
62
+
63
+ def test_avs_result
64
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
65
+
66
+ response = @gateway.purchase(@amount, @credit_card, @options)
67
+ assert_equal 'N', response.avs_result['code']
68
+ end
69
+
70
+ def test_cvv_result
71
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
72
+
73
+ response = @gateway.purchase(@amount, @credit_card, @options)
74
+ assert_equal 'M', response.cvv_result['code']
75
+ end
76
+
77
+ private
78
+ def successful_purchase_response
79
+ <<-XML
80
+ <?xml version="1.0"?>
81
+ <Reply>
82
+ <TransactionReply>
83
+ <ResponseCode>0</ResponseCode>
84
+ <ResultCode>00</ResultCode>
85
+ <ResultMessage>APPROVED</ResultMessage>
86
+ <TransactionID>100018347764</TransactionID>
87
+ <AVSResponseCode>N</AVSResponseCode>
88
+ <CVVResponseCode>M</CVVResponseCode>
89
+ <ApprovalNumber>123456</ApprovalNumber>
90
+ <AuthorizationNumber>123456</AuthorizationNumber>
91
+ <TransactionDate>080117</TransactionDate>
92
+ <TransactionTime>163222</TransactionTime>
93
+ <ReferenceNumber>1</ReferenceNumber>
94
+ <AccountNumber>XXXXXXXXXXXX2224</AccountNumber>
95
+ <TransactionAmount>1.00</TransactionAmount>
96
+ </TransactionReply>
97
+ </Reply>
98
+ XML
99
+ end
100
+
101
+ def unsuccessful_purchase_response
102
+ <<-XML
103
+ <?xml version="1.0"?>
104
+ <Reply>
105
+ <TransactionReply>
106
+ <ResponseCode>256</ResponseCode>
107
+ <ResultCode>04</ResultCode>
108
+ <ResultMessage>DECLINED</ResultMessage>
109
+ <TransactionID>100018347784</TransactionID>
110
+ <AVSResponseCode>N</AVSResponseCode>
111
+ <CVVResponseCode/>
112
+ <ApprovalNumber/>
113
+ <AuthorizationNumber/>
114
+ <TransactionDate>080117</TransactionDate>
115
+ <TransactionTime>163946</TransactionTime>
116
+ <ReferenceNumber>1</ReferenceNumber>
117
+ <AccountNumber>XXXXXXXXXXXX2224</AccountNumber>
118
+ <TransactionAmount>1.56</TransactionAmount>
119
+ </TransactionReply>
120
+ </Reply>
121
+ XML
122
+ end
123
+ end
@@ -0,0 +1,118 @@
1
+ require 'test_helper'
2
+
3
+ class EwayTest < Test::Unit::TestCase
4
+ def setup
5
+ @gateway = EwayGateway.new(
6
+ :login => '87654321'
7
+ )
8
+
9
+ @credit_card = credit_card('4646464646464646')
10
+
11
+ @options = {
12
+ :order_id => '1230123',
13
+ :email => 'bob@testbob.com',
14
+ :billing_address => {
15
+ :address1 => '1234 First St.',
16
+ :address2 => 'Apt. 1',
17
+ :city => 'Melbourne',
18
+ :state => 'ACT',
19
+ :country => 'AU',
20
+ :zip => '12345'
21
+ },
22
+ :description => 'purchased items'
23
+ }
24
+ end
25
+
26
+ def test_successful_purchase
27
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
28
+
29
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
30
+ assert_instance_of Response, response
31
+ assert_success response
32
+ assert_equal '123456', response.authorization
33
+ end
34
+
35
+ def test_failed_purchase
36
+ @gateway.expects(:ssl_post).returns(failed_purchase_response)
37
+
38
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
39
+ assert_instance_of Response, response
40
+ assert_failure response
41
+ end
42
+
43
+ def test_amount_style
44
+ assert_equal '1034', @gateway.send(:amount, 1034)
45
+
46
+ assert_raise(ArgumentError) do
47
+ @gateway.send(:amount, '10.34')
48
+ end
49
+ end
50
+
51
+ def test_ensure_does_not_respond_to_authorize
52
+ assert !@gateway.respond_to?(:authorize)
53
+ end
54
+
55
+ def test_ensure_does_not_respond_to_capture
56
+ assert !@gateway.respond_to?(:capture)
57
+ end
58
+
59
+ def test_test_url_without_cvn
60
+ assert_equal EwayGateway::TEST_URL, @gateway.send(:gateway_url, false, true)
61
+ end
62
+
63
+ def test_test_url_with_cvn
64
+ assert_equal EwayGateway::TEST_CVN_URL, @gateway.send(:gateway_url, true, true)
65
+ end
66
+
67
+ def test_live_url_without_cvn
68
+ assert_equal EwayGateway::LIVE_URL, @gateway.send(:gateway_url, false, false)
69
+ end
70
+
71
+ def test_live_url_with_cvn
72
+ assert_equal EwayGateway::LIVE_CVN_URL, @gateway.send(:gateway_url, true, false)
73
+ end
74
+
75
+ def test_add_address
76
+ post = {}
77
+ @gateway.send(:add_address, post, @options)
78
+ assert_equal '1234 First St., Apt. 1, Melbourne, ACT, AU', post[:CustomerAddress]
79
+ assert_equal @options[:billing_address][:zip], post[:CustomerPostcode]
80
+ end
81
+
82
+ private
83
+ def successful_purchase_response
84
+ <<-XML
85
+ <?xml version="1.0"?>
86
+ <ewayResponse>
87
+ <ewayTrxnStatus>True</ewayTrxnStatus>
88
+ <ewayTrxnNumber>11292</ewayTrxnNumber>
89
+ <ewayTrxnReference/>
90
+ <ewayTrxnOption1/>
91
+ <ewayTrxnOption2/>
92
+ <ewayTrxnOption3/>
93
+ <ewayAuthCode>123456</ewayAuthCode>
94
+ <ewayReturnAmount>100</ewayReturnAmount>
95
+ <ewayTrxnError>00,Transaction Approved(Test CVN Gateway)</ewayTrxnError>
96
+ </ewayResponse>
97
+ XML
98
+ end
99
+
100
+ def failed_purchase_response
101
+ <<-XML
102
+ <?xml version="1.0"?>
103
+ <ewayResponse>
104
+ <ewayTrxnStatus>False</ewayTrxnStatus>
105
+ <ewayTrxnNumber>11290</ewayTrxnNumber>
106
+ <ewayTrxnReference/>
107
+ <ewayTrxnOption1/>
108
+ <ewayTrxnOption2/>
109
+ <ewayTrxnOption3/>
110
+ <ewayAuthCode/>
111
+ <ewayReturnAmount>100</ewayReturnAmount>
112
+ <ewayTrxnError>eWAY Error: Invalid Expiry Date. Your credit card has not been billed for this transaction.(Test CVN Gateway)</ewayTrxnError>
113
+ </ewayResponse>
114
+ XML
115
+ end
116
+ end
117
+
118
+