require 'test_helper'
class LinkpointTest < Test::Unit::TestCase
def setup
Base.mode = :test
@gateway = LinkpointGateway.new(
:login => 123123,
:pem => 'PEM'
)
@credit_card = credit_card('4111111111111111')
@options = { :order_id => 1000, :billing_address => address }
end
def test_credit_card_formatting
assert_equal '04', @gateway.send(:format_creditcard_expiry_year, 2004)
assert_equal '04', @gateway.send(:format_creditcard_expiry_year, '2004')
assert_equal '04', @gateway.send(:format_creditcard_expiry_year, 4)
assert_equal '04', @gateway.send(:format_creditcard_expiry_year, '04')
end
def test_successful_authorization
@gateway.expects(:ssl_post).returns(successful_authorization_response)
assert response = @gateway.authorize(@amount, @credit_card, @options)
assert_instance_of Response, response
assert_success response
assert_equal '1000', response.authorization
end
def test_successful_capture
@gateway.expects(:ssl_post).returns(successful_capture_response)
assert response = @gateway.capture(@email, '1000', @options)
assert_instance_of Response, response
assert_success response
assert_equal '1000', response.authorization
end
def test_successful_purchase
@gateway.expects(:ssl_post).returns(successful_purchase_response)
assert response = @gateway.purchase(@amount, @credit_card, @options)
assert_instance_of Response, response
assert_success response
assert_equal '1000', response.authorization
end
def test_failed_purchase
@gateway.expects(:ssl_post).returns(failed_purchase_response)
assert response = @gateway.purchase(@amount, @credit_card, @options)
assert_failure response
end
def test_recurring
@gateway.expects(:ssl_post).returns(successful_recurring_response)
assert response = @gateway.recurring(2400, @credit_card, :order_id => 1003, :installments => 12, :startdate => "immediate", :periodicity => :monthly)
assert_success response
end
def test_amount_style
assert_equal '10.34', @gateway.send(:amount, 1034)
assert_raise(ArgumentError) do
@gateway.send(:amount, '10.34')
end
end
def test_purchase_is_valid_xml
parameters = @gateway.send(:parameters, 1000, @credit_card, :ordertype => "SALE", :order_id => 1004,
:billing_address => {
:address1 => '1313 lucky lane',
:city => 'Lost Angeles',
:state => 'CA',
:zip => '90210'
}
)
assert data = @gateway.send(:post_data, @amount, @credit_card, @options)
assert REXML::Document.new(data)
end
def test_recurring_is_valid_xml
parameters = @gateway.send(:parameters, 1000, @credit_card, :ordertype => "SALE", :action => "SUBMIT", :installments => 12, :startdate => "immediate", :periodicity => "monthly", :order_id => 1006,
:billing_address => {
:address1 => '1313 lucky lane',
:city => 'Lost Angeles',
:state => 'CA',
:zip => '90210'
}
)
assert data = @gateway.send(:post_data, @amount, @credit_card, @options)
assert REXML::Document.new(data)
end
def test_line_items_are_valid_xml
options = {:ordertype => "SALE", :action => "SUBMIT", :installments => 12, :startdate => "immediate", :periodicity => "monthly", :order_id => 1006,
:billing_address => {
:address1 => '1313 lucky lane',
:city => 'Lost Angeles',
:state => 'CA',
:zip => '90210'
},
:line_items => [{:id => '123456', :description => "Logo T-Shirt", :price =>
"12.00", :quantity => '1', :options => [{:name => "Color", :value =>
"Red"}, {:name => "Size", :value => "XL"}]},{:id => '111', :description => "keychain", :price => "3.00", :quantity => '1'}]}
assert data = @gateway.send(:post_data, @amount, @credit_card, options)
assert REXML::Document.new(data)
end
def test_declined_purchase_is_valid_xml
@gateway = LinkpointGateway.new(:login => 123123, :pem => 'PEM')
parameters = @gateway.send(:parameters, 1000, @credit_card, :ordertype => "SALE", :order_id => 1005,
:billing_address => {
:address1 => '1313 lucky lane',
:city => 'Lost Angeles',
:state => 'CA',
:zip => '90210'
}
)
assert data = @gateway.send(:post_data, @amount, @credit_card, @options)
assert REXML::Document.new(data)
end
def test_overriding_test_mode
Base.gateway_mode = :production
gateway = LinkpointGateway.new(
:login => 'LOGIN',
:pem => 'PEM',
:test => true
)
assert gateway.test?
end
def test_using_production_mode
Base.gateway_mode = :production
gateway = LinkpointGateway.new(
:login => 'LOGIN',
:pem => 'PEM'
)
assert !gateway.test?
end
def test_supported_countries
assert_equal ['US'], LinkpointGateway.supported_countries
end
def test_supported_card_types
assert_equal [:visa, :master, :american_express, :discover, :jcb, :diners_club], LinkpointGateway.supported_cardtypes
end
def test_avs_result
@gateway.expects(:ssl_post).returns(successful_authorization_response)
response = @gateway.purchase(@amount, @credit_card, @options)
assert_equal 'N', response.avs_result['code']
end
def test_cvv_result
@gateway.expects(:ssl_post).returns(successful_authorization_response)
response = @gateway.purchase(@amount, @credit_card, @options)
assert_equal 'M', response.cvv_result['code']
end
private
def successful_authorization_response
'CSISun Jan 6 21:41:31 200800044861821000APPROVED1234560004486182:NNNM:100018312899:1199680890APPROVEDNNNM'
end
def successful_capture_response
'CSIWed Dec 2 13:57:19 200900095545661000ACCEPTED0000000009554566: :9554566:1259780240APPROVED '
end
def successful_purchase_response
'CSISun Jan 6 21:45:22 200800044861951000APPROVED1234560004486195:NNNM:100018312912:1199681121APPROVEDNNNM'
end
def failed_purchase_response
'Sun Jan 6 21:50:51 2008SGS-002300: Invalid credit card type.2aec6babe076111deb2c94c21181d9feDECLINED'
end
def successful_recurring_response
'CSISun Jan 6 21:49:00 200800044861982206b7c9a31de5fb077913134011059dAPPROVED1234560004486198:NNNM:100018312915:1199681339APPROVEDNNN'
end
end