merb_merchant 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (273) hide show
  1. data/CHANGELOG +421 -0
  2. data/CONTRIBUTERS +90 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README +131 -0
  5. data/Rakefile +129 -0
  6. data/init.rb +3 -0
  7. data/lib/certs/cacert.pem +7815 -0
  8. data/lib/core_ext/delegating_attributes.rb +76 -0
  9. data/lib/core_ext/hash_ext.rb +35 -0
  10. data/lib/core_ext/inheritable_attributes.rb +145 -0
  11. data/lib/core_ext/time_dsl.rb +59 -0
  12. data/lib/merb_merchant.rb +96 -0
  13. data/lib/merb_merchant/billing/avs_result.rb +95 -0
  14. data/lib/merb_merchant/billing/base.rb +71 -0
  15. data/lib/merb_merchant/billing/check.rb +68 -0
  16. data/lib/merb_merchant/billing/credit_card.rb +157 -0
  17. data/lib/merb_merchant/billing/credit_card_formatting.rb +21 -0
  18. data/lib/merb_merchant/billing/credit_card_methods.rb +125 -0
  19. data/lib/merb_merchant/billing/cvv_result.rb +38 -0
  20. data/lib/merb_merchant/billing/expiry_date.rb +28 -0
  21. data/lib/merb_merchant/billing/gateway.rb +162 -0
  22. data/lib/merb_merchant/billing/gateways.rb +3 -0
  23. data/lib/merb_merchant/billing/gateways/authorize_net.rb +646 -0
  24. data/lib/merb_merchant/billing/gateways/authorize_net_cim.rb +702 -0
  25. data/lib/merb_merchant/billing/gateways/beanstream.rb +102 -0
  26. data/lib/merb_merchant/billing/gateways/beanstream/beanstream_core.rb +233 -0
  27. data/lib/merb_merchant/billing/gateways/beanstream_interac.rb +54 -0
  28. data/lib/merb_merchant/billing/gateways/bogus.rb +98 -0
  29. data/lib/merb_merchant/billing/gateways/braintree.rb +222 -0
  30. data/lib/merb_merchant/billing/gateways/card_stream.rb +229 -0
  31. data/lib/merb_merchant/billing/gateways/cyber_source.rb +406 -0
  32. data/lib/merb_merchant/billing/gateways/data_cash.rb +595 -0
  33. data/lib/merb_merchant/billing/gateways/efsnet.rb +229 -0
  34. data/lib/merb_merchant/billing/gateways/eway.rb +272 -0
  35. data/lib/merb_merchant/billing/gateways/exact.rb +222 -0
  36. data/lib/merb_merchant/billing/gateways/linkpoint.rb +396 -0
  37. data/lib/merb_merchant/billing/gateways/modern_payments.rb +36 -0
  38. data/lib/merb_merchant/billing/gateways/modern_payments_cim.rb +214 -0
  39. data/lib/merb_merchant/billing/gateways/moneris.rb +205 -0
  40. data/lib/merb_merchant/billing/gateways/net_registry.rb +189 -0
  41. data/lib/merb_merchant/billing/gateways/netbilling.rb +168 -0
  42. data/lib/merb_merchant/billing/gateways/pay_junction.rb +392 -0
  43. data/lib/merb_merchant/billing/gateways/pay_secure.rb +120 -0
  44. data/lib/merb_merchant/billing/gateways/payflow.rb +236 -0
  45. data/lib/merb_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
  46. data/lib/merb_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
  47. data/lib/merb_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
  48. data/lib/merb_merchant/billing/gateways/payflow_express.rb +138 -0
  49. data/lib/merb_merchant/billing/gateways/payflow_express_uk.rb +15 -0
  50. data/lib/merb_merchant/billing/gateways/payflow_uk.rb +21 -0
  51. data/lib/merb_merchant/billing/gateways/payment_express.rb +241 -0
  52. data/lib/merb_merchant/billing/gateways/paypal.rb +108 -0
  53. data/lib/merb_merchant/billing/gateways/paypal/paypal_common_api.rb +325 -0
  54. data/lib/merb_merchant/billing/gateways/paypal/paypal_express_response.rb +38 -0
  55. data/lib/merb_merchant/billing/gateways/paypal_ca.rb +13 -0
  56. data/lib/merb_merchant/billing/gateways/paypal_express.rb +130 -0
  57. data/lib/merb_merchant/billing/gateways/paypal_express_common.rb +20 -0
  58. data/lib/merb_merchant/billing/gateways/plugnpay.rb +292 -0
  59. data/lib/merb_merchant/billing/gateways/protx.rb +284 -0
  60. data/lib/merb_merchant/billing/gateways/psigate.rb +214 -0
  61. data/lib/merb_merchant/billing/gateways/psl_card.rb +306 -0
  62. data/lib/merb_merchant/billing/gateways/quickpay.rb +213 -0
  63. data/lib/merb_merchant/billing/gateways/realex.rb +200 -0
  64. data/lib/merb_merchant/billing/gateways/sage.rb +146 -0
  65. data/lib/merb_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
  66. data/lib/merb_merchant/billing/gateways/sage/sage_core.rb +110 -0
  67. data/lib/merb_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
  68. data/lib/merb_merchant/billing/gateways/secure_pay.rb +31 -0
  69. data/lib/merb_merchant/billing/gateways/secure_pay_au.rb +157 -0
  70. data/lib/merb_merchant/billing/gateways/secure_pay_tech.rb +113 -0
  71. data/lib/merb_merchant/billing/gateways/skip_jack.rb +439 -0
  72. data/lib/merb_merchant/billing/gateways/trans_first.rb +127 -0
  73. data/lib/merb_merchant/billing/gateways/trust_commerce.rb +418 -0
  74. data/lib/merb_merchant/billing/gateways/usa_epay.rb +194 -0
  75. data/lib/merb_merchant/billing/gateways/verifi.rb +228 -0
  76. data/lib/merb_merchant/billing/gateways/viaklix.rb +165 -0
  77. data/lib/merb_merchant/billing/gateways/wirecard.rb +305 -0
  78. data/lib/merb_merchant/billing/integrations.rb +22 -0
  79. data/lib/merb_merchant/billing/integrations/action_view_helper.rb +79 -0
  80. data/lib/merb_merchant/billing/integrations/bogus.rb +29 -0
  81. data/lib/merb_merchant/billing/integrations/bogus/helper.rb +17 -0
  82. data/lib/merb_merchant/billing/integrations/bogus/notification.rb +11 -0
  83. data/lib/merb_merchant/billing/integrations/bogus/return.rb +10 -0
  84. data/lib/merb_merchant/billing/integrations/chronopay.rb +29 -0
  85. data/lib/merb_merchant/billing/integrations/chronopay/helper.rb +81 -0
  86. data/lib/merb_merchant/billing/integrations/chronopay/notification.rb +156 -0
  87. data/lib/merb_merchant/billing/integrations/chronopay/return.rb +10 -0
  88. data/lib/merb_merchant/billing/integrations/gestpay.rb +32 -0
  89. data/lib/merb_merchant/billing/integrations/gestpay/common.rb +42 -0
  90. data/lib/merb_merchant/billing/integrations/gestpay/helper.rb +70 -0
  91. data/lib/merb_merchant/billing/integrations/gestpay/notification.rb +83 -0
  92. data/lib/merb_merchant/billing/integrations/gestpay/return.rb +10 -0
  93. data/lib/merb_merchant/billing/integrations/helper.rb +93 -0
  94. data/lib/merb_merchant/billing/integrations/hi_trust.rb +26 -0
  95. data/lib/merb_merchant/billing/integrations/hi_trust/helper.rb +58 -0
  96. data/lib/merb_merchant/billing/integrations/hi_trust/notification.rb +59 -0
  97. data/lib/merb_merchant/billing/integrations/hi_trust/return.rb +67 -0
  98. data/lib/merb_merchant/billing/integrations/nochex.rb +101 -0
  99. data/lib/merb_merchant/billing/integrations/nochex/helper.rb +68 -0
  100. data/lib/merb_merchant/billing/integrations/nochex/notification.rb +94 -0
  101. data/lib/merb_merchant/billing/integrations/nochex/return.rb +10 -0
  102. data/lib/merb_merchant/billing/integrations/notification.rb +62 -0
  103. data/lib/merb_merchant/billing/integrations/paypal.rb +54 -0
  104. data/lib/merb_merchant/billing/integrations/paypal/helper.rb +118 -0
  105. data/lib/merb_merchant/billing/integrations/paypal/notification.rb +154 -0
  106. data/lib/merb_merchant/billing/integrations/paypal/return.rb +10 -0
  107. data/lib/merb_merchant/billing/integrations/quickpay.rb +25 -0
  108. data/lib/merb_merchant/billing/integrations/quickpay/helper.rb +72 -0
  109. data/lib/merb_merchant/billing/integrations/quickpay/notification.rb +74 -0
  110. data/lib/merb_merchant/billing/integrations/return.rb +35 -0
  111. data/lib/merb_merchant/billing/integrations/two_checkout.rb +30 -0
  112. data/lib/merb_merchant/billing/integrations/two_checkout/helper.rb +59 -0
  113. data/lib/merb_merchant/billing/integrations/two_checkout/notification.rb +114 -0
  114. data/lib/merb_merchant/billing/integrations/two_checkout/return.rb +17 -0
  115. data/lib/merb_merchant/billing/response.rb +32 -0
  116. data/lib/merb_merchant/lib/country.rb +298 -0
  117. data/lib/merb_merchant/lib/error.rb +4 -0
  118. data/lib/merb_merchant/lib/inflector.rb +69 -0
  119. data/lib/merb_merchant/lib/post_data.rb +22 -0
  120. data/lib/merb_merchant/lib/posts_data.rb +109 -0
  121. data/lib/merb_merchant/lib/requires_parameters.rb +16 -0
  122. data/lib/merb_merchant/lib/utils.rb +18 -0
  123. data/lib/merb_merchant/lib/validateable.rb +76 -0
  124. data/lib/support/gateway_support.rb +57 -0
  125. data/lib/tasks/cia.rb +90 -0
  126. data/script/destroy +14 -0
  127. data/script/generate +14 -0
  128. data/test/extra/binding_of_caller.rb +80 -0
  129. data/test/extra/breakpoint.rb +547 -0
  130. data/test/fixtures.yml +317 -0
  131. data/test/remote/gateways/remote_authorize_net_cim_test.rb +459 -0
  132. data/test/remote/gateways/remote_authorize_net_test.rb +145 -0
  133. data/test/remote/gateways/remote_beanstream_interac_test.rb +53 -0
  134. data/test/remote/gateways/remote_beanstream_test.rb +150 -0
  135. data/test/remote/gateways/remote_braintree_test.rb +154 -0
  136. data/test/remote/gateways/remote_card_stream_test.rb +148 -0
  137. data/test/remote/gateways/remote_cyber_source_test.rb +144 -0
  138. data/test/remote/gateways/remote_data_cash_test.rb +357 -0
  139. data/test/remote/gateways/remote_efsnet_test.rb +81 -0
  140. data/test/remote/gateways/remote_eway_test.rb +74 -0
  141. data/test/remote/gateways/remote_exact_test.rb +60 -0
  142. data/test/remote/gateways/remote_linkpoint_test.rb +112 -0
  143. data/test/remote/gateways/remote_modern_payments_cim_test.rb +58 -0
  144. data/test/remote/gateways/remote_modern_payments_test.rb +43 -0
  145. data/test/remote/gateways/remote_moneris_test.rb +82 -0
  146. data/test/remote/gateways/remote_net_registry_test.rb +85 -0
  147. data/test/remote/gateways/remote_netbilling_test.rb +70 -0
  148. data/test/remote/gateways/remote_pay_junction_test.rb +143 -0
  149. data/test/remote/gateways/remote_pay_secure_test.rb +39 -0
  150. data/test/remote/gateways/remote_payflow_express_test.rb +50 -0
  151. data/test/remote/gateways/remote_payflow_test.rb +237 -0
  152. data/test/remote/gateways/remote_payflow_uk_test.rb +173 -0
  153. data/test/remote/gateways/remote_payment_express_test.rb +126 -0
  154. data/test/remote/gateways/remote_paypal_express_test.rb +49 -0
  155. data/test/remote/gateways/remote_paypal_test.rb +167 -0
  156. data/test/remote/gateways/remote_plugnpay_test.rb +72 -0
  157. data/test/remote/gateways/remote_protx_test.rb +184 -0
  158. data/test/remote/gateways/remote_psigate_test.rb +50 -0
  159. data/test/remote/gateways/remote_psl_card_test.rb +125 -0
  160. data/test/remote/gateways/remote_quickpay_test.rb +190 -0
  161. data/test/remote/gateways/remote_realex_test.rb +224 -0
  162. data/test/remote/gateways/remote_sage_bankcard_test.rb +109 -0
  163. data/test/remote/gateways/remote_sage_test.rb +87 -0
  164. data/test/remote/gateways/remote_sage_virtual_check_test.rb +62 -0
  165. data/test/remote/gateways/remote_secure_pay_au_test.rb +40 -0
  166. data/test/remote/gateways/remote_secure_pay_tech_test.rb +37 -0
  167. data/test/remote/gateways/remote_secure_pay_test.rb +28 -0
  168. data/test/remote/gateways/remote_skipjack_test.rb +105 -0
  169. data/test/remote/gateways/remote_trans_first_test.rb +34 -0
  170. data/test/remote/gateways/remote_trust_commerce_test.rb +152 -0
  171. data/test/remote/gateways/remote_usa_epay_test.rb +46 -0
  172. data/test/remote/gateways/remote_verifi_test.rb +107 -0
  173. data/test/remote/gateways/remote_viaklix_test.rb +43 -0
  174. data/test/remote/gateways/remote_wirecard_test.rb +77 -0
  175. data/test/remote/integrations/remote_gestpay_integration_test.rb +37 -0
  176. data/test/remote/integrations/remote_paypal_integration_test.rb +26 -0
  177. data/test/test_helper.rb +208 -0
  178. data/test/unit/avs_result_test.rb +59 -0
  179. data/test/unit/base_test.rb +55 -0
  180. data/test/unit/check_test.rb +88 -0
  181. data/test/unit/country_code_test.rb +33 -0
  182. data/test/unit/country_test.rb +64 -0
  183. data/test/unit/credit_card_formatting_test.rb +19 -0
  184. data/test/unit/credit_card_methods_test.rb +170 -0
  185. data/test/unit/credit_card_test.rb +311 -0
  186. data/test/unit/cvv_result_test.rb +33 -0
  187. data/test/unit/expiry_date_test.rb +21 -0
  188. data/test/unit/gateways/authorize_net_cim_test.rb +638 -0
  189. data/test/unit/gateways/authorize_net_test.rb +290 -0
  190. data/test/unit/gateways/beanstream_interac_test.rb +51 -0
  191. data/test/unit/gateways/beanstream_test.rb +108 -0
  192. data/test/unit/gateways/bogus_test.rb +46 -0
  193. data/test/unit/gateways/braintree_test.rb +116 -0
  194. data/test/unit/gateways/card_stream_test.rb +91 -0
  195. data/test/unit/gateways/cyber_source_test.rb +188 -0
  196. data/test/unit/gateways/data_cash_test.rb +132 -0
  197. data/test/unit/gateways/efsnet_test.rb +124 -0
  198. data/test/unit/gateways/eway_test.rb +118 -0
  199. data/test/unit/gateways/exact_test.rb +156 -0
  200. data/test/unit/gateways/gateway_test.rb +48 -0
  201. data/test/unit/gateways/linkpoint_test.rb +167 -0
  202. data/test/unit/gateways/modern_payments_cim_test.rb +171 -0
  203. data/test/unit/gateways/moneris_test.rb +158 -0
  204. data/test/unit/gateways/net_registry_test.rb +416 -0
  205. data/test/unit/gateways/netbilling_test.rb +54 -0
  206. data/test/unit/gateways/pay_junction_test.rb +123 -0
  207. data/test/unit/gateways/pay_secure_test.rb +71 -0
  208. data/test/unit/gateways/payflow_express_test.rb +173 -0
  209. data/test/unit/gateways/payflow_express_uk_test.rb +14 -0
  210. data/test/unit/gateways/payflow_test.rb +305 -0
  211. data/test/unit/gateways/payflow_uk_test.rb +30 -0
  212. data/test/unit/gateways/payment_express_test.rb +195 -0
  213. data/test/unit/gateways/paypal_express_test.rb +382 -0
  214. data/test/unit/gateways/paypal_test.rb +520 -0
  215. data/test/unit/gateways/plugnpay_test.rb +86 -0
  216. data/test/unit/gateways/protx_test.rb +122 -0
  217. data/test/unit/gateways/psigate_test.rb +169 -0
  218. data/test/unit/gateways/psl_card_test.rb +64 -0
  219. data/test/unit/gateways/quickpay_test.rb +112 -0
  220. data/test/unit/gateways/realex_test.rb +151 -0
  221. data/test/unit/gateways/sage_bankcard_test.rb +162 -0
  222. data/test/unit/gateways/sage_virtual_check_test.rb +71 -0
  223. data/test/unit/gateways/secure_pay_au_test.rb +207 -0
  224. data/test/unit/gateways/secure_pay_tech_test.rb +44 -0
  225. data/test/unit/gateways/secure_pay_test.rb +87 -0
  226. data/test/unit/gateways/skip_jack_test.rb +133 -0
  227. data/test/unit/gateways/trans_first_test.rb +112 -0
  228. data/test/unit/gateways/trust_commerce_test.rb +90 -0
  229. data/test/unit/gateways/usa_epay_test.rb +128 -0
  230. data/test/unit/gateways/verifi_test.rb +96 -0
  231. data/test/unit/gateways/viaklix_test.rb +78 -0
  232. data/test/unit/gateways/wirecard_test.rb +232 -0
  233. data/test/unit/generators/test_gateway_generator.rb +46 -0
  234. data/test/unit/generators/test_generator_helper.rb +20 -0
  235. data/test/unit/generators/test_integration_generator.rb +53 -0
  236. data/test/unit/integrations/action_view_helper_test.rb +50 -0
  237. data/test/unit/integrations/bogus_module_test.rb +20 -0
  238. data/test/unit/integrations/chronopay_module_test.rb +13 -0
  239. data/test/unit/integrations/gestpay_module_test.rb +14 -0
  240. data/test/unit/integrations/helpers/bogus_helper_test.rb +28 -0
  241. data/test/unit/integrations/helpers/chronopay_helper_test.rb +67 -0
  242. data/test/unit/integrations/helpers/gestpay_helper_test.rb +100 -0
  243. data/test/unit/integrations/helpers/hi_trust_helper_test.rb +16 -0
  244. data/test/unit/integrations/helpers/nochex_helper_test.rb +53 -0
  245. data/test/unit/integrations/helpers/paypal_helper_test.rb +162 -0
  246. data/test/unit/integrations/helpers/quickpay_helper_test.rb +40 -0
  247. data/test/unit/integrations/helpers/two_checkout_helper_test.rb +92 -0
  248. data/test/unit/integrations/hi_trust_module_test.rb +13 -0
  249. data/test/unit/integrations/nochex_module_test.rb +13 -0
  250. data/test/unit/integrations/notifications/chronopay_notification_test.rb +66 -0
  251. data/test/unit/integrations/notifications/gestpay_notification_test.rb +60 -0
  252. data/test/unit/integrations/notifications/hi_trust_notification_test.rb +59 -0
  253. data/test/unit/integrations/notifications/nochex_notification_test.rb +51 -0
  254. data/test/unit/integrations/notifications/notification_test.rb +54 -0
  255. data/test/unit/integrations/notifications/paypal_notification_test.rb +85 -0
  256. data/test/unit/integrations/notifications/quickpay_notification_test.rb +69 -0
  257. data/test/unit/integrations/notifications/two_checkout_notification_test.rb +55 -0
  258. data/test/unit/integrations/paypal_module_test.rb +28 -0
  259. data/test/unit/integrations/quickpay_module_test.rb +9 -0
  260. data/test/unit/integrations/returns/chronopay_return_test.rb +11 -0
  261. data/test/unit/integrations/returns/gestpay_return_test.rb +10 -0
  262. data/test/unit/integrations/returns/hi_trust_return_test.rb +24 -0
  263. data/test/unit/integrations/returns/nochex_return_test.rb +10 -0
  264. data/test/unit/integrations/returns/paypal_return_test.rb +10 -0
  265. data/test/unit/integrations/returns/return_test.rb +11 -0
  266. data/test/unit/integrations/returns/two_checkout_return_test.rb +24 -0
  267. data/test/unit/integrations/two_checkout_module_test.rb +13 -0
  268. data/test/unit/post_data_test.rb +55 -0
  269. data/test/unit/posts_data_test.rb +100 -0
  270. data/test/unit/response_test.rb +28 -0
  271. data/test/unit/utils_test.rb +7 -0
  272. data/test/unit/validateable_test.rb +60 -0
  273. metadata +379 -0
@@ -0,0 +1,311 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class CreditCardTest < Test::Unit::TestCase
4
+ def setup
5
+ CreditCard.require_verification_value = false
6
+ @visa = credit_card("4779139500118580", :type => "visa")
7
+ @solo = credit_card("676700000000000000", :type => "solo", :issue_number => '01')
8
+ end
9
+
10
+ def teardown
11
+ CreditCard.require_verification_value = false
12
+ end
13
+
14
+ def test_constructor_should_properly_assign_values
15
+ c = credit_card
16
+
17
+ assert_equal "4242424242424242", c.number
18
+ assert_equal 9, c.month
19
+ assert_equal Time.now.year + 1, c.year
20
+ assert_equal "Longbob Longsen", c.name
21
+ assert_equal "visa", c.type
22
+ assert_valid c
23
+ end
24
+
25
+ def test_new_credit_card_should_not_be_valid
26
+ c = CreditCard.new
27
+
28
+ assert_not_valid c
29
+ assert_false c.errors.empty?
30
+ end
31
+
32
+ def test_should_be_a_valid_visa_card
33
+ assert_valid @visa
34
+ assert @visa.errors.empty?
35
+ end
36
+
37
+ def test_should_be_a_valid_solo_card
38
+ assert_valid @solo
39
+ assert @solo.errors.empty?
40
+ end
41
+
42
+ def test_cards_with_empty_names_should_not_be_valid
43
+ @visa.first_name = ''
44
+ @visa.last_name = ''
45
+
46
+ assert_not_valid @visa
47
+ assert_false @visa.errors.empty?
48
+ end
49
+
50
+ def test_should_be_able_to_access_errors_indifferently
51
+ @visa.first_name = ''
52
+
53
+ assert_not_valid @visa
54
+ assert @visa.errors.on(:first_name)
55
+ assert @visa.errors.on("first_name")
56
+ end
57
+
58
+ def test_should_be_able_to_liberate_a_bogus_card
59
+ c = credit_card('', :type => 'bogus')
60
+ assert_valid c
61
+
62
+ c.type = 'visa'
63
+ assert_not_valid c
64
+ end
65
+
66
+ def test_should_be_able_to_identify_invalid_card_numbers
67
+ @visa.number = nil
68
+ assert_not_valid @visa
69
+
70
+ @visa.number = "11112222333344ff"
71
+ assert_not_valid @visa
72
+ assert_false @visa.errors.on(:type)
73
+ assert @visa.errors.on(:number)
74
+
75
+ @visa.number = "111122223333444"
76
+ assert_not_valid @visa
77
+ assert_false @visa.errors.on(:type)
78
+ assert @visa.errors.on(:number)
79
+
80
+ @visa.number = "11112222333344444"
81
+ assert_not_valid @visa
82
+ assert_false @visa.errors.on(:type)
83
+ assert @visa.errors.on(:number)
84
+ end
85
+
86
+ def test_should_have_errors_with_invalid_card_type_for_otherwise_correct_number
87
+ @visa.type = 'master'
88
+
89
+ assert_not_valid @visa
90
+ assert_not_equal @visa.errors.on(:number), @visa.errors.on(:type)
91
+ end
92
+
93
+ def test_should_be_invalid_when_type_cannot_be_detected
94
+ @visa.number = nil
95
+ @visa.type = nil
96
+
97
+ assert_not_valid @visa
98
+ assert_match /is required/, @visa.errors.on(:type)
99
+ assert @visa.errors.on(:type)
100
+ end
101
+
102
+ def test_should_be_a_valid_card_number
103
+ @visa.number = "4242424242424242"
104
+
105
+ assert_valid @visa
106
+ end
107
+
108
+ def test_should_require_a_valid_card_month
109
+ @visa.month = Time.now.month
110
+ @visa.year = Time.now.year
111
+
112
+ assert_valid @visa
113
+ end
114
+
115
+ def test_should_not_be_valid_with_empty_month
116
+ @visa.month = ''
117
+
118
+ assert_not_valid @visa
119
+ assert @visa.errors.on('month')
120
+ end
121
+
122
+ def test_should_not_be_valid_for_edge_month_cases
123
+ @visa.month = 13
124
+ @visa.year = Time.now.year
125
+ assert_not_valid @visa
126
+ assert @visa.errors.on('month')
127
+
128
+ @visa.month = 0
129
+ @visa.year = Time.now.year
130
+ assert_not_valid @visa
131
+ assert @visa.errors.on('month')
132
+ end
133
+
134
+ def test_should_be_invalid_with_empty_year
135
+ @visa.year = ''
136
+ assert_not_valid @visa
137
+ assert @visa.errors.on('year')
138
+ end
139
+
140
+ def test_should_not_be_valid_for_edge_year_cases
141
+ @visa.year = Time.now.year - 1
142
+ assert_not_valid @visa
143
+ assert @visa.errors.on('year')
144
+
145
+ @visa.year = Time.now.year + 21
146
+ assert_not_valid @visa
147
+ assert @visa.errors.on('year')
148
+ end
149
+
150
+ def test_should_be_a_valid_future_year
151
+ @visa.year = Time.now.year + 1
152
+ assert_valid @visa
153
+ end
154
+
155
+ def test_should_identify_wrong_cardtype
156
+ c = credit_card(:type => 'master')
157
+ assert_not_valid c
158
+ end
159
+
160
+ def test_should_display_number
161
+ assert_equal 'XXXX-XXXX-XXXX-1234', CreditCard.new(:number => '1111222233331234').display_number
162
+ assert_equal 'XXXX-XXXX-XXXX-1234', CreditCard.new(:number => '111222233331234').display_number
163
+ assert_equal 'XXXX-XXXX-XXXX-1234', CreditCard.new(:number => '1112223331234').display_number
164
+
165
+ assert_equal 'XXXX-XXXX-XXXX-', CreditCard.new(:number => nil).display_number
166
+ assert_equal 'XXXX-XXXX-XXXX-', CreditCard.new(:number => '').display_number
167
+ assert_equal 'XXXX-XXXX-XXXX-123', CreditCard.new(:number => '123').display_number
168
+ assert_equal 'XXXX-XXXX-XXXX-1234', CreditCard.new(:number => '1234').display_number
169
+ assert_equal 'XXXX-XXXX-XXXX-1234', CreditCard.new(:number => '01234').display_number
170
+ end
171
+
172
+ def test_should_correctly_identify_card_type
173
+ assert_equal 'visa', CreditCard.type?('4242424242424242')
174
+ assert_equal 'american_express', CreditCard.type?('341111111111111')
175
+ assert_nil CreditCard.type?('')
176
+ end
177
+
178
+ def test_should_be_able_to_require_a_verification_value
179
+ CreditCard.require_verification_value = true
180
+ assert CreditCard.requires_verification_value?
181
+ end
182
+
183
+ def test_should_not_be_valid_when_requiring_a_verification_value
184
+ CreditCard.require_verification_value = true
185
+ card = credit_card('4242424242424242', :verification_value => nil)
186
+ assert_not_valid card
187
+
188
+ card.verification_value = '123'
189
+ assert_valid card
190
+ end
191
+
192
+ def test_should_require_valid_start_date_for_solo_or_switch
193
+ @solo.start_month = nil
194
+ @solo.start_year = nil
195
+ @solo.issue_number = nil
196
+
197
+ assert_not_valid @solo
198
+ assert @solo.errors.on('start_month')
199
+ assert @solo.errors.on('start_year')
200
+ assert @solo.errors.on('issue_number')
201
+
202
+ @solo.start_month = 2
203
+ @solo.start_year = 2007
204
+ assert_valid @solo
205
+ end
206
+
207
+ def test_should_require_a_valid_issue_number_for_solo_or_switch
208
+ @solo.start_month = nil
209
+ @solo.start_year = 2005
210
+ @solo.issue_number = nil
211
+
212
+ assert_not_valid @solo
213
+ assert @solo.errors.on('start_month')
214
+ assert @solo.errors.on('issue_number')
215
+
216
+ @solo.issue_number = 3
217
+ assert_valid @solo
218
+ end
219
+
220
+ def test_should_return_last_four_digits_of_card_number
221
+ ccn = CreditCard.new(:number => "4779139500118580")
222
+ assert_equal "8580", ccn.last_digits
223
+ end
224
+
225
+ def test_bogus_last_digits
226
+ ccn = CreditCard.new(:number => "1")
227
+ assert_equal "1", ccn.last_digits
228
+ end
229
+
230
+ def test_should_be_true_when_credit_card_has_a_first_name
231
+ c = CreditCard.new
232
+ assert_false c.first_name?
233
+
234
+ c = CreditCard.new(:first_name => 'James')
235
+ assert c.first_name?
236
+ end
237
+
238
+ def test_should_be_true_when_credit_card_has_a_last_name
239
+ c = CreditCard.new
240
+ assert_false c.last_name?
241
+
242
+ c = CreditCard.new(:last_name => 'Herdman')
243
+ assert c.last_name?
244
+ end
245
+
246
+ def test_should_test_for_a_full_name
247
+ c = CreditCard.new
248
+ assert_false c.name?
249
+
250
+ c = CreditCard.new(:first_name => 'James', :last_name => 'Herdman')
251
+ assert c.name?
252
+ end
253
+
254
+ # The following is a regression for a bug that raised an exception when
255
+ # a new credit card was validated
256
+ def test_validate_new_card
257
+ credit_card = CreditCard.new
258
+
259
+ assert_nothing_raised do
260
+ credit_card.validate
261
+ end
262
+ end
263
+
264
+ # The following is a regression for a bug where the keys of the
265
+ # credit card card_companies hash were not duped when detecting the type
266
+ def test_create_and_validate_credit_card_from_type
267
+ credit_card = CreditCard.new(:type => CreditCard.type?('4242424242424242'))
268
+ assert_nothing_raised do
269
+ credit_card.valid?
270
+ end
271
+ end
272
+
273
+ def test_autodetection_of_credit_card_type
274
+ credit_card = CreditCard.new(:number => '4242424242424242')
275
+ credit_card.valid?
276
+ assert_equal 'visa', credit_card.type
277
+ end
278
+
279
+ def test_card_type_should_not_be_autodetected_when_provided
280
+ credit_card = CreditCard.new(:number => '4242424242424242', :type => 'master')
281
+ credit_card.valid?
282
+ assert_equal 'master', credit_card.type
283
+ end
284
+
285
+ def test_detecting_bogus_card
286
+ credit_card = CreditCard.new(:number => '1')
287
+ credit_card.valid?
288
+ assert_equal 'bogus', credit_card.type
289
+ end
290
+
291
+ def test_validating_bogus_card
292
+ credit_card = credit_card('1', :type => nil)
293
+ assert credit_card.valid?
294
+ end
295
+
296
+ def test_mask_number
297
+ assert_equal 'XXXX-XXXX-XXXX-5100', CreditCard.mask('5105105105105100')
298
+ end
299
+
300
+ def test_strip_non_digit_characters
301
+ card = credit_card('4242-4242 %%%%%%4242......4242')
302
+ assert card.valid?
303
+ assert_equal "4242424242424242", card.number
304
+ end
305
+
306
+ def test_before_validate_handles_blank_number
307
+ card = credit_card(nil)
308
+ assert !card.valid?
309
+ assert_equal "", card.number
310
+ end
311
+ end
@@ -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
@@ -0,0 +1,638 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+
3
+ class AuthorizeNetCimTest < Test::Unit::TestCase
4
+ def setup
5
+ @gateway = AuthorizeNetCimGateway.new(
6
+ :login => 'X',
7
+ :password => 'Y'
8
+ )
9
+ @amount = 100
10
+ @credit_card = credit_card
11
+ @address = address
12
+ @customer_profile_id = '3187'
13
+ @customer_payment_profile_id = '7813'
14
+ @customer_address_id = '4321'
15
+ @payment = {
16
+ :credit_card => @credit_card
17
+ }
18
+ @profile = {
19
+ :merchant_customer_id => 'Up to 20 chars', # Optional
20
+ :description => 'Up to 255 Characters', # Optional
21
+ :email => 'Up to 255 Characters', # Optional
22
+ :payment_profiles => { # Optional
23
+ :customer_type => 'individual or business', # Optional
24
+ :bill_to => @address,
25
+ :payment => @payment
26
+ },
27
+ :ship_to_list => {
28
+ :first_name => 'John',
29
+ :last_name => 'Doe',
30
+ :company => 'Widgets, Inc',
31
+ :address1 => '1234 Fake Street',
32
+ :city => 'Anytown',
33
+ :state => 'MD',
34
+ :zip => '12345',
35
+ :country => 'USA',
36
+ :phone_number => '(123)123-1234', # Optional - Up to 25 digits (no letters)
37
+ :fax_number => '(123)123-1234' # Optional - Up to 25 digits (no letters)
38
+ }
39
+ }
40
+ @options = {
41
+ :ref_id => '1234', # Optional
42
+ :profile => @profile
43
+ }
44
+ end
45
+
46
+ def test_expdate_formatting
47
+ assert_equal '2009-09', @gateway.send(:expdate, credit_card('4111111111111111', :month => "9", :year => "2009"))
48
+ assert_equal '2013-11', @gateway.send(:expdate, credit_card('4111111111111111', :month => "11", :year => "2013"))
49
+ end
50
+
51
+ def test_should_create_customer_profile_request
52
+ @gateway.expects(:ssl_post).returns(successful_create_customer_profile_response)
53
+
54
+ assert response = @gateway.create_customer_profile(@options)
55
+ assert_instance_of Response, response
56
+ assert_success response
57
+ assert_equal @customer_profile_id, response.authorization
58
+ assert_equal "Successful.", response.message
59
+ end
60
+
61
+ def test_should_create_customer_payment_profile_request
62
+ @gateway.expects(:ssl_post).returns(successful_create_customer_payment_profile_response)
63
+
64
+ assert response = @gateway.create_customer_payment_profile(
65
+ :customer_profile_id => @customer_profile_id,
66
+ :payment_profile => {
67
+ :customer_type => 'individual',
68
+ :bill_to => @address,
69
+ :payment => @payment
70
+ },
71
+ :validation_mode => :test
72
+ )
73
+ assert_instance_of Response, response
74
+ assert_success response
75
+ assert_equal @customer_payment_profile_id, response.params['customer_payment_profile_id']
76
+ assert_equal "This output is only present if the ValidationMode input parameter is passed with a value of testMode or liveMode", response.params['validation_direct_response']
77
+ end
78
+
79
+ def test_should_create_customer_shipping_address_request
80
+ @gateway.expects(:ssl_post).returns(successful_create_customer_shipping_address_response)
81
+
82
+ assert response = @gateway.create_customer_shipping_address(
83
+ :customer_profile_id => @customer_profile_id,
84
+ :address => {
85
+ :first_name => 'John',
86
+ :last_name => 'Doe',
87
+ :company => 'Widgets, Inc',
88
+ :address1 => '1234 Fake Street',
89
+ :city => 'Anytown',
90
+ :state => 'MD',
91
+ :country => 'USA',
92
+ :phone_number => '(123)123-1234',
93
+ :fax_number => '(123)123-1234'
94
+ }
95
+ )
96
+ assert_instance_of Response, response
97
+ assert_success response
98
+ assert_nil response.authorization
99
+ assert_equal 'customerAddressId', response.params['customer_address_id']
100
+ end
101
+
102
+ def test_should_create_customer_profile_transaction_auth_only_and_then_capture_only_requests
103
+ @gateway.expects(:ssl_post).returns(successful_create_customer_profile_transaction_response(:auth_only))
104
+
105
+ assert response = @gateway.create_customer_profile_transaction(
106
+ :transaction => {
107
+ :customer_profile_id => @customer_profile_id,
108
+ :customer_payment_profile_id => @customer_payment_profile_id,
109
+ :type => :auth_only,
110
+ :amount => @amount
111
+ }
112
+ )
113
+ assert_instance_of Response, response
114
+ assert_success response
115
+ assert_nil response.authorization
116
+ assert_equal 'This transaction has been approved.', response.params['direct_response']['message']
117
+ assert_equal 'auth_only', response.params['direct_response']['transaction_type']
118
+ assert_equal 'Gw4NGI', approval_code = response.params['direct_response']['approval_code']
119
+
120
+ @gateway.expects(:ssl_post).returns(successful_create_customer_profile_transaction_response(:capture_only))
121
+
122
+ assert response = @gateway.create_customer_profile_transaction(
123
+ :transaction => {
124
+ :customer_profile_id => @customer_profile_id,
125
+ :customer_payment_profile_id => @customer_payment_profile_id,
126
+ :type => :capture_only,
127
+ :amount => @amount,
128
+ :approval_code => approval_code
129
+ }
130
+ )
131
+ assert_instance_of Response, response
132
+ assert_success response
133
+ assert_nil response.authorization
134
+ assert_equal 'This transaction has been approved.', response.params['direct_response']['message']
135
+ end
136
+
137
+ def test_should_create_customer_profile_transaction_auth_capture_request
138
+ @gateway.expects(:ssl_post).returns(successful_create_customer_profile_transaction_response(:auth_capture))
139
+
140
+ assert response = @gateway.create_customer_profile_transaction(
141
+ :transaction => {
142
+ :customer_profile_id => @customer_profile_id,
143
+ :customer_payment_profile_id => @customer_payment_profile_id,
144
+ :type => :auth_capture,
145
+ :order => {
146
+ :invoice_number => '1234',
147
+ :description => 'Test Order Description',
148
+ :purchase_order_number => '4321'
149
+ },
150
+ :amount => @amount
151
+ }
152
+ )
153
+ assert_instance_of Response, response
154
+ assert_success response
155
+ assert_nil response.authorization
156
+ assert_equal 'This transaction has been approved.', response.params['direct_response']['message']
157
+ end
158
+
159
+ def test_should_delete_customer_profile_request
160
+ @gateway.expects(:ssl_post).returns(successful_delete_customer_profile_response)
161
+
162
+ assert response = @gateway.delete_customer_profile(:customer_profile_id => @customer_profile_id)
163
+ assert_instance_of Response, response
164
+ assert_success response
165
+ assert_equal @customer_profile_id, response.authorization
166
+ end
167
+
168
+ def test_should_delete_customer_payment_profile_request
169
+ @gateway.expects(:ssl_post).returns(successful_delete_customer_payment_profile_response)
170
+
171
+ assert response = @gateway.delete_customer_payment_profile(:customer_profile_id => @customer_profile_id, :customer_payment_profile_id => @customer_payment_profile_id)
172
+ assert_instance_of Response, response
173
+ assert_success response
174
+ assert_nil response.authorization
175
+ end
176
+
177
+ def test_should_delete_customer_shipping_address_request
178
+ @gateway.expects(:ssl_post).returns(successful_delete_customer_shipping_address_response)
179
+
180
+ assert response = @gateway.delete_customer_shipping_address(:customer_profile_id => @customer_profile_id, :customer_address_id => @customer_address_id)
181
+ assert_instance_of Response, response
182
+ assert_success response
183
+ assert_nil response.authorization
184
+ end
185
+
186
+ def test_should_get_customer_profile_request
187
+ @gateway.expects(:ssl_post).returns(successful_get_customer_profile_response)
188
+
189
+ assert response = @gateway.get_customer_profile(:customer_profile_id => @customer_profile_id)
190
+ assert_instance_of Response, response
191
+ assert_success response
192
+ assert_equal @customer_profile_id, response.authorization
193
+ end
194
+
195
+ def test_should_get_customer_profile_request_with_multiple_payment_profiles
196
+ @gateway.expects(:ssl_post).returns(successful_get_customer_profile_response_with_multiple_payment_profiles)
197
+
198
+ assert response = @gateway.get_customer_profile(:customer_profile_id => @customer_profile_id)
199
+ assert_instance_of Response, response
200
+ assert_success response
201
+
202
+ assert_equal @customer_profile_id, response.authorization
203
+ assert_equal 2, response.params['profile']['payment_profiles'].size
204
+ end
205
+
206
+ def test_should_get_customer_payment_profile_request
207
+ @gateway.expects(:ssl_post).returns(successful_get_customer_payment_profile_response)
208
+
209
+ assert response = @gateway.get_customer_payment_profile(
210
+ :customer_profile_id => @customer_profile_id,
211
+ :customer_payment_profile_id => @customer_payment_profile_id
212
+ )
213
+ assert_instance_of Response, response
214
+ assert_success response
215
+ assert_nil response.authorization
216
+ assert_equal @customer_payment_profile_id, response.params['profile']['payment_profiles']['customer_payment_profile_id']
217
+ end
218
+
219
+ def test_should_get_customer_shipping_address_request
220
+ @gateway.expects(:ssl_post).returns(successful_get_customer_shipping_address_response)
221
+
222
+ assert response = @gateway.get_customer_shipping_address(
223
+ :customer_profile_id => @customer_profile_id,
224
+ :customer_address_id => @customer_address_id
225
+ )
226
+ assert_instance_of Response, response
227
+ assert_success response
228
+ assert_nil response.authorization
229
+ end
230
+
231
+ def test_should_update_customer_profile_request
232
+ @gateway.expects(:ssl_post).returns(successful_update_customer_profile_response)
233
+
234
+ assert response = @gateway.update_customer_profile(
235
+ :profile => {
236
+ :customer_profile_id => @customer_profile_id,
237
+ :email => 'new email address'
238
+ }
239
+ )
240
+ assert_instance_of Response, response
241
+ assert_success response
242
+ assert_equal @customer_profile_id, response.authorization
243
+ end
244
+
245
+ def test_should_update_customer_payment_profile_request
246
+ @gateway.expects(:ssl_post).returns(successful_update_customer_payment_profile_response)
247
+
248
+ assert response = @gateway.update_customer_payment_profile(
249
+ :customer_profile_id => @customer_profile_id,
250
+ :payment_profile => {
251
+ :customer_payment_profile_id => @customer_payment_profile_id,
252
+ :customer_type => 'business'
253
+ }
254
+ )
255
+ assert_instance_of Response, response
256
+ assert_success response
257
+ assert_nil response.authorization
258
+ end
259
+
260
+ def test_should_update_customer_shipping_address_request
261
+ @gateway.expects(:ssl_post).returns(successful_update_customer_shipping_address_response)
262
+
263
+ assert response = @gateway.update_customer_shipping_address(
264
+ :customer_profile_id => @customer_profile_id,
265
+ :address => {
266
+ :customer_address_id => @customer_address_id,
267
+ :city => 'New City'
268
+ }
269
+ )
270
+ assert_instance_of Response, response
271
+ assert_success response
272
+ assert_nil response.authorization
273
+ end
274
+
275
+ def test_should_validate_customer_payment_profile_request
276
+ @gateway.expects(:ssl_post).returns(successful_validate_customer_payment_profile_response)
277
+
278
+ assert response = @gateway.validate_customer_payment_profile(
279
+ :customer_profile_id => @customer_profile_id,
280
+ :customer_payment_profile_id => @customer_payment_profile_id,
281
+ :customer_address_id => @customer_address_id,
282
+ :validation_mode => :live
283
+ )
284
+ assert_instance_of Response, response
285
+ assert_success response
286
+ assert_nil response.authorization
287
+ assert_equal 'This transaction has been approved.', response.params['direct_response']['message']
288
+ end
289
+
290
+ private
291
+
292
+ def successful_create_customer_profile_response
293
+ <<-XML
294
+ <?xml version="1.0" encoding="utf-8" ?>
295
+ <createCustomerProfileResponse
296
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
297
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
298
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
299
+ <refId>refid1</refId>
300
+ <messages>
301
+ <resultCode>Ok</resultCode>
302
+ <message>
303
+ <code>I00001</code>
304
+ <text>Successful.</text>
305
+ </message>
306
+ </messages>
307
+ <customerProfileId>#{@customer_profile_id}</customerProfileId>
308
+ </createCustomerProfileResponse>
309
+ XML
310
+ end
311
+
312
+ def successful_create_customer_payment_profile_response
313
+ <<-XML
314
+ <?xml version="1.0" encoding="utf-8" ?>
315
+ <createCustomerPaymentProfileResponse
316
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
317
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
318
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
319
+ <refId>refid1</refId>
320
+ <messages>
321
+ <resultCode>Ok</resultCode>
322
+ <message>
323
+ <code>I00001</code>
324
+ <text>Successful.</text>
325
+ </message>
326
+ </messages>
327
+ <customerPaymentProfileId>#{@customer_payment_profile_id}</customerPaymentProfileId>
328
+ <validationDirectResponse>This output is only present if the ValidationMode input parameter is passed with a value of testMode or liveMode</validationDirectResponse>
329
+ </createCustomerPaymentProfileResponse>
330
+ XML
331
+ end
332
+
333
+ def successful_create_customer_shipping_address_response
334
+ <<-XML
335
+ <?xml version="1.0" encoding="utf-8" ?>
336
+ <createCustomerShippingAddressResponse
337
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
338
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
339
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
340
+ <refId>refid1</refId>
341
+ <messages>
342
+ <resultCode>Ok</resultCode>
343
+ <message>
344
+ <code>I00001</code>
345
+ <text>Successful.</text>
346
+ </message>
347
+ </messages>
348
+ <customerAddressId>customerAddressId</customerAddressId>
349
+ </createCustomerShippingAddressResponse>
350
+ XML
351
+ end
352
+
353
+ def successful_delete_customer_profile_response
354
+ <<-XML
355
+ <?xml version="1.0" encoding="utf-8" ?>
356
+ <deleteCustomerProfileResponse
357
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
358
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
359
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
360
+ <refId>refid1</refId>
361
+ <messages>
362
+ <resultCode>Ok</resultCode>
363
+ <message>
364
+ <code>I00001</code>
365
+ <text>Successful.</text>
366
+ </message>
367
+ </messages>
368
+ <customerProfileId>#{@customer_profile_id}</customerProfileId>
369
+ </deleteCustomerProfileResponse>
370
+ XML
371
+ end
372
+
373
+ def successful_delete_customer_payment_profile_response
374
+ <<-XML
375
+ <?xml version="1.0" encoding="utf-8" ?>
376
+ <deleteCustomerPaymentProfileResponse
377
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
378
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
379
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
380
+ <refId>refid1</refId>
381
+ <messages>
382
+ <resultCode>Ok</resultCode>
383
+ <message>
384
+ <code>I00001</code>
385
+ <text>Successful.</text>
386
+ </message>
387
+ </messages>
388
+ </deleteCustomerPaymentProfileResponse>
389
+ XML
390
+ end
391
+
392
+ def successful_delete_customer_shipping_address_response
393
+ <<-XML
394
+ <?xml version="1.0" encoding="utf-8" ?>
395
+ <deleteCustomerShippingAddressResponse
396
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
397
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
398
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
399
+ <refId>refid1</refId>
400
+ <messages>
401
+ <resultCode>Ok</resultCode>
402
+ <message>
403
+ <code>I00001</code>
404
+ <text>Successful.</text>
405
+ </message>
406
+ </messages>
407
+ </deleteCustomerShippingAddressResponse>
408
+ XML
409
+ end
410
+
411
+ def successful_get_customer_profile_response
412
+ <<-XML
413
+ <?xml version="1.0" encoding="utf-8" ?>
414
+ <getCustomerProfileResponse
415
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
416
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
417
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
418
+ <refId>refid1</refId>
419
+ <messages>
420
+ <resultCode>Ok</resultCode>
421
+ <message>
422
+ <code>I00001</code>
423
+ <text>Successful.</text>
424
+ </message>
425
+ </messages>
426
+ <customerProfileId>#{@customer_profile_id}</customerProfileId>
427
+ <profile>
428
+ <paymentProfiles>
429
+ <customerPaymentProfileId>123456</customerPaymentProfileId>
430
+ <payment>
431
+ <creditCard>
432
+ <cardNumber>#{@credit_card.number}</cardNumber>
433
+ <expirationDate>#{@gateway.send(:expdate, @credit_card)}</expirationDate>
434
+ </creditCard>
435
+ </payment>
436
+ </paymentProfiles>
437
+ </profile>
438
+ </getCustomerProfileResponse>
439
+ XML
440
+ end
441
+
442
+ def successful_get_customer_profile_response_with_multiple_payment_profiles
443
+ <<-XML
444
+ <?xml version="1.0" encoding="utf-8"?>
445
+ <getCustomerProfileResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
446
+ <messages>
447
+ <resultCode>Ok</resultCode>
448
+ <message>
449
+ <code>I00001</code>
450
+ <text>Successful.</text>
451
+ </message>
452
+ </messages>
453
+ <profile>
454
+ <merchantCustomerId>Up to 20 chars</merchantCustomerId>
455
+ <description>Up to 255 Characters</description>
456
+ <email>Up to 255 Characters</email>
457
+ <customerProfileId>#{@customer_profile_id}</customerProfileId>
458
+ <paymentProfiles>
459
+ <customerPaymentProfileId>1000</customerPaymentProfileId>
460
+ <payment>
461
+ <creditCard>
462
+ <cardNumber>#{@credit_card.number}</cardNumber>
463
+ <expirationDate>#{@gateway.send(:expdate, @credit_card)}</expirationDate>
464
+ </creditCard>
465
+ </payment>
466
+ </paymentProfiles>
467
+ <paymentProfiles>
468
+ <customerType>individual</customerType>
469
+ <customerPaymentProfileId>1001</customerPaymentProfileId>
470
+ <payment>
471
+ <creditCard>
472
+ <cardNumber>XXXX1234</cardNumber>
473
+ <expirationDate>XXXX</expirationDate>
474
+ </creditCard>
475
+ </payment>
476
+ </paymentProfiles>
477
+ </profile>
478
+ </getCustomerProfileResponse>
479
+ XML
480
+ end
481
+
482
+ def successful_get_customer_payment_profile_response
483
+ <<-XML
484
+ <?xml version="1.0" encoding="utf-8" ?>
485
+ <getCustomerPaymentProfileResponse
486
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
487
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
488
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
489
+ <refId>refid1</refId>
490
+ <messages>
491
+ <resultCode>Ok</resultCode>
492
+ <message>
493
+ <code>I00001</code>
494
+ <text>Successful.</text>
495
+ </message>
496
+ </messages>
497
+ <profile>
498
+ <paymentProfiles>
499
+ <customerPaymentProfileId>#{@customer_payment_profile_id}</customerPaymentProfileId>
500
+ <payment>
501
+ <creditCard>
502
+ <cardNumber>#{@credit_card.number}</cardNumber>
503
+ <expirationDate>#{@gateway.send(:expdate, @credit_card)}</expirationDate>
504
+ </creditCard>
505
+ </payment>
506
+ </paymentProfiles>
507
+ </profile>
508
+ </getCustomerPaymentProfileResponse>
509
+ XML
510
+ end
511
+
512
+ def successful_get_customer_shipping_address_response
513
+ <<-XML
514
+ <?xml version="1.0" encoding="utf-8" ?>
515
+ <getCustomerShippingAddressResponse
516
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
517
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
518
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
519
+ <refId>refid1</refId>
520
+ <messages>
521
+ <resultCode>Ok</resultCode>
522
+ <message>
523
+ <code>I00001</code>
524
+ <text>Successful.</text>
525
+ </message>
526
+ </messages>
527
+ <address>
528
+ <customerAddressId>#{@customer_address_id}</customerAddressId>
529
+ </address>
530
+ </getCustomerShippingAddressResponse>
531
+ XML
532
+ end
533
+
534
+ def successful_update_customer_profile_response
535
+ <<-XML
536
+ <?xml version="1.0" encoding="utf-8" ?>
537
+ <updateCustomerProfileResponse
538
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
539
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
540
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
541
+ <refId>refid1</refId>
542
+ <messages>
543
+ <resultCode>Ok</resultCode>
544
+ <message>
545
+ <code>I00001</code>
546
+ <text>Successful.</text>
547
+ </message>
548
+ </messages>
549
+ <customerProfileId>#{@customer_profile_id}</customerProfileId>
550
+ </updateCustomerProfileResponse>
551
+ XML
552
+ end
553
+
554
+ def successful_update_customer_payment_profile_response
555
+ <<-XML
556
+ <?xml version="1.0" encoding="utf-8" ?>
557
+ <updateCustomerPaymentProfileResponse
558
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
559
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
560
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
561
+ <refId>refid1</refId>
562
+ <messages>
563
+ <resultCode>Ok</resultCode>
564
+ <message>
565
+ <code>I00001</code>
566
+ <text>Successful.</text>
567
+ </message>
568
+ </messages>
569
+ </updateCustomerPaymentProfileResponse>
570
+ XML
571
+ end
572
+
573
+ def successful_update_customer_shipping_address_response
574
+ <<-XML
575
+ <?xml version="1.0" encoding="utf-8" ?>
576
+ <updateCustomerShippingAddressResponse
577
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
578
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
579
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
580
+ <refId>refid1</refId>
581
+ <messages>
582
+ <resultCode>Ok</resultCode>
583
+ <message>
584
+ <code>I00001</code>
585
+ <text>Successful.</text>
586
+ </message>
587
+ </messages>
588
+ </updateCustomerShippingAddressResponse>
589
+ XML
590
+ end
591
+
592
+ SUCCESSFUL_DIRECT_RESPONSE = {
593
+ :auth_only => '1,1,1,This transaction has been approved.,Gw4NGI,Y,508223659,,,100.00,CC,auth_only,Up to 20 chars,,,,,,,,,,,Up to 255 Characters,,,,,,,,,,,,,,6E5334C13C78EA078173565FD67318E4,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
594
+ :capture_only => '1,1,1,This transaction has been approved.,,Y,508223660,,,100.00,CC,capture_only,Up to 20 chars,,,,,,,,,,,Up to 255 Characters,,,,,,,,,,,,,,6E5334C13C78EA078173565FD67318E4,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,',
595
+ :auth_capture => '1,1,1,This transaction has been approved.,d1GENk,Y,508223661,32968c18334f16525227,Store purchase,1.00,CC,auth_capture,,Longbob,Longsen,,,,,,,,,,,,,,,,,,,,,,,269862C030129C1173727CC10B1935ED,P,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,'
596
+ }
597
+
598
+ def successful_create_customer_profile_transaction_response(transaction_type)
599
+ <<-XML
600
+ <?xml version="1.0" encoding="utf-8" ?>
601
+ <createCustomerProfileTransactionResponse
602
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
603
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
604
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
605
+ <refId>refid1</refId>
606
+ <messages>
607
+ <resultCode>Ok</resultCode>
608
+ <message>
609
+ <code>I00001</code>
610
+ <text>Successful.</text>
611
+ </message>
612
+ </messages>
613
+ <directResponse>#{SUCCESSFUL_DIRECT_RESPONSE[transaction_type]}</directResponse>
614
+ </createCustomerProfileTransactionResponse>
615
+ XML
616
+ end
617
+
618
+ def successful_validate_customer_payment_profile_response
619
+ <<-XML
620
+ <?xml version="1.0" encoding="utf-8" ?>
621
+ <validateCustomerPaymentProfileResponse
622
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
623
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
624
+ xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
625
+ <refId>refid1</refId>
626
+ <messages>
627
+ <resultCode>Ok</resultCode>
628
+ <message>
629
+ <code>I00001</code>
630
+ <text>Successful.</text>
631
+ </message>
632
+ </messages>
633
+ <directResponse>1,1,1,This transaction has been approved.,DEsVh8,Y,508276300,none,Test transaction for ValidateCustomerPaymentProfile.,0.01,CC,auth_only,Up to 20 chars,,,,,,,,,,,Up to 255 Characters,John,Doe,Widgets, Inc,1234 Fake Street,Anytown,MD,12345,USA,0.0000,0.0000,0.0000,TRUE,none,7EB3A44624C0C10FAAE47E276B48BF17,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,</directResponse>
634
+ </validateCustomerPaymentProfileResponse>
635
+ XML
636
+ end
637
+
638
+ end