activemerchant 1.1.0 → 1.2.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 (178) hide show
  1. data.tar.gz.sig +0 -0
  2. data/CHANGELOG +226 -0
  3. data/CONTRIBUTERS +52 -0
  4. data/README +34 -24
  5. data/Rakefile +152 -0
  6. data/gem-public_cert.pem +20 -0
  7. data/init.rb +3 -0
  8. data/lib/active_merchant.rb +3 -1
  9. data/lib/active_merchant/billing/credit_card.rb +21 -17
  10. data/lib/active_merchant/billing/credit_card_methods.rb +17 -19
  11. data/lib/active_merchant/billing/gateway.rb +160 -44
  12. data/lib/active_merchant/billing/gateways.rb +2 -15
  13. data/lib/active_merchant/billing/gateways/authorize_net.rb +21 -21
  14. data/lib/active_merchant/billing/gateways/bogus.rb +6 -6
  15. data/lib/active_merchant/billing/gateways/brain_tree.rb +191 -0
  16. data/lib/active_merchant/billing/gateways/card_stream.rb +207 -0
  17. data/lib/active_merchant/billing/gateways/cyber_source.rb +402 -0
  18. data/lib/active_merchant/billing/gateways/data_cash.rb +41 -97
  19. data/lib/active_merchant/billing/gateways/efsnet.rb +256 -0
  20. data/lib/active_merchant/billing/gateways/eway.rb +77 -29
  21. data/lib/active_merchant/billing/gateways/exact.rb +230 -0
  22. data/lib/active_merchant/billing/gateways/linkpoint.rb +6 -33
  23. data/lib/active_merchant/billing/gateways/moneris.rb +155 -125
  24. data/lib/active_merchant/billing/gateways/net_registry.rb +257 -0
  25. data/lib/active_merchant/billing/gateways/pay_junction.rb +407 -0
  26. data/lib/active_merchant/billing/gateways/payflow.rb +163 -25
  27. data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +56 -38
  28. data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +10 -1
  29. data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +9 -0
  30. data/lib/active_merchant/billing/gateways/payflow_express.rb +36 -11
  31. data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +6 -0
  32. data/lib/active_merchant/billing/gateways/payflow_uk.rb +7 -3
  33. data/lib/active_merchant/billing/gateways/payment_express.rb +261 -0
  34. data/lib/active_merchant/billing/gateways/paypal.rb +18 -4
  35. data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +31 -15
  36. data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +8 -0
  37. data/lib/active_merchant/billing/gateways/paypal_express.rb +33 -8
  38. data/lib/active_merchant/billing/gateways/plugnpay.rb +300 -0
  39. data/lib/active_merchant/billing/gateways/protx.rb +285 -0
  40. data/lib/active_merchant/billing/gateways/psigate.rb +13 -12
  41. data/lib/active_merchant/billing/gateways/psl_card.rb +297 -0
  42. data/lib/active_merchant/billing/gateways/quickpay.rb +197 -0
  43. data/lib/active_merchant/billing/gateways/realex.rb +212 -0
  44. data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
  45. data/lib/active_merchant/billing/gateways/trans_first.rb +136 -0
  46. data/lib/active_merchant/billing/gateways/trust_commerce.rb +43 -20
  47. data/lib/active_merchant/billing/gateways/usa_epay.rb +6 -5
  48. data/lib/active_merchant/billing/gateways/verifi.rb +235 -0
  49. data/lib/active_merchant/billing/gateways/viaklix.rb +171 -0
  50. data/lib/active_merchant/billing/integrations/gestpay/helper.rb +0 -2
  51. data/lib/active_merchant/billing/integrations/helper.rb +8 -1
  52. data/lib/active_merchant/billing/integrations/nochex.rb +62 -1
  53. data/lib/active_merchant/billing/integrations/nochex/notification.rb +9 -16
  54. data/lib/active_merchant/billing/integrations/notification.rb +1 -1
  55. data/lib/active_merchant/billing/integrations/paypal/helper.rb +59 -46
  56. data/lib/active_merchant/billing/integrations/paypal/notification.rb +14 -47
  57. data/lib/active_merchant/lib/error.rb +4 -0
  58. data/lib/active_merchant/lib/post_data.rb +22 -0
  59. data/lib/active_merchant/lib/posts_data.rb +23 -5
  60. data/lib/active_merchant/lib/requires_parameters.rb +2 -2
  61. data/lib/active_merchant/lib/validateable.rb +1 -1
  62. data/lib/support/gateway_support.rb +45 -0
  63. data/lib/tasks/cia.rb +1 -1
  64. data/script/generate +14 -0
  65. data/script/generator/base.rb +45 -0
  66. data/script/generator/generator.rb +24 -0
  67. data/script/generator/generators/gateway/gateway_generator.rb +14 -0
  68. data/script/generator/generators/gateway/templates/gateway.rb +73 -0
  69. data/script/generator/generators/gateway/templates/gateway_test.rb +41 -0
  70. data/script/generator/generators/gateway/templates/remote_gateway_test.rb +56 -0
  71. data/script/generator/generators/integration/integration_generator.rb +25 -0
  72. data/script/generator/generators/integration/templates/helper.rb +34 -0
  73. data/script/generator/generators/integration/templates/helper_test.rb +54 -0
  74. data/script/generator/generators/integration/templates/integration.rb +18 -0
  75. data/script/generator/generators/integration/templates/module_test.rb +9 -0
  76. data/script/generator/generators/integration/templates/notification.rb +100 -0
  77. data/script/generator/generators/integration/templates/notification_test.rb +41 -0
  78. data/script/generator/manifest.rb +20 -0
  79. data/test/extra/binding_of_caller.rb +80 -0
  80. data/test/extra/breakpoint.rb +547 -0
  81. data/test/fixtures.yml +251 -0
  82. data/test/remote_tests/remote_authorize_net_test.rb +113 -0
  83. data/test/remote_tests/remote_brain_tree_test.rb +78 -0
  84. data/test/remote_tests/remote_card_stream_test.rb +160 -0
  85. data/test/remote_tests/remote_cyber_source_test.rb +130 -0
  86. data/test/remote_tests/remote_data_cash_test.rb +155 -0
  87. data/test/remote_tests/remote_efsnet_test.rb +93 -0
  88. data/test/remote_tests/remote_eway_test.rb +71 -0
  89. data/test/remote_tests/remote_exact_test.rb +59 -0
  90. data/test/remote_tests/remote_gestpay_integration_test.rb +37 -0
  91. data/test/remote_tests/remote_linkpoint_test.rb +144 -0
  92. data/test/remote_tests/remote_moneris_test.rb +110 -0
  93. data/test/remote_tests/remote_net_registry_test.rb +120 -0
  94. data/test/remote_tests/remote_pay_junction_test.rb +162 -0
  95. data/test/remote_tests/remote_payflow_express_test.rb +50 -0
  96. data/test/remote_tests/remote_payflow_test.rb +241 -0
  97. data/test/remote_tests/remote_payflow_uk_test.rb +172 -0
  98. data/test/remote_tests/remote_payment_express_test.rb +136 -0
  99. data/test/remote_tests/remote_paypal_express_test.rb +49 -0
  100. data/test/remote_tests/remote_paypal_integration_test.rb +14 -0
  101. data/test/remote_tests/remote_paypal_test.rb +163 -0
  102. data/test/remote_tests/remote_plugnpay_test.rb +70 -0
  103. data/test/remote_tests/remote_protx_test.rb +184 -0
  104. data/test/remote_tests/remote_psigate_test.rb +87 -0
  105. data/test/remote_tests/remote_psl_card_test.rb +105 -0
  106. data/test/remote_tests/remote_quickpay_test.rb +182 -0
  107. data/test/remote_tests/remote_realex_test.rb +227 -0
  108. data/test/remote_tests/remote_secure_pay_test.rb +36 -0
  109. data/test/remote_tests/remote_trans_first_test.rb +37 -0
  110. data/test/remote_tests/remote_trust_commerce_test.rb +136 -0
  111. data/test/remote_tests/remote_usa_epay_test.rb +57 -0
  112. data/test/remote_tests/remote_verifi_test.rb +107 -0
  113. data/test/remote_tests/remote_viaklix_test.rb +53 -0
  114. data/test/test_helper.rb +132 -0
  115. data/test/unit/base_test.rb +61 -0
  116. data/test/unit/country_code_test.rb +33 -0
  117. data/test/unit/country_test.rb +64 -0
  118. data/test/unit/credit_card_formatting_test.rb +24 -0
  119. data/test/unit/credit_card_methods_test.rb +37 -0
  120. data/test/unit/credit_card_test.rb +365 -0
  121. data/test/unit/gateways/authorize_net_test.rb +140 -0
  122. data/test/unit/gateways/bogus_test.rb +43 -0
  123. data/test/unit/gateways/brain_tree_test.rb +77 -0
  124. data/test/unit/gateways/card_stream_test.rb +37 -0
  125. data/test/unit/gateways/cyber_source_test.rb +151 -0
  126. data/test/unit/gateways/data_cash_test.rb +23 -0
  127. data/test/unit/gateways/efsnet_test.rb +70 -0
  128. data/test/unit/gateways/eway_test.rb +105 -0
  129. data/test/unit/gateways/exact_test.rb +118 -0
  130. data/test/unit/gateways/gateway_test.rb +24 -0
  131. data/test/unit/gateways/linkpoint_test.rb +165 -0
  132. data/test/unit/gateways/moneris_test.rb +167 -0
  133. data/test/unit/gateways/net_registry_test.rb +478 -0
  134. data/test/unit/gateways/pay_junction_test.rb +61 -0
  135. data/test/unit/gateways/payflow_express_test.rb +165 -0
  136. data/test/unit/gateways/payflow_express_uk_test.rb +14 -0
  137. data/test/unit/gateways/payflow_test.rb +230 -0
  138. data/test/unit/gateways/payflow_uk_test.rb +68 -0
  139. data/test/unit/gateways/payment_express_test.rb +215 -0
  140. data/test/unit/gateways/paypal_express_test.rb +222 -0
  141. data/test/unit/gateways/paypal_test.rb +241 -0
  142. data/test/unit/gateways/plugnpay_test.rb +79 -0
  143. data/test/unit/gateways/protx_test.rb +110 -0
  144. data/test/unit/gateways/psigate_test.rb +110 -0
  145. data/test/unit/gateways/psl_card_test.rb +51 -0
  146. data/test/unit/gateways/quickpay_test.rb +125 -0
  147. data/test/unit/gateways/realex_test.rb +150 -0
  148. data/test/unit/gateways/secure_pay_test.rb +78 -0
  149. data/test/unit/gateways/trans_first_test.rb +125 -0
  150. data/test/unit/gateways/trust_commerce_test.rb +57 -0
  151. data/test/unit/gateways/usa_epay_test.rb +117 -0
  152. data/test/unit/gateways/verifi_test.rb +91 -0
  153. data/test/unit/gateways/viaklix_test.rb +72 -0
  154. data/test/unit/integrations/action_view_helper_test.rb +54 -0
  155. data/test/unit/integrations/bogus_module_test.rb +16 -0
  156. data/test/unit/integrations/chronopay_module_test.rb +9 -0
  157. data/test/unit/integrations/gestpay_module_test.rb +10 -0
  158. data/test/unit/integrations/helpers/bogus_helper_test.rb +28 -0
  159. data/test/unit/integrations/helpers/chronopay_helper_test.rb +67 -0
  160. data/test/unit/integrations/helpers/gestpay_helper_test.rb +100 -0
  161. data/test/unit/integrations/helpers/nochex_helper_test.rb +53 -0
  162. data/test/unit/integrations/helpers/paypal_helper_test.rb +162 -0
  163. data/test/unit/integrations/helpers/two_checkout_helper_test.rb +92 -0
  164. data/test/unit/integrations/nochex_module_test.rb +9 -0
  165. data/test/unit/integrations/notifications/chronopay_notification_test.rb +66 -0
  166. data/test/unit/integrations/notifications/gestpay_notification_test.rb +60 -0
  167. data/test/unit/integrations/notifications/nochex_notification_test.rb +51 -0
  168. data/test/unit/integrations/notifications/notification_test.rb +41 -0
  169. data/test/unit/integrations/notifications/paypal_notification_test.rb +85 -0
  170. data/test/unit/integrations/notifications/two_checkout_notification_test.rb +55 -0
  171. data/test/unit/integrations/paypal_module_test.rb +24 -0
  172. data/test/unit/integrations/two_checkout_module_test.rb +9 -0
  173. data/test/unit/post_data_test.rb +55 -0
  174. data/test/unit/response_test.rb +14 -0
  175. data/test/unit/validateable_test.rb +56 -0
  176. metadata +160 -7
  177. metadata.gz.sig +0 -0
  178. data/lib/active_merchant/billing/gateways/payflow/f73e89fd.0 +0 -17
@@ -4,10 +4,10 @@ module ActiveMerchant #:nodoc:
4
4
  keys = hash.keys
5
5
  params.each do |param|
6
6
  if param.is_a?(Array)
7
- raise ArgumentError.new("Missing required parameter: #{param}") unless keys.include?(param.first)
7
+ raise ArgumentError.new("Missing required parameter: #{param.first}") unless keys.include?(param.first)
8
8
 
9
9
  valid_options = param[1..-1]
10
- raise ArgumentError.new("Parameter :#{param.first} must be one of #{valid_options.inspect}") unless valid_options.include?(hash[param.first])
10
+ raise ArgumentError.new("Parameter: #{param.first} must be one of #{valid_options.to_sentence(:connector => 'or')}") unless valid_options.include?(hash[param.first])
11
11
  else
12
12
  raise ArgumentError.new("Missing required parameter: #{param}") unless keys.include?(param)
13
13
  end
@@ -28,7 +28,7 @@ module ActiveMerchant #:nodoc:
28
28
  end
29
29
 
30
30
  # This hash keeps the errors of the object
31
- class Errors < Hash
31
+ class Errors < HashWithIndifferentAccess
32
32
 
33
33
  def initialize(base)
34
34
  @base = base
@@ -0,0 +1,45 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'lib/active_merchant'
4
+
5
+
6
+ class GatewaySupport
7
+ attr_reader :gateways
8
+
9
+ def initialize
10
+ @gateways = []
11
+ ObjectSpace.each_object(Class) do |c|
12
+ if c.name =~ /Gateway/ && c.ancestors.reject{|a| a == c}.include?(ActiveMerchant::Billing::Gateway)
13
+ gateways << c
14
+ end
15
+ end
16
+
17
+ @gateways.delete(ActiveMerchant::Billing::BogusGateway)
18
+ @gateways = @gateways.sort_by(&:name)
19
+ end
20
+
21
+ def each_gateway
22
+ @gateways.each{|g| yield g }
23
+ end
24
+
25
+ def to_rdoc
26
+ each_gateway do |g|
27
+ puts "* {#{g.display_name}}[#{g.homepage_url}] - #{g.supported_countries.join(', ')}"
28
+ end
29
+ end
30
+
31
+ def to_textile
32
+ each_gateway do |g|
33
+ puts %/ * "#{g.display_name}":#{g.homepage_url} [#{g.supported_countries.join(', ')}]/
34
+ end
35
+ end
36
+
37
+ def to_s
38
+ each_gateway do |g|
39
+ puts "#{g.display_name} - #{g.homepage_url} [#{g.supported_countries.join(', ')}]"
40
+ end
41
+ end
42
+ end
43
+
44
+
45
+
data/lib/tasks/cia.rb CHANGED
@@ -71,7 +71,7 @@ task :cia do
71
71
 
72
72
  if build.has_changes? and not build.tests_ok?
73
73
 
74
- require_gem 'actionmailer'
74
+ require 'actionmailer'
75
75
 
76
76
  ActionMailer::Base.delivery_method = :sendmail
77
77
 
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'active_support'
5
+ rescue LoadError
6
+ require 'rubygems'
7
+ require 'active_support'
8
+ end
9
+
10
+ require 'erb'
11
+ require 'script/generator/generator'
12
+
13
+ ActiveMerchant::Generator::Generator.run(ARGV)
14
+
@@ -0,0 +1,45 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Generator
3
+ class Base
4
+ attr_reader :class_name, :name
5
+
6
+ def initialize(name, class_name)
7
+ @name = name
8
+ @class_name = class_name
9
+ end
10
+
11
+ def root
12
+ File.dirname(__FILE__) + '/../..'
13
+ end
14
+
15
+ def run
16
+ # Create the required directories
17
+ manifest.directories.each do |d|
18
+ if File.exists?("#{root}/#{d}")
19
+ puts "Ignoring existing directory #{d}"
20
+ else
21
+ puts "Creating directory #{d}"
22
+ Dir.mkdir("#{root}/#{d}")
23
+ end
24
+ end
25
+
26
+ manifest.templates.each do |t|
27
+ template = ERB.new(File.read(File.dirname(__FILE__) + "/generators/#{name}/templates/#{t[:input]}"), nil, '-')
28
+ File.open("#{root}/#{t[:output]}", 'w') do |f|
29
+ puts "Writing file #{t[:output]}"
30
+ f.puts template.result(binding)
31
+ end
32
+ end
33
+ end
34
+
35
+ def file_name
36
+ @class_name.underscore
37
+ end
38
+
39
+ protected
40
+ def record
41
+ Manifest.new{ |m| yield m }
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,24 @@
1
+ require 'script/generator/manifest'
2
+ require 'script/generator/base'
3
+
4
+ module ActiveMerchant #:nodoc:
5
+ module Generator
6
+ class Generator
7
+ def self.run(args = [])
8
+ unless args.size == 2
9
+ puts <<-BANNER
10
+ Usage: script/generate <generator> <ClassName>
11
+ Where <generator> is one of:
12
+ gateway - Generate a new payment gateway
13
+ integration - Generate a new payment integration
14
+ BANNER
15
+ exit
16
+ end
17
+
18
+ generator, class_name = ARGV
19
+ require "script/generator/generators/#{generator}/#{generator}_generator"
20
+ "#{generator.classify}Generator".constantize.new(generator, class_name).run
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,14 @@
1
+ class GatewayGenerator < ActiveMerchant::Generator::Base
2
+ def manifest
3
+ record do |m|
4
+ m.template 'gateway.rb',
5
+ "lib/active_merchant/billing/gateways/#{file_name}.rb"
6
+
7
+ m.template 'gateway_test.rb',
8
+ "test/unit/gateways/#{file_name}_test.rb"
9
+
10
+ m.template 'remote_gateway_test.rb',
11
+ "test/remote_tests/remote_#{file_name}_test.rb"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,73 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ class <%= class_name %>Gateway < Gateway
4
+ TEST_URL = 'https://example.com/test'
5
+ LIVE_URL = 'https://example.com/live'
6
+
7
+ attr_reader :url
8
+ attr_reader :response
9
+ attr_reader :options
10
+
11
+ def initialize(options = {})
12
+ #requires!(options, :login, :password)
13
+ @options = options
14
+ super
15
+ end
16
+
17
+ def authorize(money, creditcard, options = {})
18
+ post = {}
19
+ add_invoice(post, options)
20
+ add_creditcard(post, creditcard)
21
+ add_address(post, creditcard, options)
22
+ add_customer_data(post, options)
23
+
24
+ commit('authonly', money, post)
25
+ end
26
+
27
+ def purchase(money, creditcard, options = {})
28
+ post = {}
29
+ add_invoice(post, options)
30
+ add_creditcard(post, creditcard)
31
+ add_address(post, creditcard, options)
32
+ add_customer_data(post, options)
33
+
34
+ commit('sale', money, post)
35
+ end
36
+
37
+ def capture(money, authorization, options = {})
38
+ commit('capture', money, post)
39
+ end
40
+
41
+ def self.supported_cardtypes
42
+ [:visa, :master, :american_express]
43
+ end
44
+
45
+ private
46
+
47
+ def add_customer_data(post, options)
48
+ end
49
+
50
+ def add_address(post, creditcard, options)
51
+ end
52
+
53
+ def add_invoice(post, options)
54
+ end
55
+
56
+ def add_creditcard(post, creditcard)
57
+ end
58
+
59
+ def parse(body)
60
+ end
61
+
62
+ def commit(action, money, parameters)
63
+ end
64
+
65
+ def message_from(response)
66
+ end
67
+
68
+ def post_data(action, parameters = {})
69
+ end
70
+ end
71
+ end
72
+ end
73
+
@@ -0,0 +1,41 @@
1
+ require File.dirname(__FILE__) + '/../../test_helper'
2
+
3
+ class <%= class_name %>Test < Test::Unit::TestCase
4
+ AMOUNT = 100
5
+
6
+ def setup
7
+ @gateway = <%= class_name %>Gateway.new(fixtures(:<%= class_name.underscore %>))
8
+
9
+ @creditcard = credit_card('4242424242424242')
10
+
11
+ @address = { :address1 => '1234 My Street',
12
+ :address2 => 'Apt 1',
13
+ :company => 'Widgets Inc',
14
+ :city => 'Ottawa',
15
+ :state => 'ON',
16
+ :zip => 'K1C2N6',
17
+ :country => 'Canada',
18
+ :phone => '(555)555-5555'
19
+ }
20
+ end
21
+
22
+ def test_successful_request
23
+ @creditcard.number = 1
24
+ assert response = @gateway.purchase(AMOUNT, @creditcard, {})
25
+ assert_success response
26
+ assert_equal '5555', response.authorization
27
+ assert response.test?
28
+ end
29
+
30
+ def test_unsuccessful_request
31
+ @creditcard.number = 2
32
+ assert response = @gateway.purchase(AMOUNT, @creditcard, {})
33
+ assert_failure response
34
+ assert response.test?
35
+ end
36
+
37
+ def test_request_error
38
+ @creditcard.number = 3
39
+ assert_raise(Error){ @gateway.purchase(AMOUNT, @creditcard, {}) }
40
+ end
41
+ end
@@ -0,0 +1,56 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class Remote<%= class_name %>Test < Test::Unit::TestCase
4
+ AMOUNT = 100
5
+
6
+ def setup
7
+ @gateway = <%= class_name %>Gateway.new(fixtures(:<%= class_name.underscore %>))
8
+
9
+ @creditcard = credit_card('4000100011112224')
10
+
11
+ @declined_card = credit_card('4000300011112220')
12
+
13
+ @options = { :address => { :address1 => '1234 Shady Brook Lane',
14
+ :zip => '90210'
15
+ }
16
+ }
17
+ end
18
+
19
+ def test_successful_purchase
20
+ assert response = @gateway.purchase(AMOUNT, @creditcard, @options)
21
+ assert_equal 'REPLACE WITH SUCCESS MESSAGE', response.message
22
+ assert_success response
23
+ end
24
+
25
+ def test_unsuccessful_purchase
26
+ assert response = @gateway.purchase(AMOUNT, @declined_card, @options)
27
+ assert_equal 'REPLACE WITH FAILED PURCHASE MESSAGE', response.message
28
+ assert_failure response
29
+ end
30
+
31
+ def test_authorize_and_capture
32
+ amount = AMOUNT
33
+ assert auth = @gateway.authorize(amount, @creditcard, @options)
34
+ assert_success auth
35
+ assert_equal 'Success', auth.message
36
+ assert auth.authorization
37
+ assert capture = @gateway.capture(amount, auth.authorization)
38
+ assert_success capture
39
+ end
40
+
41
+ def test_failed_capture
42
+ assert response = @gateway.capture(AMOUNT, '')
43
+ assert_failure response
44
+ assert_equal 'REPLACE WITH GATEWAY FAILURE MESSAGE', response.message
45
+ end
46
+
47
+ def test_invalid_login
48
+ gateway = <%= class_name %>Gateway.new({
49
+ :login => '',
50
+ :password => ''
51
+ })
52
+ assert response = gateway.purchase(AMOUNT, @creditcard, @options)
53
+ assert_equal 'REPLACE WITH FAILURE MESSAGE', response.message
54
+ assert_failure response
55
+ end
56
+ end
@@ -0,0 +1,25 @@
1
+ class IntegrationGenerator < ActiveMerchant::Generator::Base
2
+ def manifest
3
+ @manifest ||= record do |m|
4
+ m.directory "lib/active_merchant/billing/integrations/#{file_name}"
5
+
6
+ m.template 'integration.rb',
7
+ "lib/active_merchant/billing/integrations/#{file_name}.rb"
8
+
9
+ m.template 'helper.rb',
10
+ "lib/active_merchant/billing/integrations/#{file_name}/helper.rb"
11
+
12
+ m.template 'notification.rb',
13
+ "lib/active_merchant/billing/integrations/#{file_name}/notification.rb"
14
+
15
+ m.template 'module_test.rb',
16
+ "test/unit/integrations/#{file_name}_module_test.rb"
17
+
18
+ m.template 'helper_test.rb',
19
+ "test/unit/integrations/helpers/#{file_name}_helper_test.rb"
20
+
21
+ m.template 'notification_test.rb',
22
+ "test/unit/integrations/notifications/#{file_name}_notification_test.rb"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,34 @@
1
+ module ActiveMerchant #:nodoc:
2
+ module Billing #:nodoc:
3
+ module Integrations #:nodoc:
4
+ module <%= class_name %>
5
+ class Helper < ActiveMerchant::Billing::Integrations::Helper
6
+ # Replace with the real mapping
7
+ mapping :account, ''
8
+ mapping :amount, ''
9
+
10
+ mapping :order, ''
11
+
12
+ mapping :customer, :first_name => '',
13
+ :last_name => '',
14
+ :email => '',
15
+ :phone => ''
16
+
17
+ mapping :billing_address, :city => '',
18
+ :address1 => '',
19
+ :address2 => '',
20
+ :state => '',
21
+ :zip => '',
22
+ :country => ''
23
+
24
+ mapping :notify_url, ''
25
+ mapping :return_url, ''
26
+ mapping :cancel_return_url, ''
27
+ mapping :description, ''
28
+ mapping :tax, ''
29
+ mapping :shipping, ''
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,54 @@
1
+ require File.dirname(__FILE__) + '/../../../test_helper'
2
+
3
+ class <%= class_name %>HelperTest < Test::Unit::TestCase
4
+ include ActiveMerchant::Billing::Integrations
5
+
6
+ def setup
7
+ @helper = <%= class_name %>::Helper.new('order-500','cody@example.com', :amount => 500, :currency => 'USD')
8
+ end
9
+
10
+ def test_basic_helper_fields
11
+ assert_field '', 'cody@example.com'
12
+
13
+ assert_field '', '5.00'
14
+ assert_field '', 'order-500'
15
+ end
16
+
17
+ def test_customer_fields
18
+ @helper.customer :first_name => 'Cody', :last_name => 'Fauser', :email => 'cody@example.com'
19
+ assert_field '', 'Cody'
20
+ assert_field '', 'Fauser'
21
+ assert_field '', 'cody@example.com'
22
+ end
23
+
24
+ def test_address_mapping
25
+ @helper.billing_address :address1 => '1 My Street',
26
+ :address2 => '',
27
+ :city => 'Leeds',
28
+ :state => 'Yorkshire',
29
+ :zip => 'LS2 7EE',
30
+ :country => 'CA'
31
+
32
+ assert_field '', '1 My Street'
33
+ assert_field '', 'Leeds'
34
+ assert_field '', 'Yorkshire'
35
+ assert_field '', 'LS2 7EE'
36
+ end
37
+
38
+ def test_unknown_address_mapping
39
+ @helper.billing_address :farm => 'CA'
40
+ assert_equal 3, @helper.fields.size
41
+ end
42
+
43
+ def test_unknown_mapping
44
+ assert_nothing_raised do
45
+ @helper.company_address :address => '500 Dwemthy Fox Road'
46
+ end
47
+ end
48
+
49
+ def test_setting_invalid_address_field
50
+ fields = @helper.fields.dup
51
+ @helper.billing_address :street => 'My Street'
52
+ assert_equal fields, @helper.fields
53
+ end
54
+ end