activemerchant 1.2.1 → 1.3.0

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 (206) hide show
  1. data.tar.gz.sig +0 -0
  2. data/CHANGELOG +310 -294
  3. data/CONTRIBUTERS +13 -0
  4. data/README +55 -31
  5. data/Rakefile +21 -13
  6. data/lib/active_merchant.rb +7 -0
  7. data/lib/active_merchant/billing/avs_result.rb +95 -0
  8. data/lib/active_merchant/billing/base.rb +8 -3
  9. data/lib/active_merchant/billing/check.rb +61 -0
  10. data/lib/active_merchant/billing/credit_card.rb +104 -80
  11. data/lib/active_merchant/billing/credit_card_formatting.rb +11 -8
  12. data/lib/active_merchant/billing/credit_card_methods.rb +76 -32
  13. data/lib/active_merchant/billing/cvv_result.rb +38 -0
  14. data/lib/active_merchant/billing/expiry_date.rb +28 -0
  15. data/lib/active_merchant/billing/gateway.rb +47 -111
  16. data/lib/active_merchant/billing/gateways/authorize_net.rb +508 -121
  17. data/lib/active_merchant/billing/gateways/bogus.rb +26 -32
  18. data/lib/active_merchant/billing/gateways/brain_tree.rb +82 -70
  19. data/lib/active_merchant/billing/gateways/card_stream.rb +43 -15
  20. data/lib/active_merchant/billing/gateways/cyber_source.rb +9 -29
  21. data/lib/active_merchant/billing/gateways/data_cash.rb +18 -38
  22. data/lib/active_merchant/billing/gateways/efsnet.rb +23 -50
  23. data/lib/active_merchant/billing/gateways/eway.rb +8 -19
  24. data/lib/active_merchant/billing/gateways/exact.rb +17 -25
  25. data/lib/active_merchant/billing/gateways/linkpoint.rb +18 -25
  26. data/lib/active_merchant/billing/gateways/moneris.rb +9 -39
  27. data/lib/active_merchant/billing/gateways/net_registry.rb +113 -182
  28. data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
  29. data/lib/active_merchant/billing/gateways/pay_junction.rb +52 -73
  30. data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
  31. data/lib/active_merchant/billing/gateways/payflow.rb +13 -14
  32. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +55 -37
  33. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +4 -0
  34. data/lib/active_merchant/billing/gateways/payflow_express.rb +2 -4
  35. data/lib/active_merchant/billing/gateways/payment_express.rb +11 -30
  36. data/lib/active_merchant/billing/gateways/paypal.rb +3 -14
  37. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +36 -16
  38. data/lib/active_merchant/billing/gateways/paypal_express.rb +1 -2
  39. data/lib/active_merchant/billing/gateways/plugnpay.rb +7 -15
  40. data/lib/active_merchant/billing/gateways/protx.rb +24 -25
  41. data/lib/active_merchant/billing/gateways/psigate.rb +34 -71
  42. data/lib/active_merchant/billing/gateways/psl_card.rb +24 -19
  43. data/lib/active_merchant/billing/gateways/quickpay.rb +10 -24
  44. data/lib/active_merchant/billing/gateways/realex.rb +7 -19
  45. data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
  46. data/lib/active_merchant/billing/gateways/skip_jack.rb +437 -0
  47. data/lib/active_merchant/billing/gateways/trans_first.rb +5 -14
  48. data/lib/active_merchant/billing/gateways/trust_commerce.rb +100 -39
  49. data/lib/active_merchant/billing/gateways/usa_epay.rb +60 -55
  50. data/lib/active_merchant/billing/gateways/verifi.rb +32 -39
  51. data/lib/active_merchant/billing/gateways/viaklix.rb +31 -37
  52. data/lib/active_merchant/billing/integrations.rb +2 -0
  53. data/lib/active_merchant/billing/integrations/bogus.rb +5 -0
  54. data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
  55. data/lib/active_merchant/billing/integrations/chronopay.rb +5 -0
  56. data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
  57. data/lib/active_merchant/billing/integrations/gestpay.rb +5 -0
  58. data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
  59. data/lib/active_merchant/billing/integrations/hi_trust.rb +26 -0
  60. data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
  61. data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +57 -0
  62. data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
  63. data/lib/active_merchant/billing/integrations/nochex.rb +5 -0
  64. data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
  65. data/lib/active_merchant/billing/integrations/paypal.rb +5 -0
  66. data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
  67. data/lib/active_merchant/billing/integrations/return.rb +35 -0
  68. data/lib/active_merchant/billing/integrations/two_checkout.rb +5 -0
  69. data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
  70. data/lib/active_merchant/billing/response.rb +12 -8
  71. data/lib/active_merchant/lib/posts_data.rb +39 -7
  72. data/lib/active_merchant/lib/requires_parameters.rb +2 -3
  73. data/lib/active_merchant/lib/utils.rb +18 -0
  74. data/lib/active_merchant/lib/validateable.rb +3 -3
  75. data/lib/support/gateway_support.rb +22 -9
  76. data/script/destroy +14 -0
  77. data/script/generate +7 -7
  78. data/test/fixtures.yml +25 -3
  79. data/test/remote/gateways/remote_authorize_net_test.rb +145 -0
  80. data/test/remote/gateways/remote_brain_tree_test.rb +118 -0
  81. data/test/{remote_tests → remote/gateways}/remote_card_stream_test.rb +56 -68
  82. data/test/{remote_tests → remote/gateways}/remote_cyber_source_test.rb +21 -32
  83. data/test/{remote_tests → remote/gateways}/remote_data_cash_test.rb +2 -2
  84. data/test/{remote_tests → remote/gateways}/remote_efsnet_test.rb +22 -34
  85. data/test/{remote_tests → remote/gateways}/remote_eway_test.rb +18 -15
  86. data/test/{remote_tests → remote/gateways}/remote_exact_test.rb +20 -19
  87. data/test/{remote_tests → remote/gateways}/remote_linkpoint_test.rb +31 -63
  88. data/test/remote/gateways/remote_moneris_test.rb +82 -0
  89. data/test/{remote_tests → remote/gateways}/remote_net_registry_test.rb +19 -54
  90. data/test/remote/gateways/remote_netbilling_test.rb +70 -0
  91. data/test/{remote_tests → remote/gateways}/remote_pay_junction_test.rb +41 -60
  92. data/test/remote/gateways/remote_pay_secure_test.rb +39 -0
  93. data/test/{remote_tests → remote/gateways}/remote_payflow_express_test.rb +2 -2
  94. data/test/{remote_tests → remote/gateways}/remote_payflow_test.rb +34 -38
  95. data/test/{remote_tests → remote/gateways}/remote_payflow_uk_test.rb +13 -12
  96. data/test/{remote_tests → remote/gateways}/remote_payment_express_test.rb +26 -36
  97. data/test/{remote_tests → remote/gateways}/remote_paypal_express_test.rb +3 -3
  98. data/test/{remote_tests → remote/gateways}/remote_paypal_test.rb +25 -21
  99. data/test/{remote_tests → remote/gateways}/remote_plugnpay_test.rb +18 -16
  100. data/test/{remote_tests → remote/gateways}/remote_protx_test.rb +33 -33
  101. data/test/remote/gateways/remote_psigate_test.rb +50 -0
  102. data/test/{remote_tests → remote/gateways}/remote_psl_card_test.rb +27 -26
  103. data/test/{remote_tests → remote/gateways}/remote_quickpay_test.rb +48 -48
  104. data/test/{remote_tests → remote/gateways}/remote_realex_test.rb +30 -33
  105. data/test/remote/gateways/remote_secure_pay_tech_test.rb +37 -0
  106. data/test/remote/gateways/remote_secure_pay_test.rb +28 -0
  107. data/test/remote/gateways/remote_skipjack_test.rb +105 -0
  108. data/test/{remote_tests → remote/gateways}/remote_trans_first_test.rb +7 -10
  109. data/test/remote/gateways/remote_trust_commerce_test.rb +152 -0
  110. data/test/{remote_tests → remote/gateways}/remote_usa_epay_test.rb +11 -22
  111. data/test/{remote_tests → remote/gateways}/remote_verifi_test.rb +27 -27
  112. data/test/{remote_tests → remote/gateways}/remote_viaklix_test.rb +8 -18
  113. data/test/{remote_tests → remote/integrations}/remote_gestpay_integration_test.rb +1 -1
  114. data/test/{remote_tests → remote/integrations}/remote_paypal_integration_test.rb +1 -1
  115. data/test/test_helper.rb +102 -61
  116. data/test/unit/avs_result_test.rb +59 -0
  117. data/test/unit/base_test.rb +33 -39
  118. data/test/unit/check_test.rb +76 -0
  119. data/test/unit/credit_card_formatting_test.rb +10 -15
  120. data/test/unit/credit_card_methods_test.rb +132 -17
  121. data/test/unit/credit_card_test.rb +157 -228
  122. data/test/unit/cvv_result_test.rb +33 -0
  123. data/test/unit/expiry_date_test.rb +21 -0
  124. data/test/unit/gateways/authorize_net_test.rb +180 -40
  125. data/test/unit/gateways/bogus_test.rb +2 -3
  126. data/test/unit/gateways/brain_tree_test.rb +63 -29
  127. data/test/unit/gateways/card_stream_test.rb +59 -6
  128. data/test/unit/gateways/cyber_source_test.rb +59 -40
  129. data/test/unit/gateways/data_cash_test.rb +82 -1
  130. data/test/unit/gateways/efsnet_test.rb +97 -44
  131. data/test/unit/gateways/eway_test.rb +55 -42
  132. data/test/unit/gateways/exact_test.rb +93 -55
  133. data/test/unit/gateways/gateway_test.rb +7 -0
  134. data/test/unit/gateways/linkpoint_test.rb +60 -58
  135. data/test/unit/gateways/moneris_test.rb +67 -76
  136. data/test/unit/gateways/net_registry_test.rb +351 -419
  137. data/test/unit/gateways/netbilling_test.rb +54 -0
  138. data/test/unit/gateways/pay_junction_test.rb +108 -46
  139. data/test/unit/gateways/pay_secure_test.rb +71 -0
  140. data/test/unit/gateways/payflow_express_test.rb +0 -8
  141. data/test/unit/gateways/payflow_test.rb +136 -65
  142. data/test/unit/gateways/payflow_uk_test.rb +0 -38
  143. data/test/unit/gateways/payment_express_test.rb +31 -51
  144. data/test/unit/gateways/paypal_express_test.rb +8 -2
  145. data/test/unit/gateways/paypal_test.rb +213 -54
  146. data/test/unit/gateways/plugnpay_test.rb +39 -32
  147. data/test/unit/gateways/protx_test.rb +45 -33
  148. data/test/unit/gateways/psigate_test.rb +146 -87
  149. data/test/unit/gateways/psl_card_test.rb +37 -24
  150. data/test/unit/gateways/quickpay_test.rb +33 -46
  151. data/test/unit/gateways/realex_test.rb +32 -31
  152. data/test/unit/gateways/secure_pay_tech_test.rb +44 -0
  153. data/test/unit/gateways/secure_pay_test.rb +35 -26
  154. data/test/unit/gateways/skip_jack_test.rb +125 -0
  155. data/test/unit/gateways/trans_first_test.rb +24 -37
  156. data/test/unit/gateways/trust_commerce_test.rb +47 -26
  157. data/test/unit/gateways/usa_epay_test.rb +52 -41
  158. data/test/unit/gateways/verifi_test.rb +41 -35
  159. data/test/unit/gateways/viaklix_test.rb +38 -32
  160. data/test/unit/generators/test_gateway_generator.rb +46 -0
  161. data/test/unit/generators/test_generator_helper.rb +20 -0
  162. data/test/unit/generators/test_integration_generator.rb +53 -0
  163. data/test/unit/integrations/action_view_helper_test.rb +7 -14
  164. data/test/unit/integrations/bogus_module_test.rb +4 -0
  165. data/test/unit/integrations/chronopay_module_test.rb +4 -0
  166. data/test/unit/integrations/gestpay_module_test.rb +4 -0
  167. data/test/unit/integrations/helpers/hi_trust_helper_test.rb +16 -0
  168. data/test/unit/integrations/hi_trust_module_test.rb +13 -0
  169. data/test/unit/integrations/nochex_module_test.rb +4 -0
  170. data/test/unit/integrations/notifications/hi_trust_notification_test.rb +38 -0
  171. data/test/unit/integrations/paypal_module_test.rb +4 -0
  172. data/test/unit/integrations/returns/chronopay_return_test.rb +11 -0
  173. data/test/unit/integrations/returns/gestpay_return_test.rb +10 -0
  174. data/test/unit/integrations/returns/hi_trust_return_test.rb +24 -0
  175. data/test/unit/integrations/returns/nochex_return_test.rb +10 -0
  176. data/test/unit/integrations/returns/paypal_return_test.rb +10 -0
  177. data/test/unit/integrations/returns/return_test.rb +11 -0
  178. data/test/unit/integrations/returns/two_checkout_return_test.rb +24 -0
  179. data/test/unit/integrations/two_checkout_module_test.rb +4 -0
  180. data/test/unit/posts_data_test.rb +86 -0
  181. data/test/unit/response_test.rb +15 -1
  182. data/test/unit/utils_test.rb +7 -0
  183. data/test/unit/validateable_test.rb +10 -6
  184. metadata +180 -142
  185. metadata.gz.sig +0 -0
  186. data/lib/active_merchant/billing/gateways/paypal/api_cert_chain.crt +0 -35
  187. data/script/generator/base.rb +0 -45
  188. data/script/generator/generator.rb +0 -24
  189. data/script/generator/generators/gateway/gateway_generator.rb +0 -14
  190. data/script/generator/generators/gateway/templates/gateway.rb +0 -73
  191. data/script/generator/generators/gateway/templates/gateway_test.rb +0 -41
  192. data/script/generator/generators/gateway/templates/remote_gateway_test.rb +0 -56
  193. data/script/generator/generators/integration/integration_generator.rb +0 -25
  194. data/script/generator/generators/integration/templates/helper.rb +0 -34
  195. data/script/generator/generators/integration/templates/helper_test.rb +0 -54
  196. data/script/generator/generators/integration/templates/integration.rb +0 -18
  197. data/script/generator/generators/integration/templates/module_test.rb +0 -9
  198. data/script/generator/generators/integration/templates/notification.rb +0 -100
  199. data/script/generator/generators/integration/templates/notification_test.rb +0 -41
  200. data/script/generator/manifest.rb +0 -20
  201. data/test/remote_tests/remote_authorize_net_test.rb +0 -113
  202. data/test/remote_tests/remote_brain_tree_test.rb +0 -78
  203. data/test/remote_tests/remote_moneris_test.rb +0 -110
  204. data/test/remote_tests/remote_psigate_test.rb +0 -87
  205. data/test/remote_tests/remote_secure_pay_test.rb +0 -36
  206. data/test/remote_tests/remote_trust_commerce_test.rb +0 -136
@@ -0,0 +1,54 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+
3
+ class NetbillingTest < Test::Unit::TestCase
4
+ def setup
5
+ @gateway = NetbillingGateway.new(
6
+ :login => 'login',
7
+ :password => 'password'
8
+ )
9
+
10
+ @credit_card = credit_card('4242424242424242')
11
+ @amount = 100
12
+ @options = { :billing_address => address }
13
+ end
14
+
15
+ def test_successful_request
16
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
17
+
18
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
19
+ assert_success response
20
+ assert_equal '110270311543', response.authorization
21
+ assert response.test?
22
+ end
23
+
24
+ def test_unsuccessful_request
25
+ @gateway.expects(:ssl_post).returns(unsuccessful_purchase_response)
26
+
27
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
28
+ assert_failure response
29
+ assert response.test?
30
+ end
31
+
32
+ def test_avs_result
33
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
34
+
35
+ response = @gateway.purchase(@amount, @credit_card, @options)
36
+ assert_equal 'X', response.avs_result['code']
37
+ end
38
+
39
+ def test_cvv_result
40
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
41
+
42
+ response = @gateway.purchase(@amount, @credit_card, @options)
43
+ assert_equal 'M', response.cvv_result['code']
44
+ end
45
+
46
+ private
47
+ def successful_purchase_response
48
+ "avs_code=X&cvv2_code=M&status_code=1&auth_code=999999&trans_id=110270311543&auth_msg=TEST+APPROVED&auth_date=2008-01-25+16:43:54"
49
+ end
50
+
51
+ def unsuccessful_purchase_response
52
+ "status_code=0&auth_msg=CARD+EXPIRED&trans_id=110492608613&auth_date=2008-01-25+17:47:44"
53
+ end
54
+ end
@@ -2,60 +2,122 @@ require 'test/unit'
2
2
  require File.dirname(__FILE__) + '/../../test_helper'
3
3
 
4
4
  class PayJunctionTest < Test::Unit::TestCase
5
- include ActiveMerchant::Billing
6
-
7
5
  def setup
8
-
9
- ActiveMerchant::Billing::Base.gateway_mode = :test
6
+ Base.gateway_mode = :test
10
7
 
11
- @gateway = PayJunctionGateway.new({
12
- :login => "pj-ql-01",
13
- :password => "pj-ql-01p"
14
- })
8
+ @gateway = PayJunctionGateway.new(
9
+ :login => "pj-ql-01",
10
+ :password => "pj-ql-01p"
11
+ )
15
12
 
16
- @creditcard = CreditCard.new({
17
- :number => '4111111111111111',
18
- :month => 8,
19
- :year => 2006,
20
- :first_name => 'Longbob',
21
- :last_name => 'Longsen'
22
- })
13
+ @credit_card = credit_card
14
+ @options = {
15
+ :billing_address => address,
16
+ :description => 'Test purchase'
17
+ }
18
+ @amount = 100
19
+ end
20
+
21
+
22
+ def test_detect_test_credentials_when_in_production
23
+ Base.mode = :production
24
+
25
+ live_gw = PayJunctionGateway.new(
26
+ :login => "l",
27
+ :password => "p"
28
+ )
29
+ assert_false live_gw.test?
23
30
 
31
+ test_gw = PayJunctionGateway.new(
32
+ :login => "pj-ql-01",
33
+ :password => "pj-ql-01p"
34
+ )
35
+ assert test_gw.test?
24
36
  end
25
-
26
- def test_purchase_success
27
- @creditcard.number = '1'
37
+
38
+ def test_successful_authorization
39
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
40
+ response = @gateway.authorize(@amount, @credit_card, @options)
41
+ assert_success response
42
+ assert_equal PayJunctionGateway::SUCCESS_MESSAGE, response.message
43
+ end
44
+
45
+ def test_failed_authorization
46
+ @gateway.expects(:ssl_post).returns(failed_authorization_response)
47
+ response = @gateway.authorize(@amount, @credit_card, @options)
48
+ assert_failure response
49
+ assert_equal PayJunctionGateway::DECLINE_CODES['FE'], response.message
50
+ end
51
+
52
+ def test_avs_result_not_supported
53
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
28
54
 
29
- assert response = @gateway.purchase(Money.new(100), @creditcard)
30
- assert_equal Response, response.class
31
- assert_equal '#0001', response.params['receiptid']
32
- assert_equal true, response.success?
55
+ response = @gateway.purchase(@amount, @credit_card, @options)
56
+ assert_nil response.avs_result['code']
33
57
  end
34
-
35
- def test_purchase_error
36
- @creditcard.number = '2'
37
-
38
- assert response = @gateway.purchase(Money.new(100), @creditcard)
39
- assert_equal Response, response.class
40
- assert_equal '#0001', response.params['receiptid']
41
- assert_equal false, response.success?
42
-
58
+
59
+ def test_cvv_result_not_supported
60
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
61
+
62
+ response = @gateway.purchase(@amount, @credit_card, @options)
63
+ assert_nil response.cvv_result['code']
43
64
  end
65
+
66
+ private
67
+ def successful_authorization_response
68
+ <<-RESPONSE
69
+ dc_merchant_name=PayJunction - (demo)dc_merchant_address=3 W. Carrillodc_merchant_city=Santa Barbaradc_merchant_state=CAdc_merchant_zip=93101dc_merchant_phone=800-601-0230dc_device_id=1174dc_transaction_date=2007-11-28 19:22:33.791634dc_transaction_action=chargedc_approval_code=TAS193dc_response_code=00dc_response_message=APPROVAL TAS193 dc_transaction_id=3144302dc_posture=holddc_invoice_number=9f76c4e4bd66a36dc5aeb4bd7b3a02fadc_notes=--START QUICK-LINK DEBUG--
70
+ ----Vars Received----
71
+ dc_expiration_month =&gt; *
72
+ dc_expiration_year =&gt; *
73
+ dc_invoice =&gt; 9f76c4e4bd66a36dc5aeb4bd7b3a02fa
74
+ dc_logon =&gt; pj-ql-01
75
+ dc_name =&gt; Cody Fauser
76
+ dc_number =&gt; *
77
+ dc_password =&gt; *
78
+ dc_transaction_amount =&gt; 4.00
79
+ dc_transaction_type =&gt; AUTHORIZATION
80
+ dc_verification_number =&gt; *
81
+ dc_version =&gt; 1.2
82
+ ----End Vars----
44
83
 
45
- def test_purchase_exceptions
46
- @creditcard.number = '3'
47
-
48
- assert_raise(Error) do
49
- assert response = @gateway.purchase(Money.new(100), @creditcard)
50
- end
51
- end
52
-
53
- def test_amount_style
54
- assert_equal '10.34', @gateway.send(:amount, Money.us_dollar(1034))
55
- assert_equal '10.34', @gateway.send(:amount, 1034)
56
-
57
- assert_raise(ArgumentError) do
58
- @gateway.send(:amount, '10.34')
59
- end
84
+ ----Start Response Sent----
85
+ dc_merchant_name=PayJunction - (demo)
86
+ dc_merchant_address=3 W. Carrillo
87
+ dc_merchant_city=Santa Barbara
88
+ dc_merchant_state=CA
89
+ dc_merchant_zip=93101
90
+ dc_merchant_phone=800-601-0230
91
+ dc_device_id=1174
92
+ dc_transaction_date=2007-11-28 19:22:33.791634
93
+ dc_transaction_action=charge
94
+ dc_approval_code=TAS193
95
+ dc_response_code=00
96
+ dc_response_message=APPROVAL TAS193
97
+ dc_transaction_id=3144302
98
+ dc_posture=hold
99
+ dc_invoice_number=9f76c4e4bd66a36dc5aeb4bd7b3a02fa
100
+ dc_notes=null
101
+ dc_card_name=cody fauser
102
+ dc_card_brand=VSA
103
+ dc_card_exp=XX/XX
104
+ dc_card_number=XXXX-XXXX-XXXX-3344
105
+ dc_card_address=
106
+ dc_card_city=
107
+ dc_card_zipcode=
108
+ dc_card_state=
109
+ dc_card_country=
110
+ dc_base_amount=4.00
111
+ dc_tax_amount=0.00
112
+ dc_capture_amount=4.00
113
+ dc_cashback_amount=0.00
114
+ dc_shipping_amount=0.00
115
+ ----End Response Sent----
116
+ dc_card_name=cody fauserdc_card_brand=VSAdc_card_exp=XX/XXdc_card_number=XXXX-XXXX-XXXX-3344dc_card_address=dc_card_city=dc_card_zipcode=dc_card_state=dc_card_country=dc_base_amount=4.00dc_tax_amount=0.00dc_capture_amount=4.00dc_cashback_amount=0.00dc_shipping_amount=0.00
117
+ RESPONSE
118
+ end
119
+
120
+ def failed_authorization_response
121
+ 'dc_merchant_name=dc_merchant_address=dc_merchant_city=dc_merchant_state=dc_merchant_zip=dc_merchant_phone=dc_device_id=dc_transaction_date=dc_transaction_action=dc_approval_code=dc_response_code=FEdc_response_message=dc_number [Input is invalid. The credit card number is bad.], System [error.System], dc_transaction_id=dc_posture=dc_invoice_number=dc_notes=dc_card_name=dc_card_brand=dc_card_exp=dc_card_number=dc_card_address=dc_card_city=dc_card_zipcode=dc_card_state=dc_card_country=dc_base_amount=dc_tax_amount=dc_capture_amount=dc_cashback_amount=dc_shipping_amount='
60
122
  end
61
123
  end
@@ -0,0 +1,71 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+
3
+ class PaySecureTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @gateway = PaySecureGateway.new(
7
+ :login => 'login',
8
+ :password => 'password'
9
+ )
10
+
11
+ @credit_card = credit_card
12
+ @options = {
13
+ :order_id => '1000',
14
+ :billing_address => address,
15
+ :description => 'Test purchase'
16
+ }
17
+ @amount = 100
18
+ end
19
+
20
+ def test_successful_purchase
21
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
22
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
23
+ assert_instance_of Response, response
24
+ assert_success response
25
+ assert_equal '2778;SimProxy 54041670', response.authorization
26
+ assert response.test?
27
+ end
28
+
29
+ def test_failed_purchase
30
+ @gateway.expects(:ssl_post).returns(failure_response)
31
+ assert response = @gateway.purchase(@amount, @credit_card, @options)
32
+ assert_instance_of Response, response
33
+ assert_equal "Field value '8f796cb29a1be32af5ce12d4ca7425c2' does not match required format.", response.message
34
+ assert_failure response
35
+ end
36
+
37
+ def test_avs_result_not_supported
38
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
39
+
40
+ response = @gateway.purchase(@amount, @credit_card, @options)
41
+ assert_nil response.avs_result['code']
42
+ end
43
+
44
+ def test_cvv_result_not_supported
45
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
46
+
47
+ response = @gateway.purchase(@amount, @credit_card, @options)
48
+ assert_nil response.cvv_result['code']
49
+ end
50
+
51
+ private
52
+ def successful_purchase_response
53
+ <<-RESPONSE
54
+ Status: Accepted
55
+ SettlementDate: 2007-10-09
56
+ AUTHNUM: 2778
57
+ ErrorString: No Error
58
+ CardBin: 1
59
+ ERROR: 0
60
+ TransID: SimProxy 54041670
61
+ RESPONSE
62
+ end
63
+
64
+ def failure_response
65
+ <<-RESPONSE
66
+ Status: Declined
67
+ ErrorString: Field value '8f796cb29a1be32af5ce12d4ca7425c2' does not match required format.
68
+ ERROR: 1
69
+ RESPONSE
70
+ end
71
+ end
@@ -51,14 +51,6 @@ class PayflowExpressTest < Test::Unit::TestCase
51
51
  assert !gateway.test?
52
52
  end
53
53
 
54
- def test_class_certification_id
55
- assert_equal '55d64dfec398cbbe66c1bf843cbad9', PayflowExpressGateway.certification_id
56
- PayflowExpressGateway.certification_id = 'test'
57
- assert_equal 'test', PayflowExpressGateway.certification_id
58
- gateway = PayflowExpressGateway.new(:login => 'test', :password => 'test')
59
- assert_equal 'test', gateway.certification_id
60
- end
61
-
62
54
  def test_live_redirect_url
63
55
  Base.gateway_mode = :production
64
56
  assert_equal 'https://www.paypal.com/cgibin/webscr?cmd=_express-checkout&token=1234567890', @gateway.redirect_url_for('1234567890')
@@ -2,49 +2,60 @@ require File.dirname(__FILE__) + '/../../test_helper'
2
2
 
3
3
  class PayflowTest < Test::Unit::TestCase
4
4
  def setup
5
- Base.gateway_mode = :test
5
+ Base.mode = :test
6
6
 
7
7
  @gateway = PayflowGateway.new(
8
8
  :login => 'LOGIN',
9
9
  :password => 'PASSWORD'
10
10
  )
11
-
12
- @creditcard = credit_card('4242424242424242')
13
-
14
- @address = { :address1 => '1234 My Street',
15
- :address2 => 'Apt 1',
16
- :company => 'Widgets Inc',
17
- :city => 'Ottawa',
18
- :state => 'ON',
19
- :zip => 'K1C2N6',
20
- :country => 'Canada',
21
- :phone => '(555)555-5555'
22
- }
23
- end
24
-
25
- def teardown
26
- Base.gateway_mode = :test
27
- PayflowGateway.certification_id = nil
11
+
12
+ @amount = 100
13
+ @credit_card = credit_card('4242424242424242')
14
+ @options = { :billing_address => address }
28
15
  end
29
16
 
30
- def test_successful_request
31
- @creditcard.number = 1
32
- assert response = @gateway.purchase(100, @creditcard, {})
17
+ def test_successful_authorization
18
+ @gateway.stubs(:ssl_post).returns(successful_authorization_response)
19
+
20
+ assert response = @gateway.authorize(@amount, @credit_card, @options)
21
+ assert_equal "Approved", response.message
33
22
  assert_success response
34
- assert_equal '5555', response.authorization
35
23
  assert response.test?
24
+ assert_equal "VUJN1A6E11D9", response.authorization
36
25
  end
37
-
38
- def test_unsuccessful_request
39
- @creditcard.number = 2
40
- assert response = @gateway.purchase(100, @creditcard, {})
26
+
27
+ def test_failed_authorization
28
+ @gateway.stubs(:ssl_post).returns(failed_authorization_response)
29
+
30
+ assert response = @gateway.authorize(@amount, @credit_card, @options)
31
+ assert_equal "Declined", response.message
41
32
  assert_failure response
42
33
  assert response.test?
43
34
  end
44
-
45
- def test_request_error
46
- @creditcard.number = 3
47
- assert_raise(Error){ @gateway.purchase(100, @creditcard, {}) }
35
+
36
+ def test_avs_result
37
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
38
+
39
+ response = @gateway.purchase(@amount, @credit_card, @options)
40
+ assert_equal 'Y', response.avs_result['code']
41
+ assert_equal 'Y', response.avs_result['street_match']
42
+ assert_equal 'Y', response.avs_result['postal_match']
43
+ end
44
+
45
+ def test_partial_avs_match
46
+ @gateway.expects(:ssl_post).returns(successful_duplicate_response)
47
+
48
+ response = @gateway.purchase(@amount, @credit_card, @options)
49
+ assert_equal 'A', response.avs_result['code']
50
+ assert_equal 'Y', response.avs_result['street_match']
51
+ assert_equal 'N', response.avs_result['postal_match']
52
+ end
53
+
54
+ def test_cvv_result
55
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
56
+
57
+ response = @gateway.purchase(@amount, @credit_card, @options)
58
+ assert_equal 'M', response.cvv_result['code']
48
59
  end
49
60
 
50
61
  def test_using_test_mode
@@ -74,19 +85,6 @@ class PayflowTest < Test::Unit::TestCase
74
85
  assert !gateway.test?
75
86
  end
76
87
 
77
- def test_certification_id_class_accessor
78
- PayflowGateway.certification_id = 'test'
79
- assert_equal 'test', PayflowGateway.certification_id
80
- gateway = PayflowGateway.new(:login => 'test', :password => 'test')
81
- assert_equal 'test', gateway.options[:certification_id]
82
- end
83
-
84
- def test_passed_in_certificate_overrides_class_accessor
85
- PayflowGateway.certification_id = 'test'
86
- gateway = PayflowGateway.new(:login => 'test', :password => 'test', :certification_id => 'Clobber')
87
- assert_equal 'Clobber', gateway.options[:certification_id]
88
- end
89
-
90
88
  def test_partner_class_accessor
91
89
  assert_equal 'PayPal', PayflowGateway.partner
92
90
  gateway = PayflowGateway.new(:login => 'test', :password => 'test')
@@ -127,7 +125,7 @@ class PayflowTest < Test::Unit::TestCase
127
125
 
128
126
  def test_initial_recurring_transaction_missing_parameters
129
127
  assert_raises ArgumentError do
130
- response = @gateway.recurring(1000, @creditcard,
128
+ response = @gateway.recurring(@amount, @credit_card,
131
129
  :periodicity => :monthly,
132
130
  :initial_transaction => { }
133
131
  )
@@ -136,7 +134,7 @@ class PayflowTest < Test::Unit::TestCase
136
134
 
137
135
  def test_initial_purchase_missing_amount
138
136
  assert_raises ArgumentError do
139
- response = @gateway.recurring(1000, @creditcard,
137
+ response = @gateway.recurring(@amount, @credit_card,
140
138
  :periodicity => :monthly,
141
139
  :initial_transaction => { :amount => :purchase }
142
140
  )
@@ -146,7 +144,7 @@ class PayflowTest < Test::Unit::TestCase
146
144
  def test_successful_recurring_action
147
145
  @gateway.stubs(:ssl_post).returns(successful_recurring_response)
148
146
 
149
- response = @gateway.recurring(1000, @creditcard, :periodicity => :monthly)
147
+ response = @gateway.recurring(@amount, @credit_card, :periodicity => :monthly)
150
148
 
151
149
  assert_instance_of PayflowResponse, response
152
150
  assert_success response
@@ -155,14 +153,18 @@ class PayflowTest < Test::Unit::TestCase
155
153
  assert_equal "R7960E739F80", response.authorization
156
154
  end
157
155
 
158
- def test_successful_authorization
159
- @gateway.stubs(:ssl_post).returns(successful_authorization_response)
156
+ def test_recurring_profile_payment_history_inquiry
157
+ @gateway.stubs(:ssl_post).returns(successful_payment_history_recurring_response)
160
158
 
161
- assert response = @gateway.authorize(100, @creditcard, { :address => @address })
162
- assert_equal "Approved", response.message
163
- assert_success response
164
- assert response.test?
165
- assert_equal "VUJN1A6E11D9", response.authorization
159
+ response = @gateway.recurring_inquiry('RT0000000009', :history => true)
160
+ assert_equal 1, response.payment_history.size
161
+ assert_equal '1', response.payment_history.first['payment_num']
162
+ assert_equal '7.25', response.payment_history.first['amt']
163
+ end
164
+
165
+ def test_recurring_profile_payment_history_inquiry_contains_the_proper_xml
166
+ request = @gateway.send( :build_recurring_request, :inquiry, nil, :profile_id => 'RT0000000009', :history => true)
167
+ assert_match %r(<PaymentHistory>Y</PaymentHistory), request
166
168
  end
167
169
 
168
170
  def test_format_issue_number
@@ -178,20 +180,16 @@ class PayflowTest < Test::Unit::TestCase
178
180
  assert_equal '01', node.attributes['Value']
179
181
  end
180
182
 
181
- def test_eof_received_on_timeout
182
- Net::HTTP.any_instance.stubs(:post).raises(EOFError, "end of file reached")
183
+ def test_duplicate_response_flag
184
+ @gateway.expects(:ssl_post).returns(successful_duplicate_response)
183
185
 
184
- assert_raises(ActiveMerchant::ConnectionError) do
185
- @gateway.purchase(100, @creditcard, {})
186
- end
186
+ response = @gateway.authorize(@amount, @credit_card, @options)
187
+ assert_success response
188
+ assert response.params['duplicate']
187
189
  end
188
190
 
189
- def test__received_on_timeout
190
- Net::HTTP.any_instance.stubs(:post).raises(Errno::ECONNREFUSED, "Connection refused - connect(2)")
191
-
192
- assert_raises(ActiveMerchant::ConnectionError) do
193
- @gateway.purchase(100, @creditcard, {})
194
- end
191
+ def test_ensure_gateway_uses_safe_retry
192
+ assert @gateway.retry_safe
195
193
  end
196
194
 
197
195
  private
@@ -201,9 +199,30 @@ class PayflowTest < Test::Unit::TestCase
201
199
  <Result>0</Result>
202
200
  <Message>Approved</Message>
203
201
  <Partner>paypal</Partner>
204
- <RpRef>R7960E739F80</RpRef>
202
+ <RPRef>R7960E739F80</RPRef>
203
+ <Vendor>ActiveMerchant</Vendor>
204
+ <ProfileId>RT0000000009</ProfileId>
205
+ </ResponseData>
206
+ XML
207
+ end
208
+
209
+ def successful_payment_history_recurring_response
210
+ <<-XML
211
+ <ResponseData>
212
+ <Result>0</Result>
213
+ <Partner>paypal</Partner>
214
+ <RPRef>R7960E739F80</RPRef>
205
215
  <Vendor>ActiveMerchant</Vendor>
206
216
  <ProfileId>RT0000000009</ProfileId>
217
+ <RPPaymentResult>
218
+ <PaymentNum>1</PaymentNum>
219
+ <PNRef>V18A0D3048AF</PNRef>
220
+ <TransTime>12-Jan-08 04:30 AM</TransTime>
221
+ <Result>0</Result>
222
+ <Tender>C</Tender>
223
+ <Amt Currency="7.25"></Amt>
224
+ <TransState>6</TransState>
225
+ </RPPaymentResult>
207
226
  </ResponseData>
208
227
  XML
209
228
  end
@@ -227,4 +246,56 @@ class PayflowTest < Test::Unit::TestCase
227
246
  </ResponseData>
228
247
  XML
229
248
  end
249
+
250
+ def failed_authorization_response
251
+ <<-XML
252
+ <ResponseData>
253
+ <Result>12</Result>
254
+ <Message>Declined</Message>
255
+ <Partner>verisign</Partner>
256
+ <HostCode>000</HostCode>
257
+ <ResponseText>AP</ResponseText>
258
+ <PnRef>VUJN1A6E11D9</PnRef>
259
+ <IavsResult>N</IavsResult>
260
+ <ZipMatch>Match</ZipMatch>
261
+ <AuthCode>094016</AuthCode>
262
+ <Vendor>ActiveMerchant</Vendor>
263
+ <AvsResult>Y</AvsResult>
264
+ <StreetMatch>Match</StreetMatch>
265
+ <CvResult>Match</CvResult>
266
+ </ResponseData>
267
+ XML
268
+ end
269
+
270
+ def successful_duplicate_response
271
+ <<-XML
272
+ <?xml version="1.0"?>
273
+ <XMLPayResponse xmlns="http://www.verisign.com/XMLPay">
274
+ <ResponseData>
275
+ <Vendor>ActiveMerchant</Vendor>
276
+ <Partner>paypal</Partner>
277
+ <TransactionResults>
278
+ <TransactionResult Duplicate="true">
279
+ <Result>0</Result>
280
+ <ProcessorResult>
281
+ <AVSResult>A</AVSResult>
282
+ <CVResult>M</CVResult>
283
+ <HostCode>A</HostCode>
284
+ </ProcessorResult>
285
+ <IAVSResult>N</IAVSResult>
286
+ <AVSResult>
287
+ <StreetMatch>Match</StreetMatch>
288
+ <ZipMatch>No Match</ZipMatch>
289
+ </AVSResult>
290
+ <CVResult>Match</CVResult>
291
+ <Message>Approved</Message>
292
+ <PNRef>V18A0CBB04CF</PNRef>
293
+ <AuthCode>692PNI</AuthCode>
294
+ <ExtData Name="DATE_TO_SETTLE" Value="2007-11-28 10:53:50"/>
295
+ </TransactionResult>
296
+ </TransactionResults>
297
+ </ResponseData>
298
+ </XMLPayResponse>
299
+ XML
300
+ end
230
301
  end