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,156 @@
1
+ require 'test_helper'
2
+
3
+ class ExactTest < Test::Unit::TestCase
4
+ def setup
5
+ @gateway = ExactGateway.new( :login => "A00427-01",
6
+ :password => "testus" )
7
+
8
+ @credit_card = credit_card
9
+ @amount = 100
10
+ @options = {
11
+ :order_id => '1',
12
+ :billing_address => address,
13
+ :description => 'Store Purchase'
14
+ }
15
+ end
16
+
17
+ def test_successful_purchase
18
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
19
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
20
+ assert_success response
21
+ assert_equal 'ET1700;106625152', response.authorization
22
+ assert response.test?
23
+ assert_equal 'Transaction Normal - VER UNAVAILABLE', response.message
24
+
25
+ ExactGateway::SENSITIVE_FIELDS.each{ |f| assert !response.params.has_key?(f.to_s) }
26
+ end
27
+
28
+ def test_failed_purchase
29
+ @gateway.expects(:ssl_post).returns(failed_purchase_response)
30
+
31
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
32
+ assert_instance_of Response, response
33
+ assert_failure response
34
+ end
35
+
36
+
37
+ def test_expdate
38
+ assert_equal( "%02d%s" % [ @credit_card.month,
39
+ @credit_card.year.to_s[-2..-1] ],
40
+ @gateway.send(:expdate, @credit_card) )
41
+ end
42
+
43
+ def test_soap_fault
44
+ @gateway.expects(:ssl_post).returns(soap_fault_response)
45
+ assert response = @gateway.purchase(100, @credit_card, {})
46
+ assert_failure response
47
+ assert response.test?
48
+ assert_equal 'Unable to handle request without a valid action parameter. Please supply a valid soap action.', response.message
49
+ end
50
+
51
+ def test_supported_countries
52
+ assert_equal ['CA', 'US'], ExactGateway.supported_countries
53
+ end
54
+
55
+ def test_supported_card_types
56
+ assert_equal [:visa, :master, :american_express, :jcb, :discover], ExactGateway.supported_cardtypes
57
+ end
58
+
59
+ def test_avs_result
60
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
61
+
62
+ response = @gateway.purchase(@amount, @credit_card)
63
+ assert_equal 'U', response.avs_result['code']
64
+ end
65
+
66
+ def test_cvv_result
67
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
68
+
69
+ response = @gateway.purchase(@amount, @credit_card)
70
+ assert_equal 'M', response.cvv_result['code']
71
+ end
72
+
73
+
74
+ private
75
+ def successful_purchase_response
76
+ <<-RESPONSE
77
+ <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/" xmlns:types="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/encodedTypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><q1:SendAndCommitResponse xmlns:q1="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/Response"><SendAndCommitResult href="#id1" /></q1:SendAndCommitResponse><types:TransactionResult id="id1" xsi:type="types:TransactionResult"><ExactID xsi:type="xsd:string">A00427-01</ExactID><Password xsi:type="xsd:string">#######</Password><Transaction_Type xsi:type="xsd:string">00</Transaction_Type><DollarAmount xsi:type="xsd:string">1</DollarAmount><SurchargeAmount xsi:type="xsd:string">0</SurchargeAmount><Card_Number xsi:type="xsd:string">4242424242424242</Card_Number><Transaction_Tag xsi:type="xsd:string">106625152</Transaction_Tag><Authorization_Num xsi:type="xsd:string">ET1700</Authorization_Num><Expiry_Date xsi:type="xsd:string">0909</Expiry_Date><CardHoldersName xsi:type="xsd:string">Longbob Longsen</CardHoldersName><VerificationStr2 xsi:type="xsd:string">123</VerificationStr2><CVD_Presence_Ind xsi:type="xsd:string">1</CVD_Presence_Ind><Secure_AuthRequired xsi:type="xsd:string">0</Secure_AuthRequired><Secure_AuthResult xsi:type="xsd:string">0</Secure_AuthResult><Ecommerce_Flag xsi:type="xsd:string">0</Ecommerce_Flag><CAVV_Algorithm xsi:type="xsd:string">0</CAVV_Algorithm><Reference_No xsi:type="xsd:string">1</Reference_No><Reference_3 xsi:type="xsd:string">Store Purchase</Reference_3><Language xsi:type="xsd:string">0</Language><LogonMessage xsi:type="xsd:string">Processed by:
78
+ E-xact Transaction Gateway :- Version 8.4.0 B19b
79
+ Copyright 2006
80
+ {34:2652}</LogonMessage><Error_Number xsi:type="xsd:string">0</Error_Number><Error_Description xsi:type="xsd:string" /><Transaction_Error xsi:type="xsd:boolean">false</Transaction_Error><Transaction_Approved xsi:type="xsd:boolean">true</Transaction_Approved><EXact_Resp_Code xsi:type="xsd:string">00</EXact_Resp_Code><EXact_Message xsi:type="xsd:string">Transaction Normal</EXact_Message><Bank_Resp_Code xsi:type="xsd:string">00</Bank_Resp_Code><Bank_Message xsi:type="xsd:string">VER UNAVAILABLE </Bank_Message><SequenceNo xsi:type="xsd:string">377</SequenceNo><AVS xsi:type="xsd:string">U</AVS><CVV2 xsi:type="xsd:string">M</CVV2><Retrieval_Ref_No xsi:type="xsd:string">200801181700</Retrieval_Ref_No><MerchantName xsi:type="xsd:string">E-xact ConnectionShop</MerchantName><MerchantAddress xsi:type="xsd:string">Suite 400 - 1152 Mainland St.</MerchantAddress><MerchantCity xsi:type="xsd:string">Vancouver</MerchantCity><MerchantProvince xsi:type="xsd:string">BC</MerchantProvince><MerchantCountry xsi:type="xsd:string">Canada</MerchantCountry><MerchantPostal xsi:type="xsd:string">V6B 4X2</MerchantPostal><MerchantURL xsi:type="xsd:string">www.e-xact.com</MerchantURL><CTR xsi:type="xsd:string">========== TRANSACTION RECORD =========
81
+
82
+ E-xact ConnectionShop
83
+ Suite 400 - 1152 Mainland St.
84
+ Vancouver, BC V6B 4X2
85
+ www.e-xact.com
86
+
87
+ TYPE: Purchase
88
+
89
+ ACCT: Visa $1.00 USD
90
+
91
+ CARD NUMBER : ############4242
92
+ TRANS. REF. : 1
93
+ CARD HOLDER : Longbob Longsen
94
+ EXPIRY DATE : xx/xx
95
+ DATE/TIME : 18 Jan 08 14:17:00
96
+ REFERENCE # : 5999 377 M
97
+ AUTHOR.# : ET1700
98
+
99
+ Approved - Thank You 00
100
+
101
+ SIGNATURE
102
+
103
+
104
+
105
+ _______________________________________
106
+
107
+ </CTR></types:TransactionResult></soap:Body></soap:Envelope>
108
+ RESPONSE
109
+ end
110
+
111
+ def failed_purchase_response
112
+ <<-RESPONSE
113
+ <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/" xmlns:types="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/encodedTypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><q1:SendAndCommitResponse xmlns:q1="http://secure2.e-xact.com/vplug-in/transaction/rpc-enc/Response"><SendAndCommitResult href="#id1" /></q1:SendAndCommitResponse><types:TransactionResult id="id1" xsi:type="types:TransactionResult"><ExactID xsi:type="xsd:string">A00427-01</ExactID><Password xsi:type="xsd:string">#######</Password><Transaction_Type xsi:type="xsd:string">00</Transaction_Type><DollarAmount xsi:type="xsd:string">5013</DollarAmount><SurchargeAmount xsi:type="xsd:string">0</SurchargeAmount><Card_Number xsi:type="xsd:string">4111111111111111</Card_Number><Transaction_Tag xsi:type="xsd:string">106624668</Transaction_Tag><Expiry_Date xsi:type="xsd:string">0909</Expiry_Date><CardHoldersName xsi:type="xsd:string">Longbob Longsen</CardHoldersName><VerificationStr2 xsi:type="xsd:string">123</VerificationStr2><CVD_Presence_Ind xsi:type="xsd:string">1</CVD_Presence_Ind><Secure_AuthRequired xsi:type="xsd:string">0</Secure_AuthRequired><Secure_AuthResult xsi:type="xsd:string">0</Secure_AuthResult><Ecommerce_Flag xsi:type="xsd:string">0</Ecommerce_Flag><CAVV_Algorithm xsi:type="xsd:string">0</CAVV_Algorithm><Reference_No xsi:type="xsd:string">1</Reference_No><Reference_3 xsi:type="xsd:string">Store Purchase</Reference_3><Language xsi:type="xsd:string">0</Language><LogonMessage xsi:type="xsd:string">Processed by:
114
+ E-xact Transaction Gateway :- Version 8.4.0 B19b
115
+ Copyright 2006
116
+ {34:2652}</LogonMessage><Error_Number xsi:type="xsd:string">0</Error_Number><Error_Description xsi:type="xsd:string" /><Transaction_Error xsi:type="xsd:boolean">false</Transaction_Error><Transaction_Approved xsi:type="xsd:boolean">false</Transaction_Approved><EXact_Resp_Code xsi:type="xsd:string">00</EXact_Resp_Code><EXact_Message xsi:type="xsd:string">Transaction Normal</EXact_Message><Bank_Resp_Code xsi:type="xsd:string">13</Bank_Resp_Code><Bank_Message xsi:type="xsd:string">AMOUNT ERR</Bank_Message><SequenceNo xsi:type="xsd:string">376</SequenceNo><AVS xsi:type="xsd:string">U</AVS><CVV2 xsi:type="xsd:string">M</CVV2><MerchantName xsi:type="xsd:string">E-xact ConnectionShop</MerchantName><MerchantAddress xsi:type="xsd:string">Suite 400 - 1152 Mainland St.</MerchantAddress><MerchantCity xsi:type="xsd:string">Vancouver</MerchantCity><MerchantProvince xsi:type="xsd:string">BC</MerchantProvince><MerchantCountry xsi:type="xsd:string">Canada</MerchantCountry><MerchantPostal xsi:type="xsd:string">V6B 4X2</MerchantPostal><MerchantURL xsi:type="xsd:string">www.e-xact.com</MerchantURL><CTR xsi:type="xsd:string">========== TRANSACTION RECORD =========
117
+
118
+ E-xact ConnectionShop
119
+ Suite 400 - 1152 Mainland St.
120
+ Vancouver, BC V6B 4X2
121
+ www.e-xact.com
122
+
123
+ TYPE: Purchase
124
+
125
+ ACCT: Visa $5,013.00 USD
126
+
127
+ CARD NUMBER : ############1111
128
+ TRANS. REF. : 1
129
+ CARD HOLDER : Longbob Longsen
130
+ EXPIRY DATE : xx/xx
131
+ DATE/TIME : 18 Jan 08 14:11:09
132
+ REFERENCE # : 5999 376 M
133
+ AUTHOR.# :
134
+
135
+ Transaction not Approved 13
136
+
137
+
138
+ </CTR></types:TransactionResult></soap:Body></soap:Envelope>
139
+ RESPONSE
140
+ end
141
+
142
+ def soap_fault_response
143
+ <<-RESPONSE
144
+ <?xml version='1.0' encoding='UTF-8'?>
145
+ <soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
146
+ <soap:Body>
147
+ <soap:Fault>
148
+ <faultcode>soap:Client</faultcode>
149
+ <faultstring>Unable to handle request without a valid action parameter. Please supply a valid soap action.</faultstring>
150
+ <detail/>
151
+ </soap:Fault>
152
+ </soap:Body>
153
+ </soap:Envelope>
154
+ RESPONSE
155
+ end
156
+ end
@@ -0,0 +1,125 @@
1
+ require 'test_helper'
2
+
3
+ class FirstPayTest < Test::Unit::TestCase
4
+ def setup
5
+ @gateway = FirstPayGateway.new(:login => 'login', :password => 'password')
6
+
7
+ @credit_card = credit_card
8
+ @amount = 100
9
+
10
+ @options = {
11
+ :order_id => '1',
12
+ :billing_address => address,
13
+ :description => 'Store Purchase',
14
+ :ip => '127.0.0.1',
15
+ :email => 'test@test.com'
16
+ }
17
+ end
18
+
19
+ def test_successful_purchase
20
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
21
+
22
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
23
+ assert_success response
24
+
25
+ # Replace with authorization number from the successful response
26
+ assert_equal '57097598', response.authorization
27
+ assert response.test?
28
+ end
29
+
30
+ def test_failed_purchase
31
+ @gateway.expects(:ssl_post).returns(failed_purchase_response)
32
+
33
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
34
+ assert_failure response
35
+ assert_equal('DECLINE', response.message)
36
+ assert response.test?
37
+ end
38
+
39
+ def test_error_on_purchase
40
+ @gateway.expects(:ssl_post).returns(error_response)
41
+
42
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
43
+ assert ! response.success?
44
+ assert_equal('704-MISSING BASIC DATA TYPE:card, exp, zip, addr, member, amount', response.message)
45
+ assert response.test?
46
+ end
47
+
48
+ def test_successful_credit
49
+ @gateway.expects(:ssl_post).returns(successful_credit_response)
50
+ @options[:credit_card] = @credit_card
51
+
52
+ assert response = @gateway.credit(@amount, '123456', @options)
53
+ assert_success response
54
+
55
+ assert_equal '53147613', response.authorization
56
+ assert response.test?
57
+ end
58
+
59
+ def test_failed_credit
60
+ @options[:credit_card] = @credit_card
61
+ @gateway.expects(:ssl_post).returns(failed_credit_response)
62
+
63
+ assert response = @gateway.credit(@amount, '123456', @options)
64
+ assert_failure response
65
+ assert_equal('PARENT TRANSACTION NOT FOUND', response.message)
66
+ assert response.test?
67
+ end
68
+
69
+ def test_failed_unlinked_credit
70
+ assert_raise ArgumentError do
71
+ @gateway.credit(@amount, @credit_card)
72
+ end
73
+ end
74
+
75
+ def test_successful_void
76
+ @gateway.expects(:ssl_post).returns(successful_void_response)
77
+ @options[:transactionid] = '123456'
78
+
79
+ assert response = @gateway.void(@amount, @credit_card, @options)
80
+ assert_success response
81
+
82
+ assert_equal '53147623', response.authorization
83
+ assert response.test?
84
+ end
85
+
86
+ def test_failed_void
87
+ @gateway.expects(:ssl_post).returns(failed_void_response)
88
+
89
+ assert response = @gateway.void(@amount, @credit_card, @options)
90
+ assert_failure response
91
+ assert_equal('PARENT TRANSACTION NOT FOUND', response.message)
92
+ assert response.test?
93
+ end
94
+
95
+
96
+ private
97
+
98
+ def successful_purchase_response
99
+ "CAPTURED:056708:NA:X:Jun 02 2009:241:NLS:NLS:NLS:57097598:9999:NA:NA:NA:NA:NA:NA:NA"
100
+ end
101
+
102
+ def failed_purchase_response
103
+ "NOT CAPTURED:DECLINE:NA:NA:Dec 11 2003:278654:NLS:NLS:NLS:53147611:200312111612:NA:NA:NA:NA:NA:NA"
104
+ end
105
+
106
+ def successful_credit_response
107
+ "CAPTURED:945101216:199641568:NA:Dec 11 2003:278655:NLS:NLS:NLS:53147613:200312111613:NA:NA:NA:NA:NA"
108
+ end
109
+
110
+ def failed_credit_response
111
+ "NOT CAPTURED:PARENT TRANSACTION NOT FOUND:NA:NA:Dec 11 2003:278614:NLS:NLS:NLS:53147499:200311251526:NA:NA:NA:NA:NA"
112
+ end
113
+
114
+ def successful_void_response
115
+ "CAPTURED:000000:NA:Y:Dec 11 2003:278659:NLS:NLS:NLS:53147623:200312111628:NA:NA:NA:NA:NA"
116
+ end
117
+
118
+ def failed_void_response
119
+ "NOT CAPTURED:PARENT TRANSACTION NOT FOUND:NA:NA:Dec 11 2003:278644:NLS:NLS:NLS:53147562:200311251526:NA:NA:NA:NA:NA"
120
+ end
121
+
122
+ def error_response
123
+ '!ERROR! 704-MISSING BASIC DATA TYPE:card, exp, zip, addr, member, amount'
124
+ end
125
+ end
@@ -0,0 +1,48 @@
1
+ require 'test_helper'
2
+
3
+ class GatewayTest < Test::Unit::TestCase
4
+ def test_should_detect_if_a_card_is_supported
5
+ Gateway.supported_cardtypes = [:visa, :bogus]
6
+ assert [:visa, :bogus].all? { |supported_cardtype| Gateway.supports?(supported_cardtype) }
7
+
8
+ Gateway.supported_cardtypes = []
9
+ assert_false [:visa, :bogus].all? { |invalid_cardtype| Gateway.supports?(invalid_cardtype) }
10
+ end
11
+
12
+ def test_should_gateway_uses_ssl_strict_checking_by_default
13
+ assert Gateway.ssl_strict
14
+ end
15
+
16
+ def test_should_be_able_to_look_for_test_mode
17
+ Base.gateway_mode = :test
18
+ assert Gateway.new.test?
19
+
20
+ Base.gateway_mode = :production
21
+ assert_false Gateway.new.test?
22
+ end
23
+
24
+ def test_amount_style
25
+ assert_equal '10.34', Gateway.new.send(:amount, 1034)
26
+
27
+ assert_raise(ArgumentError) do
28
+ Gateway.new.send(:amount, '10.34')
29
+ end
30
+ end
31
+
32
+ def test_invalid_type
33
+ credit_card = stub(:type => "visa")
34
+ assert_equal "visa", Gateway.card_brand(credit_card)
35
+ end
36
+
37
+ def test_invalid_type
38
+ credit_card = stub(:type => "String", :brand => "visa")
39
+ assert_equal "visa", Gateway.card_brand(credit_card)
40
+ end
41
+
42
+ def test_setting_application_id_outside_the_class_definition
43
+ assert_equal SimpleTestGateway.application_id, SubclassGateway.application_id
44
+ SimpleTestGateway.application_id = "New Application ID"
45
+
46
+ assert_equal SimpleTestGateway.application_id, SubclassGateway.application_id
47
+ end
48
+ end
@@ -0,0 +1,102 @@
1
+ require 'test_helper'
2
+
3
+ class InstapayTest < Test::Unit::TestCase
4
+ def setup
5
+ @gateway = InstapayGateway.new(:login => 'TEST0')
6
+ @credit_card = credit_card
7
+ @amount = 100
8
+ end
9
+
10
+ def test_successful_purchase
11
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
12
+
13
+ assert response = @gateway.purchase(@amount, @credit_card)
14
+ assert_instance_of Response, response
15
+ assert_success response
16
+ assert_equal "118583850", response.authorization
17
+ end
18
+
19
+ def test_unsuccessful_purchase
20
+ @gateway.expects(:ssl_post).returns(failed_purchase_response)
21
+
22
+ assert response = @gateway.purchase(@amount, @credit_card)
23
+ assert_instance_of Response, response
24
+ assert_failure response
25
+ assert_nil response.authorization
26
+ end
27
+
28
+ def test_successful_auth
29
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
30
+
31
+ assert response = @gateway.authorize(@amount, @credit_card)
32
+ assert_instance_of Response, response
33
+ assert_success response
34
+ assert_equal "118583850", response.authorization
35
+ end
36
+
37
+ def test_unsuccessful_auth
38
+ @gateway.expects(:ssl_post).returns(failed_purchase_response)
39
+
40
+ assert response = @gateway.authorize(@amount, @credit_card)
41
+ assert_instance_of Response, response
42
+ assert_failure response
43
+ assert_nil response.authorization
44
+ end
45
+
46
+ def test_avs_result
47
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
48
+
49
+ response = @gateway.purchase(@amount, @credit_card)
50
+ assert_equal 'X', response.avs_result['code']
51
+ end
52
+
53
+ def test_cvv_result
54
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
55
+
56
+ response = @gateway.purchase(@amount, @credit_card)
57
+ assert_equal 'M', response.cvv_result['code']
58
+ end
59
+
60
+ def test_successful_capture
61
+ @gateway.expects(:ssl_post).returns(successful_capture_response)
62
+
63
+ response = @gateway.capture(100, "123456")
64
+ assert_equal InstapayGateway::SUCCESS_MESSAGE, response.message
65
+ end
66
+
67
+ def test_failed_capture
68
+ @gateway.expects(:ssl_post).returns(failed_capture_response)
69
+
70
+ response = @gateway.capture(100, "123456")
71
+ assert_equal "Post amount exceeds Auth amount", response.message
72
+ end
73
+
74
+ private
75
+
76
+ # Place raw successful response from gateway here
77
+ def successful_purchase_response
78
+ "<html><body><plaintext>\r\nAccepted=SALE:TEST:::118583850:X::M\r\nhistoryid=118583850\r\norderid=92886714\r\nAccepted=SALE:TEST:::118583850:::\r\nACCOUNTNUMBER=************5454\r\nauthcode=TEST\r\nAuthNo=SALE:TEST:::118583850:::\r\nhistoryid=118583850\r\norderid=92886714\r\nrecurid=0\r\nrefcode=118583850-TEST\r\nresult=1\r\nStatus=Accepted\r\ntransid=0\r\n"
79
+ end
80
+
81
+ # Place raw failed response from gateway here
82
+ def failed_purchase_response
83
+ "<html><body><plaintext>\r\nDeclined=DECLINED:0720930009:CVV2 MISMATCH:N7\r\nhistoryid=118583848\r\norderid=92886713\r\nACCOUNTNUMBER=************2220\r\nDeclined=DECLINED:0720930009:CVV2 MISMATCH:N7\r\nhistoryid=118583848\r\norderid=92886713\r\nrcode=0720930009\r\nReason=DECLINED:0720930009:CVV2 MISMATCH:N7\r\nrecurid=0\r\nresult=0\r\nStatus=Declined\r\ntransid=80410586\r\n"
84
+ end
85
+
86
+ def successful_auth_response
87
+ "<html><body><plaintext>\r\nAccepted=AUTH:TEST:::118585994:::\r\nhistoryid=118585994\r\norderid=92888143\r\nAccepted=AUTH:TEST:::118585994:::\r\nACCOUNTNUMBER=************5454\r\nauthcode=TEST\r\nAuthNo=AUTH:TEST:::118585994:::\r\nhistoryid=118585994\r\norderid=92888143\r\nrecurid=0\r\nrefcode=118585994-TEST\r\nresult=1\r\nStatus=Accepted\r\ntransid=0\r\n"
88
+ end
89
+
90
+ def failed_auth_response
91
+ "<html><body><plaintext>\r\nDeclined=DECLINED:0720930009:CVV2 MISMATCH:N7\r\nhistoryid=118585991\r\norderid=92888142\r\nACCOUNTNUMBER=************2220\r\nDeclined=DECLINED:0720930009:CVV2 MISMATCH:N7\r\nhistoryid=118585991\r\norderid=92888142\r\nrcode=0720930009\r\nReason=DECLINED:0720930009:CVV2 MISMATCH:N7\r\nrecurid=0\r\nresult=0\r\nStatus=Declined\r\ntransid=80412271\r\n"
92
+ end
93
+
94
+ def successful_capture_response
95
+ "<html><body><plaintext>\r\nAccepted=AVSAUTH:TEST:::121609962::::DUPLICATE\r\nhistoryid=121609962\r\norderid=95009583\r\nAccepted=AVSAUTH:TEST:::121609962::::DUPLICATE\r\nACCOUNTNUMBER=************5454\r\nauthcode=TEST\r\nAuthNo=AVSAUTH:TEST:::121609962::::DUPLICATE\r\nDUPLICATE=1\r\nhistoryid=121609962\r\norderid=95009583\r\nrecurid=0\r\nrefcode=121609962-TEST\r\nresult=1\r\nStatus=Accepted\r\ntransid=0\r\n"
96
+ end
97
+
98
+ def failed_capture_response
99
+ "<html><body><plaintext>\r\nDeclined=DECLINED:1101450002:Post amount exceeds Auth amount:\r\nhistoryid=\r\norderid=\r\nDeclined=DECLINED:1101450002:Post amount exceeds Auth amount:\r\nrcode=1101450002\r\nReason=DECLINED:1101450002:Post amount exceeds Auth amount:\r\nresult=0\r\nStatus=Declined\r\ntransid=0\r\n"
100
+ end
101
+ end
102
+
@@ -0,0 +1,167 @@
1
+ require 'test_helper'
2
+
3
+ class LinkpointTest < Test::Unit::TestCase
4
+ def setup
5
+ Base.mode = :test
6
+
7
+ @gateway = LinkpointGateway.new(
8
+ :login => 123123,
9
+ :pem => 'PEM'
10
+ )
11
+
12
+ @credit_card = credit_card('4111111111111111')
13
+ @options = { :order_id => 1000, :billing_address => address }
14
+ end
15
+
16
+ def test_credit_card_formatting
17
+ assert_equal '04', @gateway.send(:format_creditcard_expiry_year, 2004)
18
+ assert_equal '04', @gateway.send(:format_creditcard_expiry_year, '2004')
19
+ assert_equal '04', @gateway.send(:format_creditcard_expiry_year, 4)
20
+ assert_equal '04', @gateway.send(:format_creditcard_expiry_year, '04')
21
+ end
22
+
23
+ def test_successful_authorization
24
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
25
+
26
+ assert response = @gateway.authorize(@amount, @credit_card, @options)
27
+ assert_instance_of Response, response
28
+ assert_success response
29
+ assert_equal '1000', response.authorization
30
+ end
31
+
32
+ def test_successful_purchase
33
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
34
+
35
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
36
+ assert_instance_of Response, response
37
+ assert_success response
38
+ assert_equal '1000', response.authorization
39
+ end
40
+
41
+ def test_failed_purchase
42
+ @gateway.expects(:ssl_post).returns(failed_purchase_response)
43
+
44
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
45
+ assert_failure response
46
+ end
47
+
48
+ def test_recurring
49
+ @gateway.expects(:ssl_post).returns(successful_recurring_response)
50
+
51
+ assert response = @gateway.recurring(2400, @credit_card, :order_id => 1003, :installments => 12, :startdate => "immediate", :periodicity => :monthly)
52
+ assert_success response
53
+ end
54
+
55
+ def test_amount_style
56
+ assert_equal '10.34', @gateway.send(:amount, 1034)
57
+
58
+ assert_raise(ArgumentError) do
59
+ @gateway.send(:amount, '10.34')
60
+ end
61
+ end
62
+
63
+ def test_purchase_is_valid_xml
64
+ parameters = @gateway.send(:parameters, 1000, @credit_card, :ordertype => "SALE", :order_id => 1004,
65
+ :billing_address => {
66
+ :address1 => '1313 lucky lane',
67
+ :city => 'Lost Angeles',
68
+ :state => 'CA',
69
+ :zip => '90210'
70
+ }
71
+ )
72
+
73
+ assert data = @gateway.send(:post_data, @amount, @credit_card, @options)
74
+ assert REXML::Document.new(data)
75
+ end
76
+
77
+ def test_recurring_is_valid_xml
78
+ parameters = @gateway.send(:parameters, 1000, @credit_card, :ordertype => "SALE", :action => "SUBMIT", :installments => 12, :startdate => "immediate", :periodicity => "monthly", :order_id => 1006,
79
+ :billing_address => {
80
+ :address1 => '1313 lucky lane',
81
+ :city => 'Lost Angeles',
82
+ :state => 'CA',
83
+ :zip => '90210'
84
+ }
85
+ )
86
+ assert data = @gateway.send(:post_data, @amount, @credit_card, @options)
87
+ assert REXML::Document.new(data)
88
+ end
89
+
90
+ def test_declined_purchase_is_valid_xml
91
+ @gateway = LinkpointGateway.new(:login => 123123, :pem => 'PEM')
92
+
93
+ parameters = @gateway.send(:parameters, 1000, @credit_card, :ordertype => "SALE", :order_id => 1005,
94
+ :billing_address => {
95
+ :address1 => '1313 lucky lane',
96
+ :city => 'Lost Angeles',
97
+ :state => 'CA',
98
+ :zip => '90210'
99
+ }
100
+ )
101
+
102
+ assert data = @gateway.send(:post_data, @amount, @credit_card, @options)
103
+ assert REXML::Document.new(data)
104
+ end
105
+
106
+ def test_overriding_test_mode
107
+ Base.gateway_mode = :production
108
+
109
+ gateway = LinkpointGateway.new(
110
+ :login => 'LOGIN',
111
+ :pem => 'PEM',
112
+ :test => true
113
+ )
114
+
115
+ assert gateway.test?
116
+ end
117
+
118
+ def test_using_production_mode
119
+ Base.gateway_mode = :production
120
+
121
+ gateway = LinkpointGateway.new(
122
+ :login => 'LOGIN',
123
+ :pem => 'PEM'
124
+ )
125
+
126
+ assert !gateway.test?
127
+ end
128
+
129
+ def test_supported_countries
130
+ assert_equal ['US'], LinkpointGateway.supported_countries
131
+ end
132
+
133
+ def test_supported_card_types
134
+ assert_equal [:visa, :master, :american_express, :discover], LinkpointGateway.supported_cardtypes
135
+ end
136
+
137
+ def test_avs_result
138
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
139
+
140
+ response = @gateway.purchase(@amount, @credit_card, @options)
141
+ assert_equal 'N', response.avs_result['code']
142
+ end
143
+
144
+ def test_cvv_result
145
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
146
+
147
+ response = @gateway.purchase(@amount, @credit_card, @options)
148
+ assert_equal 'M', response.cvv_result['code']
149
+ end
150
+
151
+ private
152
+ def successful_authorization_response
153
+ '<r_csp>CSI</r_csp><r_time>Sun Jan 6 21:41:31 2008</r_time><r_ref>0004486182</r_ref><r_error/><r_ordernum>1000</r_ordernum><r_message>APPROVED</r_message><r_code>1234560004486182:NNNM:100018312899:</r_code><r_tdate>1199680890</r_tdate><r_score/><r_authresponse/><r_approved>APPROVED</r_approved><r_avs>NNNM</r_avs>'
154
+ end
155
+
156
+ def successful_purchase_response
157
+ '<r_csp>CSI</r_csp><r_time>Sun Jan 6 21:45:22 2008</r_time><r_ref>0004486195</r_ref><r_error></r_error><r_ordernum>1000</r_ordernum><r_message>APPROVED</r_message><r_code>1234560004486195:NNNM:100018312912:</r_code><r_tdate>1199681121</r_tdate><r_score></r_score><r_authresponse></r_authresponse><r_approved>APPROVED</r_approved><r_avs>NNNM</r_avs>'
158
+ end
159
+
160
+ def failed_purchase_response
161
+ '<r_csp></r_csp><r_time>Sun Jan 6 21:50:51 2008</r_time><r_ref></r_ref><r_error>SGS-002300: Invalid credit card type.</r_error><r_ordernum>2aec6babe076111deb2c94c21181d9fe</r_ordernum><r_message></r_message><r_code></r_code><r_tdate></r_tdate><r_score></r_score><r_authresponse></r_authresponse><r_approved>DECLINED</r_approved><r_avs></r_avs>'
162
+ end
163
+
164
+ def successful_recurring_response
165
+ '<r_csp>CSI</r_csp><r_time>Sun Jan 6 21:49:00 2008</r_time><r_ref>0004486198</r_ref><r_error></r_error><r_ordernum>2206b7c9a31de5fb077913134011059d</r_ordernum><r_message>APPROVED</r_message><r_code>1234560004486198:NNNM:100018312915:</r_code><r_tdate>1199681339</r_tdate><r_score></r_score><r_authresponse></r_authresponse><r_approved>APPROVED</r_approved><r_avs>NNN</r_avs>'
166
+ end
167
+ end