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,33 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class CVVResultTest < Test::Unit::TestCase
4
+ def test_nil_data
5
+ result = CVVResult.new(nil)
6
+ assert_nil result.code
7
+ assert_nil result.message
8
+ end
9
+
10
+ def test_blank_data
11
+ result = CVVResult.new('')
12
+ assert_nil result.code
13
+ assert_nil result.message
14
+ end
15
+
16
+ def test_successful_match
17
+ result = CVVResult.new('M')
18
+ assert_equal 'M', result.code
19
+ assert_equal CVVResult.messages['M'], result.message
20
+ end
21
+
22
+ def test_failed_match
23
+ result = CVVResult.new('N')
24
+ assert_equal 'N', result.code
25
+ assert_equal CVVResult.messages['N'], result.message
26
+ end
27
+
28
+ def test_to_hash
29
+ result = CVVResult.new('M').to_hash
30
+ assert_equal 'M', result['code']
31
+ assert_equal CVVResult.messages['M'], result['message']
32
+ end
33
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class ExpiryDateTest < Test::Unit::TestCase
4
+ def test_should_be_expired
5
+ last_month = 2.months.ago
6
+ date = CreditCard::ExpiryDate.new(last_month.month, last_month.year)
7
+ assert date.expired?
8
+ end
9
+
10
+ def test_today_should_not_be_expired
11
+ today = Time.now
12
+ date = CreditCard::ExpiryDate.new(today.month, today.year)
13
+ assert_false date.expired?
14
+ end
15
+
16
+ def test_dates_in_the_future_should_not_be_expired
17
+ next_month = 1.month.from_now
18
+ date = CreditCard::ExpiryDate.new(next_month.month, next_month.year)
19
+ assert_false date.expired?
20
+ end
21
+ end
@@ -6,43 +6,36 @@ class AuthorizeNetTest < Test::Unit::TestCase
6
6
  :login => 'X',
7
7
  :password => 'Y'
8
8
  )
9
-
10
- @creditcard = credit_card('4242424242424242')
11
- end
12
-
13
- def test_purchase_success
14
- @creditcard.number = 1
15
-
16
- assert response = @gateway.purchase(100, @creditcard)
17
- assert_equal Response, response.class
18
- assert_equal '#0001', response.params['receiptid']
19
- assert_equal true, response.success?
9
+ @amount = 100
10
+ @credit_card = credit_card
11
+ @subscription_id = '100748'
20
12
  end
21
13
 
22
- def test_purchase_error
23
- @creditcard.number = 2
24
-
25
- assert response = @gateway.purchase(100, @creditcard, :order_id => 1)
26
- assert_equal Response, response.class
27
- assert_equal '#0001', response.params['receiptid']
28
- assert_equal false, response.success?
29
-
14
+ def test_successful_authorization
15
+ @gateway.expects(:ssl_post).returns(successful_authorization_response)
16
+
17
+ assert response = @gateway.authorize(@amount, @credit_card)
18
+ assert_instance_of Response, response
19
+ assert_success response
20
+ assert_equal '508141794', response.authorization
30
21
  end
31
22
 
32
- def test_purchase_exceptions
33
- @creditcard.number = 3
34
-
35
- assert_raise(Error) do
36
- assert response = @gateway.purchase(100, @creditcard, :order_id => 1)
37
- end
23
+ def test_successful_purchase
24
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
25
+
26
+ assert response = @gateway.purchase(@amount, @credit_card)
27
+ assert_instance_of Response, response
28
+ assert_success response
29
+ assert_equal '508141795', response.authorization
38
30
  end
39
31
 
40
- def test_amount_style
41
- assert_equal '10.34', @gateway.send(:amount, 1034)
42
-
43
- assert_raise(ArgumentError) do
44
- @gateway.send(:amount, '10.34')
45
- end
32
+ def test_failed_authorization
33
+ @gateway.expects(:ssl_post).returns(failed_authorization_response)
34
+
35
+ assert response = @gateway.authorize(@amount, @credit_card)
36
+ assert_instance_of Response, response
37
+ assert_failure response
38
+ assert_equal '508141794', response.authorization
46
39
  end
47
40
 
48
41
  def test_add_address_outsite_north_america
@@ -53,8 +46,7 @@ class AuthorizeNetTest < Test::Unit::TestCase
53
46
  assert_equal ["address", "city", "company", "country", "phone", "state", "zip"], result.stringify_keys.keys.sort
54
47
  assert_equal 'n/a', result[:state]
55
48
  assert_equal '164 Waverley Street', result[:address]
56
- assert_equal 'DE', result[:country]
57
-
49
+ assert_equal 'DE', result[:country]
58
50
  end
59
51
 
60
52
  def test_add_address
@@ -84,7 +76,7 @@ class AuthorizeNetTest < Test::Unit::TestCase
84
76
  def test_purchase_is_valid_csv
85
77
  params = { :amount => '1.01' }
86
78
 
87
- @gateway.send(:add_creditcard, params, @creditcard)
79
+ @gateway.send(:add_creditcard, params, @credit_card)
88
80
 
89
81
  assert data = @gateway.send(:post_data, 'AUTH_ONLY', params)
90
82
  assert_equal post_data_fixture.size, data.size
@@ -95,7 +87,7 @@ class AuthorizeNetTest < Test::Unit::TestCase
95
87
  :amount => "1.01",
96
88
  }
97
89
 
98
- @gateway.send(:add_creditcard, params, @creditcard)
90
+ @gateway.send(:add_creditcard, params, @credit_card)
99
91
 
100
92
  assert data = @gateway.send(:post_data, 'AUTH_ONLY', params)
101
93
  minimum_requirements.each do |key|
@@ -103,14 +95,19 @@ class AuthorizeNetTest < Test::Unit::TestCase
103
95
  end
104
96
  end
105
97
 
106
- def test_credit_success
107
- assert response = @gateway.credit(100, '123456789', :card_number => '1')
98
+ def test_successful_credit
99
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
100
+ assert response = @gateway.credit(@amount, '123456789', :card_number => @credit_card.number)
108
101
  assert_success response
102
+ assert_equal 'This transaction has been approved', response.message
109
103
  end
110
104
 
111
- def test_credit_failure
112
- assert response = @gateway.credit(100, '123456789', :card_number => '2')
105
+ def test_failed_credit
106
+ @gateway.expects(:ssl_post).returns(failed_credit_response)
107
+
108
+ assert response = @gateway.credit(@amount, '123456789', :card_number => @credit_card.number)
113
109
  assert_failure response
110
+ assert_equal 'The referenced transaction does not meet the criteria for issuing a credit', response.message
114
111
  end
115
112
 
116
113
  def test_supported_countries
@@ -126,6 +123,82 @@ class AuthorizeNetTest < Test::Unit::TestCase
126
123
  assert_equal '', @gateway.send(:message_from, {})
127
124
  end
128
125
  end
126
+
127
+ def test_response_under_review_by_fraud_service
128
+ @gateway.expects(:ssl_post).returns(fraud_review_response)
129
+
130
+ response = @gateway.purchase(@amount, @credit_card)
131
+ assert_failure response
132
+ assert response.fraud_review?
133
+ assert_equal "Thank you! For security reasons your order is currently being reviewed", response.message
134
+ end
135
+
136
+ def test_avs_result
137
+ @gateway.expects(:ssl_post).returns(fraud_review_response)
138
+
139
+ response = @gateway.purchase(@amount, @credit_card)
140
+ assert_equal 'X', response.avs_result['code']
141
+ end
142
+
143
+ def test_cvv_result
144
+ @gateway.expects(:ssl_post).returns(fraud_review_response)
145
+
146
+ response = @gateway.purchase(@amount, @credit_card)
147
+ assert_equal 'M', response.cvv_result['code']
148
+ end
149
+
150
+ # ARB Unit Tests
151
+
152
+ def test_successful_recurring
153
+ @gateway.expects(:ssl_post).returns(successful_recurring_response)
154
+
155
+ response = @gateway.recurring(@amount, @credit_card,
156
+ :billing_address => address.merge(:first_name => 'Jim', :last_name => 'Smith'),
157
+ :interval => {
158
+ :length => 10,
159
+ :unit => :days
160
+ },
161
+ :duration => {
162
+ :start_date => Time.now.strftime("%Y-%m-%d"),
163
+ :occurrences => 30
164
+ }
165
+ )
166
+
167
+ assert_instance_of Response, response
168
+ assert response.success?
169
+ assert response.test?
170
+ assert_equal @subscription_id, response.authorization
171
+ end
172
+
173
+ def test_successful_update_recurring
174
+ @gateway.expects(:ssl_post).returns(successful_update_recurring_response)
175
+
176
+ response = @gateway.update_recurring(:subscription_id => @subscription_id, :amount => @amount * 2)
177
+
178
+ assert_instance_of Response, response
179
+ assert response.success?
180
+ assert response.test?
181
+ assert_equal @subscription_id, response.authorization
182
+ end
183
+
184
+ def test_successful_cancel_recurring
185
+ @gateway.expects(:ssl_post).returns(successful_cancel_recurring_response)
186
+
187
+ response = @gateway.cancel_recurring(@subscription_id)
188
+
189
+ assert_instance_of Response, response
190
+ assert response.success?
191
+ assert response.test?
192
+ assert_equal @subscription_id, response.authorization
193
+ end
194
+
195
+ def test_expdate_formatting
196
+ assert_equal '2009-09', @gateway.send(:arb_expdate, @credit_card)
197
+
198
+ assert_equal '2013-11', @gateway.send(:arb_expdate, credit_card('4111111111111111',
199
+ :month => 11,
200
+ :year => 2013))
201
+ end
129
202
 
130
203
  private
131
204
 
@@ -133,8 +206,75 @@ class AuthorizeNetTest < Test::Unit::TestCase
133
206
  'x_encap_char=%24&x_card_num=4242424242424242&x_exp_date=0806&x_card_code=123&x_type=AUTH_ONLY&x_first_name=Longbob&x_version=3.1&x_login=X&x_last_name=Longsen&x_tran_key=Y&x_relay_response=FALSE&x_delim_data=TRUE&x_delim_char=%2C&x_amount=1.01'
134
207
  end
135
208
 
136
- def minimum_requirements
209
+ def minimum_requirements
137
210
  %w(version delim_data relay_response login tran_key amount card_num exp_date type)
138
211
  end
212
+
213
+ def failed_credit_response
214
+ '$3$,$2$,$54$,$The referenced transaction does not meet the criteria for issuing a credit.$,$$,$P$,$0$,$$,$$,$1.00$,$CC$,$credit$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$39265D8BA0CDD4F045B5F4129B2AAA01$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$'
215
+ end
216
+
217
+ def successful_authorization_response
218
+ '$1$,$1$,$1$,$This transaction has been approved.$,$advE7f$,$Y$,$508141794$,$5b3fe66005f3da0ebe51$,$$,$1.00$,$CC$,$auth_only$,$$,$Longbob$,$Longsen$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$2860A297E0FE804BCB9EF8738599645C$,$P$,$2$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$'
219
+ end
220
+
221
+ def successful_purchase_response
222
+ '$1$,$1$,$1$,$This transaction has been approved.$,$d1GENk$,$Y$,$508141795$,$32968c18334f16525227$,$Store purchase$,$1.00$,$CC$,$auth_capture$,$$,$Longbob$,$Longsen$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$269862C030129C1173727CC10B1935ED$,$P$,$2$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$'
223
+ end
224
+
225
+ def failed_authorization_response
226
+ '$2$,$1$,$1$,$This transaction was declined.$,$advE7f$,$Y$,$508141794$,$5b3fe66005f3da0ebe51$,$$,$1.00$,$CC$,$auth_only$,$$,$Longbob$,$Longsen$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$2860A297E0FE804BCB9EF8738599645C$,$P$,$2$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$'
227
+ end
228
+
229
+ def fraud_review_response
230
+ "$4$,$$,$253$,$Thank you! For security reasons your order is currently being reviewed.$,$$,$X$,$0$,$$,$$,$1.00$,$$,$auth_capture$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$207BCBBF78E85CF174C87AE286B472D2$,$M$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$,$$"
231
+ end
232
+
233
+ def successful_recurring_response
234
+ <<-XML
235
+ <ARBCreateSubscriptionResponse xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
236
+ <refId>Sample</refId>
237
+ <messages>
238
+ <resultCode>Ok</resultCode>
239
+ <message>
240
+ <code>I00001</code>
241
+ <text>Successful.</text>
242
+ </message>
243
+ </messages>
244
+ <subscriptionId>#{@subscription_id}</subscriptionId>
245
+ </ARBCreateSubscriptionResponse>
246
+ XML
247
+ end
139
248
 
249
+ def successful_update_recurring_response
250
+ <<-XML
251
+ <ARBUpdateSubscriptionResponse xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
252
+ <refId>Sample</refId>
253
+ <messages>
254
+ <resultCode>Ok</resultCode>
255
+ <message>
256
+ <code>I00001</code>
257
+ <text>Successful.</text>
258
+ </message>
259
+ </messages>
260
+ <subscriptionId>#{@subscription_id}</subscriptionId>
261
+ </ARBUpdateSubscriptionResponse>
262
+ XML
263
+ end
264
+
265
+ def successful_cancel_recurring_response
266
+ <<-XML
267
+ <ARBCancelSubscriptionResponse xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
268
+ <refId>Sample</refId>
269
+ <messages>
270
+ <resultCode>Ok</resultCode>
271
+ <message>
272
+ <code>I00001</code>
273
+ <text>Successful.</text>
274
+ </message>
275
+ </messages>
276
+ <subscriptionId>#{@subscription_id}</subscriptionId>
277
+ </ARBCancelSubscriptionResponse>
278
+ XML
279
+ end
140
280
  end
@@ -4,13 +4,12 @@ class BogusTest < Test::Unit::TestCase
4
4
  def setup
5
5
  @gateway = BogusGateway.new(
6
6
  :login => 'bogus',
7
- :password => 'bogus',
8
- :test => true
7
+ :password => 'bogus'
9
8
  )
10
9
 
11
10
  @creditcard = credit_card('1')
12
11
 
13
- @response = ActiveMerchant::Billing::Response.new(true, "Transaction successful", :transid => '1')
12
+ @response = ActiveMerchant::Billing::Response.new(true, "Transaction successful", :transid => BogusGateway::AUTHORIZATION)
14
13
  end
15
14
 
16
15
  def test_authorize
@@ -8,41 +8,36 @@ class BrainTreeTest < Test::Unit::TestCase
8
8
  :password => 'PASSWORD'
9
9
  )
10
10
 
11
- @creditcard = credit_card('4242424242424242')
12
- @amount = rand(9999)+1001
13
- @address = { :address1 => '1234 My Street',
14
- :address2 => 'Apt 1',
15
- :company => 'Widgets Inc',
16
- :city => 'Ottawa',
17
- :state => 'ON',
18
- :zip => 'K1C2N6',
19
- :country => 'Canada',
20
- :phone => '(555)555-5555'
21
- }
11
+ @credit_card = credit_card('4242424242424242',
12
+ :type => 'visa'
13
+ )
14
+
15
+ @amount = 100
16
+
17
+ @options = { :billing_address => address }
22
18
  end
23
19
 
24
- def test_successful_request
25
- @creditcard.number = 1
26
- assert response = @gateway.purchase(@amount, @creditcard, {})
20
+ def test_successful_purchase
21
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
22
+
23
+ assert response = @gateway.authorize(@amount, @credit_card, @options)
24
+ assert_instance_of Response, response
27
25
  assert_success response
28
- assert_equal '5555', response.authorization
26
+ assert_equal '510695343', response.authorization
29
27
  end
30
28
 
31
- def test_unsuccessful_request
32
- @creditcard.number = 2
33
- assert response = @gateway.purchase(@amount, @creditcard, {})
29
+ def test_failed_purchase
30
+ @gateway.expects(:ssl_post).returns(failed_purchase_response)
31
+
32
+ assert response = @gateway.authorize(@amount, @credit_card, @options)
33
+ assert_instance_of Response, response
34
34
  assert_failure response
35
35
  end
36
-
37
- def test_request_error
38
- @creditcard.number = 3
39
- assert_raise(Error){ @gateway.purchase(@amount, @creditcard, {}) }
40
- end
41
36
 
42
37
  def test_add_address
43
38
  result = {}
44
39
 
45
- @gateway.send(:add_address, result,nil, :billing_address => {:address1 => '164 Waverley Street', :country => 'US', :state => 'CO'} )
40
+ @gateway.send(:add_address, result, nil, :billing_address => {:address1 => '164 Waverley Street', :country => 'US', :state => 'CO'} )
46
41
  assert_equal ["address1", "city", "company", "country", "phone", "state", "zip"], result.stringify_keys.keys.sort
47
42
  assert_equal 'CO', result[:state]
48
43
  assert_equal '164 Waverley Street', result[:address1]
@@ -51,27 +46,66 @@ class BrainTreeTest < Test::Unit::TestCase
51
46
  end
52
47
 
53
48
  def test_supported_countries
54
- assert_equal ['US'], AuthorizeNetGateway.supported_countries
49
+ assert_equal ['US'], BrainTreeGateway.supported_countries
55
50
  end
56
51
 
57
52
  def test_supported_card_types
58
- assert_equal [:visa, :master, :american_express, :discover], AuthorizeNetGateway.supported_cardtypes
53
+ assert_equal [:visa, :master, :american_express], BrainTreeGateway.supported_cardtypes
59
54
  end
60
55
 
61
56
  def test_adding_store_adds_vault_id_flag
62
57
  result = {}
63
58
 
64
- @gateway.send(:add_creditcard, result,@creditcard, :store=>true )
59
+ @gateway.send(:add_creditcard, result, @credit_card, :store => true)
65
60
  assert_equal ["ccexp", "ccnumber", "customer_vault", "cvv", "firstname", "lastname"], result.stringify_keys.keys.sort
66
61
  assert_equal 'add_customer', result[:customer_vault]
67
-
68
62
  end
63
+
69
64
  def test_blank_store_doesnt_add_vault_flag
70
65
  result = {}
71
66
 
72
- @gateway.send(:add_creditcard, result,@creditcard, {} )
67
+ @gateway.send(:add_creditcard, result, @credit_card, {} )
73
68
  assert_equal ["ccexp", "ccnumber", "cvv", "firstname", "lastname"], result.stringify_keys.keys.sort
74
69
  assert_nil result[:customer_vault]
70
+ end
71
+
72
+ def test_accept_check
73
+ post = {}
74
+ check = Check.new(:name => 'Fred Bloggs',
75
+ :routing_number => '111000025',
76
+ :account_number => '123456789012',
77
+ :account_holder_type => 'personal',
78
+ :account_type => 'checking')
79
+ @gateway.send(:add_check, post, check)
80
+ assert_equal %w[account_holder_type account_type checkaba checkaccount checkname payment], post.stringify_keys.keys.sort
81
+ end
82
+
83
+ def test_funding_source
84
+ assert_equal :check, @gateway.send(:determine_funding_source, Check.new)
85
+ assert_equal :credit_card, @gateway.send(:determine_funding_source, @credit_card)
86
+ assert_equal :vault, @gateway.send(:determine_funding_source, '12345')
87
+ end
88
+
89
+ def test_avs_result
90
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
91
+
92
+ response = @gateway.purchase(@amount, @credit_card)
93
+ assert_equal 'N', response.avs_result['code']
94
+ end
95
+
96
+ def test_cvv_result
97
+ @gateway.expects(:ssl_post).returns(successful_purchase_response)
75
98
 
99
+ response = @gateway.purchase(@amount, @credit_card)
100
+ assert_equal 'N', response.cvv_result['code']
101
+ end
102
+
103
+ private
104
+ def successful_purchase_response
105
+ 'response=1&responsetext=SUCCESS&authcode=123456&transactionid=510695343&avsresponse=N&cvvresponse=N&orderid=ea1e0d50dcc8cfc6e4b55650c592097e&type=sale&response_code=100'
106
+ end
107
+
108
+ def failed_purchase_response
109
+ 'response=2&responsetext=DECLINE&authcode=&transactionid=510695919&avsresponse=N&cvvresponse=N&orderid=50357660b0b3ef16f72a3d3b83c46983&type=sale&response_code=200'
76
110
  end
77
111
  end