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.
- data.tar.gz.sig +0 -0
- data/CHANGELOG +226 -0
- data/CONTRIBUTERS +52 -0
- data/README +34 -24
- data/Rakefile +152 -0
- data/gem-public_cert.pem +20 -0
- data/init.rb +3 -0
- data/lib/active_merchant.rb +3 -1
- data/lib/active_merchant/billing/credit_card.rb +21 -17
- data/lib/active_merchant/billing/credit_card_methods.rb +17 -19
- data/lib/active_merchant/billing/gateway.rb +160 -44
- data/lib/active_merchant/billing/gateways.rb +2 -15
- data/lib/active_merchant/billing/gateways/authorize_net.rb +21 -21
- data/lib/active_merchant/billing/gateways/bogus.rb +6 -6
- data/lib/active_merchant/billing/gateways/brain_tree.rb +191 -0
- data/lib/active_merchant/billing/gateways/card_stream.rb +207 -0
- data/lib/active_merchant/billing/gateways/cyber_source.rb +402 -0
- data/lib/active_merchant/billing/gateways/data_cash.rb +41 -97
- data/lib/active_merchant/billing/gateways/efsnet.rb +256 -0
- data/lib/active_merchant/billing/gateways/eway.rb +77 -29
- data/lib/active_merchant/billing/gateways/exact.rb +230 -0
- data/lib/active_merchant/billing/gateways/linkpoint.rb +6 -33
- data/lib/active_merchant/billing/gateways/moneris.rb +155 -125
- data/lib/active_merchant/billing/gateways/net_registry.rb +257 -0
- data/lib/active_merchant/billing/gateways/pay_junction.rb +407 -0
- data/lib/active_merchant/billing/gateways/payflow.rb +163 -25
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +56 -38
- data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +10 -1
- data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +9 -0
- data/lib/active_merchant/billing/gateways/payflow_express.rb +36 -11
- data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +6 -0
- data/lib/active_merchant/billing/gateways/payflow_uk.rb +7 -3
- data/lib/active_merchant/billing/gateways/payment_express.rb +261 -0
- data/lib/active_merchant/billing/gateways/paypal.rb +18 -4
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +31 -15
- data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +8 -0
- data/lib/active_merchant/billing/gateways/paypal_express.rb +33 -8
- data/lib/active_merchant/billing/gateways/plugnpay.rb +300 -0
- data/lib/active_merchant/billing/gateways/protx.rb +285 -0
- data/lib/active_merchant/billing/gateways/psigate.rb +13 -12
- data/lib/active_merchant/billing/gateways/psl_card.rb +297 -0
- data/lib/active_merchant/billing/gateways/quickpay.rb +197 -0
- data/lib/active_merchant/billing/gateways/realex.rb +212 -0
- data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
- data/lib/active_merchant/billing/gateways/trans_first.rb +136 -0
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +43 -20
- data/lib/active_merchant/billing/gateways/usa_epay.rb +6 -5
- data/lib/active_merchant/billing/gateways/verifi.rb +235 -0
- data/lib/active_merchant/billing/gateways/viaklix.rb +171 -0
- data/lib/active_merchant/billing/integrations/gestpay/helper.rb +0 -2
- data/lib/active_merchant/billing/integrations/helper.rb +8 -1
- data/lib/active_merchant/billing/integrations/nochex.rb +62 -1
- data/lib/active_merchant/billing/integrations/nochex/notification.rb +9 -16
- data/lib/active_merchant/billing/integrations/notification.rb +1 -1
- data/lib/active_merchant/billing/integrations/paypal/helper.rb +59 -46
- data/lib/active_merchant/billing/integrations/paypal/notification.rb +14 -47
- data/lib/active_merchant/lib/error.rb +4 -0
- data/lib/active_merchant/lib/post_data.rb +22 -0
- data/lib/active_merchant/lib/posts_data.rb +23 -5
- data/lib/active_merchant/lib/requires_parameters.rb +2 -2
- data/lib/active_merchant/lib/validateable.rb +1 -1
- data/lib/support/gateway_support.rb +45 -0
- data/lib/tasks/cia.rb +1 -1
- data/script/generate +14 -0
- data/script/generator/base.rb +45 -0
- data/script/generator/generator.rb +24 -0
- data/script/generator/generators/gateway/gateway_generator.rb +14 -0
- data/script/generator/generators/gateway/templates/gateway.rb +73 -0
- data/script/generator/generators/gateway/templates/gateway_test.rb +41 -0
- data/script/generator/generators/gateway/templates/remote_gateway_test.rb +56 -0
- data/script/generator/generators/integration/integration_generator.rb +25 -0
- data/script/generator/generators/integration/templates/helper.rb +34 -0
- data/script/generator/generators/integration/templates/helper_test.rb +54 -0
- data/script/generator/generators/integration/templates/integration.rb +18 -0
- data/script/generator/generators/integration/templates/module_test.rb +9 -0
- data/script/generator/generators/integration/templates/notification.rb +100 -0
- data/script/generator/generators/integration/templates/notification_test.rb +41 -0
- data/script/generator/manifest.rb +20 -0
- data/test/extra/binding_of_caller.rb +80 -0
- data/test/extra/breakpoint.rb +547 -0
- data/test/fixtures.yml +251 -0
- data/test/remote_tests/remote_authorize_net_test.rb +113 -0
- data/test/remote_tests/remote_brain_tree_test.rb +78 -0
- data/test/remote_tests/remote_card_stream_test.rb +160 -0
- data/test/remote_tests/remote_cyber_source_test.rb +130 -0
- data/test/remote_tests/remote_data_cash_test.rb +155 -0
- data/test/remote_tests/remote_efsnet_test.rb +93 -0
- data/test/remote_tests/remote_eway_test.rb +71 -0
- data/test/remote_tests/remote_exact_test.rb +59 -0
- data/test/remote_tests/remote_gestpay_integration_test.rb +37 -0
- data/test/remote_tests/remote_linkpoint_test.rb +144 -0
- data/test/remote_tests/remote_moneris_test.rb +110 -0
- data/test/remote_tests/remote_net_registry_test.rb +120 -0
- data/test/remote_tests/remote_pay_junction_test.rb +162 -0
- data/test/remote_tests/remote_payflow_express_test.rb +50 -0
- data/test/remote_tests/remote_payflow_test.rb +241 -0
- data/test/remote_tests/remote_payflow_uk_test.rb +172 -0
- data/test/remote_tests/remote_payment_express_test.rb +136 -0
- data/test/remote_tests/remote_paypal_express_test.rb +49 -0
- data/test/remote_tests/remote_paypal_integration_test.rb +14 -0
- data/test/remote_tests/remote_paypal_test.rb +163 -0
- data/test/remote_tests/remote_plugnpay_test.rb +70 -0
- data/test/remote_tests/remote_protx_test.rb +184 -0
- data/test/remote_tests/remote_psigate_test.rb +87 -0
- data/test/remote_tests/remote_psl_card_test.rb +105 -0
- data/test/remote_tests/remote_quickpay_test.rb +182 -0
- data/test/remote_tests/remote_realex_test.rb +227 -0
- data/test/remote_tests/remote_secure_pay_test.rb +36 -0
- data/test/remote_tests/remote_trans_first_test.rb +37 -0
- data/test/remote_tests/remote_trust_commerce_test.rb +136 -0
- data/test/remote_tests/remote_usa_epay_test.rb +57 -0
- data/test/remote_tests/remote_verifi_test.rb +107 -0
- data/test/remote_tests/remote_viaklix_test.rb +53 -0
- data/test/test_helper.rb +132 -0
- data/test/unit/base_test.rb +61 -0
- data/test/unit/country_code_test.rb +33 -0
- data/test/unit/country_test.rb +64 -0
- data/test/unit/credit_card_formatting_test.rb +24 -0
- data/test/unit/credit_card_methods_test.rb +37 -0
- data/test/unit/credit_card_test.rb +365 -0
- data/test/unit/gateways/authorize_net_test.rb +140 -0
- data/test/unit/gateways/bogus_test.rb +43 -0
- data/test/unit/gateways/brain_tree_test.rb +77 -0
- data/test/unit/gateways/card_stream_test.rb +37 -0
- data/test/unit/gateways/cyber_source_test.rb +151 -0
- data/test/unit/gateways/data_cash_test.rb +23 -0
- data/test/unit/gateways/efsnet_test.rb +70 -0
- data/test/unit/gateways/eway_test.rb +105 -0
- data/test/unit/gateways/exact_test.rb +118 -0
- data/test/unit/gateways/gateway_test.rb +24 -0
- data/test/unit/gateways/linkpoint_test.rb +165 -0
- data/test/unit/gateways/moneris_test.rb +167 -0
- data/test/unit/gateways/net_registry_test.rb +478 -0
- data/test/unit/gateways/pay_junction_test.rb +61 -0
- data/test/unit/gateways/payflow_express_test.rb +165 -0
- data/test/unit/gateways/payflow_express_uk_test.rb +14 -0
- data/test/unit/gateways/payflow_test.rb +230 -0
- data/test/unit/gateways/payflow_uk_test.rb +68 -0
- data/test/unit/gateways/payment_express_test.rb +215 -0
- data/test/unit/gateways/paypal_express_test.rb +222 -0
- data/test/unit/gateways/paypal_test.rb +241 -0
- data/test/unit/gateways/plugnpay_test.rb +79 -0
- data/test/unit/gateways/protx_test.rb +110 -0
- data/test/unit/gateways/psigate_test.rb +110 -0
- data/test/unit/gateways/psl_card_test.rb +51 -0
- data/test/unit/gateways/quickpay_test.rb +125 -0
- data/test/unit/gateways/realex_test.rb +150 -0
- data/test/unit/gateways/secure_pay_test.rb +78 -0
- data/test/unit/gateways/trans_first_test.rb +125 -0
- data/test/unit/gateways/trust_commerce_test.rb +57 -0
- data/test/unit/gateways/usa_epay_test.rb +117 -0
- data/test/unit/gateways/verifi_test.rb +91 -0
- data/test/unit/gateways/viaklix_test.rb +72 -0
- data/test/unit/integrations/action_view_helper_test.rb +54 -0
- data/test/unit/integrations/bogus_module_test.rb +16 -0
- data/test/unit/integrations/chronopay_module_test.rb +9 -0
- data/test/unit/integrations/gestpay_module_test.rb +10 -0
- data/test/unit/integrations/helpers/bogus_helper_test.rb +28 -0
- data/test/unit/integrations/helpers/chronopay_helper_test.rb +67 -0
- data/test/unit/integrations/helpers/gestpay_helper_test.rb +100 -0
- data/test/unit/integrations/helpers/nochex_helper_test.rb +53 -0
- data/test/unit/integrations/helpers/paypal_helper_test.rb +162 -0
- data/test/unit/integrations/helpers/two_checkout_helper_test.rb +92 -0
- data/test/unit/integrations/nochex_module_test.rb +9 -0
- data/test/unit/integrations/notifications/chronopay_notification_test.rb +66 -0
- data/test/unit/integrations/notifications/gestpay_notification_test.rb +60 -0
- data/test/unit/integrations/notifications/nochex_notification_test.rb +51 -0
- data/test/unit/integrations/notifications/notification_test.rb +41 -0
- data/test/unit/integrations/notifications/paypal_notification_test.rb +85 -0
- data/test/unit/integrations/notifications/two_checkout_notification_test.rb +55 -0
- data/test/unit/integrations/paypal_module_test.rb +24 -0
- data/test/unit/integrations/two_checkout_module_test.rb +9 -0
- data/test/unit/post_data_test.rb +55 -0
- data/test/unit/response_test.rb +14 -0
- data/test/unit/validateable_test.rb +56 -0
- metadata +160 -7
- metadata.gz.sig +0 -0
- 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
|
|
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
|
|
@@ -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
data/script/generate
ADDED
|
@@ -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
|