require 'test_helper' class AuthorizeNetCimTest < Test::Unit::TestCase def setup @gateway = AuthorizeNetCimGateway.new( :login => 'X', :password => 'Y' ) @amount = 100 @credit_card = credit_card @address = address @customer_profile_id = '3187' @customer_payment_profile_id = '7813' @customer_address_id = '4321' @payment = { :credit_card => @credit_card } @profile = { :merchant_customer_id => 'Up to 20 chars', # Optional :description => 'Up to 255 Characters', # Optional :email => 'Up to 255 Characters', # Optional :payment_profiles => { # Optional :customer_type => 'individual or business', # Optional :bill_to => @address, :payment => @payment }, :ship_to_list => { :first_name => 'John', :last_name => 'Doe', :company => 'Widgets, Inc', :address1 => '1234 Fake Street', :city => 'Anytown', :state => 'MD', :zip => '12345', :country => 'USA', :phone_number => '(123)123-1234', # Optional - Up to 25 digits (no letters) :fax_number => '(123)123-1234' # Optional - Up to 25 digits (no letters) } } @options = { :ref_id => '1234', # Optional :profile => @profile } end def test_expdate_formatting assert_equal '2009-09', @gateway.send(:expdate, credit_card('4111111111111111', :month => "9", :year => "2009")) assert_equal '2013-11', @gateway.send(:expdate, credit_card('4111111111111111', :month => "11", :year => "2013")) end def test_should_create_customer_profile_request @gateway.expects(:ssl_post).returns(successful_create_customer_profile_response) assert response = @gateway.create_customer_profile(@options) assert_instance_of Response, response assert_success response assert_equal @customer_profile_id, response.authorization assert_equal "Successful.", response.message end def test_should_create_customer_payment_profile_request @gateway.expects(:ssl_post).returns(successful_create_customer_payment_profile_response) assert response = @gateway.create_customer_payment_profile( :customer_profile_id => @customer_profile_id, :payment_profile => { :customer_type => 'individual', :bill_to => @address, :payment => @payment }, :validation_mode => :test ) assert_instance_of Response, response assert_success response assert_equal @customer_payment_profile_id, response.params['customer_payment_profile_id'] 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'] end def test_should_create_customer_shipping_address_request @gateway.expects(:ssl_post).returns(successful_create_customer_shipping_address_response) assert response = @gateway.create_customer_shipping_address( :customer_profile_id => @customer_profile_id, :address => { :first_name => 'John', :last_name => 'Doe', :company => 'Widgets, Inc', :address1 => '1234 Fake Street', :city => 'Anytown', :state => 'MD', :country => 'USA', :phone_number => '(123)123-1234', :fax_number => '(123)123-1234' } ) assert_instance_of Response, response assert_success response assert_nil response.authorization assert_equal 'customerAddressId', response.params['customer_address_id'] end def test_should_create_customer_profile_transaction_auth_only_and_then_capture_only_requests @gateway.expects(:ssl_post).returns(successful_create_customer_profile_transaction_response(:auth_only)) assert response = @gateway.create_customer_profile_transaction( :transaction => { :customer_profile_id => @customer_profile_id, :customer_payment_profile_id => @customer_payment_profile_id, :type => :auth_only, :amount => @amount } ) assert_instance_of Response, response assert_success response assert_nil response.authorization assert_equal 'This transaction has been approved.', response.params['direct_response']['message'] assert_equal 'auth_only', response.params['direct_response']['transaction_type'] assert_equal 'Gw4NGI', approval_code = response.params['direct_response']['approval_code'] assert_equal '508223659', response.params['direct_response']['transaction_id'] assert_equal '1', response.params['direct_response']['response_code'] assert_equal '1', response.params['direct_response']['response_subcode'] assert_equal '1', response.params['direct_response']['response_reason_code'] assert_equal 'Y', response.params['direct_response']['avs_response'] assert_equal '', response.params['direct_response']['invoice_number'] assert_equal '', response.params['direct_response']['order_description'] assert_equal '100.00', response.params['direct_response']['amount'] assert_equal 'CC', response.params['direct_response']['method'] assert_equal 'Up to 20 chars', response.params['direct_response']['customer_id'] assert_equal '', response.params['direct_response']['first_name'] assert_equal '', response.params['direct_response']['last_name'] assert_equal '', response.params['direct_response']['company'] assert_equal '', response.params['direct_response']['address'] assert_equal '', response.params['direct_response']['city'] assert_equal '', response.params['direct_response']['state'] assert_equal '', response.params['direct_response']['zip_code'] assert_equal '', response.params['direct_response']['country'] assert_equal '', response.params['direct_response']['phone'] assert_equal '', response.params['direct_response']['fax'] assert_equal 'Up to 255 Characters', response.params['direct_response']['email_address'] assert_equal '', response.params['direct_response']['ship_to_first_name'] assert_equal '', response.params['direct_response']['ship_to_last_name'] assert_equal '', response.params['direct_response']['ship_to_company'] assert_equal '', response.params['direct_response']['ship_to_address'] assert_equal '', response.params['direct_response']['ship_to_city'] assert_equal '', response.params['direct_response']['ship_to_state'] assert_equal '', response.params['direct_response']['ship_to_zip_code'] assert_equal '', response.params['direct_response']['ship_to_country'] assert_equal '', response.params['direct_response']['tax'] assert_equal '', response.params['direct_response']['duty'] assert_equal '', response.params['direct_response']['freight'] assert_equal '', response.params['direct_response']['tax_exempt'] assert_equal '', response.params['direct_response']['purchase_order_number'] assert_equal '6E5334C13C78EA078173565FD67318E4', response.params['direct_response']['md5_hash'] assert_equal '', response.params['direct_response']['card_code'] assert_equal '2', response.params['direct_response']['cardholder_authentication_verification_response'] @gateway.expects(:ssl_post).returns(successful_create_customer_profile_transaction_response(:capture_only)) assert response = @gateway.create_customer_profile_transaction( :transaction => { :customer_profile_id => @customer_profile_id, :customer_payment_profile_id => @customer_payment_profile_id, :type => :capture_only, :amount => @amount, :approval_code => approval_code } ) assert_instance_of Response, response assert_success response assert_nil response.authorization assert_equal 'This transaction has been approved.', response.params['direct_response']['message'] end def test_should_create_customer_profile_transaction_auth_capture_request @gateway.expects(:ssl_post).returns(successful_create_customer_profile_transaction_response(:auth_capture)) assert response = @gateway.create_customer_profile_transaction( :transaction => { :customer_profile_id => @customer_profile_id, :customer_payment_profile_id => @customer_payment_profile_id, :type => :auth_capture, :order => { :invoice_number => '1234', :description => 'Test Order Description', :purchase_order_number => '4321' }, :amount => @amount } ) assert_instance_of Response, response assert_success response assert_nil response.authorization assert_equal 'This transaction has been approved.', response.params['direct_response']['message'] end def test_should_delete_customer_profile_request @gateway.expects(:ssl_post).returns(successful_delete_customer_profile_response) assert response = @gateway.delete_customer_profile(:customer_profile_id => @customer_profile_id) assert_instance_of Response, response assert_success response assert_equal @customer_profile_id, response.authorization end def test_should_delete_customer_payment_profile_request @gateway.expects(:ssl_post).returns(successful_delete_customer_payment_profile_response) assert response = @gateway.delete_customer_payment_profile(:customer_profile_id => @customer_profile_id, :customer_payment_profile_id => @customer_payment_profile_id) assert_instance_of Response, response assert_success response assert_nil response.authorization end def test_should_delete_customer_shipping_address_request @gateway.expects(:ssl_post).returns(successful_delete_customer_shipping_address_response) assert response = @gateway.delete_customer_shipping_address(:customer_profile_id => @customer_profile_id, :customer_address_id => @customer_address_id) assert_instance_of Response, response assert_success response assert_nil response.authorization end def test_should_get_customer_profile_request @gateway.expects(:ssl_post).returns(successful_get_customer_profile_response) assert response = @gateway.get_customer_profile(:customer_profile_id => @customer_profile_id) assert_instance_of Response, response assert_success response assert_equal @customer_profile_id, response.authorization end def test_should_get_customer_profile_request_with_multiple_payment_profiles @gateway.expects(:ssl_post).returns(successful_get_customer_profile_response_with_multiple_payment_profiles) assert response = @gateway.get_customer_profile(:customer_profile_id => @customer_profile_id) assert_instance_of Response, response assert_success response assert_equal @customer_profile_id, response.authorization assert_equal 2, response.params['profile']['payment_profiles'].size end def test_should_get_customer_payment_profile_request @gateway.expects(:ssl_post).returns(successful_get_customer_payment_profile_response) assert response = @gateway.get_customer_payment_profile( :customer_profile_id => @customer_profile_id, :customer_payment_profile_id => @customer_payment_profile_id ) assert_instance_of Response, response assert_success response assert_nil response.authorization assert_equal @customer_payment_profile_id, response.params['profile']['payment_profiles']['customer_payment_profile_id'] end def test_should_get_customer_shipping_address_request @gateway.expects(:ssl_post).returns(successful_get_customer_shipping_address_response) assert response = @gateway.get_customer_shipping_address( :customer_profile_id => @customer_profile_id, :customer_address_id => @customer_address_id ) assert_instance_of Response, response assert_success response assert_nil response.authorization end def test_should_update_customer_profile_request @gateway.expects(:ssl_post).returns(successful_update_customer_profile_response) assert response = @gateway.update_customer_profile( :profile => { :customer_profile_id => @customer_profile_id, :email => 'new email address' } ) assert_instance_of Response, response assert_success response assert_equal @customer_profile_id, response.authorization end def test_should_update_customer_payment_profile_request @gateway.expects(:ssl_post).returns(successful_update_customer_payment_profile_response) assert response = @gateway.update_customer_payment_profile( :customer_profile_id => @customer_profile_id, :payment_profile => { :customer_payment_profile_id => @customer_payment_profile_id, :customer_type => 'business' } ) assert_instance_of Response, response assert_success response assert_nil response.authorization end def test_should_update_customer_shipping_address_request @gateway.expects(:ssl_post).returns(successful_update_customer_shipping_address_response) assert response = @gateway.update_customer_shipping_address( :customer_profile_id => @customer_profile_id, :address => { :customer_address_id => @customer_address_id, :city => 'New City' } ) assert_instance_of Response, response assert_success response assert_nil response.authorization end def test_should_validate_customer_payment_profile_request @gateway.expects(:ssl_post).returns(successful_validate_customer_payment_profile_response) assert response = @gateway.validate_customer_payment_profile( :customer_profile_id => @customer_profile_id, :customer_payment_profile_id => @customer_payment_profile_id, :customer_address_id => @customer_address_id, :validation_mode => :live ) assert_instance_of Response, response assert_success response assert_nil response.authorization assert_equal 'This transaction has been approved.', response.params['direct_response']['message'] end private def successful_create_customer_profile_response <<-XML refid1 Ok I00001 Successful. #{@customer_profile_id} XML end def successful_create_customer_payment_profile_response <<-XML refid1 Ok I00001 Successful. #{@customer_payment_profile_id} This output is only present if the ValidationMode input parameter is passed with a value of testMode or liveMode XML end def successful_create_customer_shipping_address_response <<-XML refid1 Ok I00001 Successful. customerAddressId XML end def successful_delete_customer_profile_response <<-XML refid1 Ok I00001 Successful. #{@customer_profile_id} XML end def successful_delete_customer_payment_profile_response <<-XML refid1 Ok I00001 Successful. XML end def successful_delete_customer_shipping_address_response <<-XML refid1 Ok I00001 Successful. XML end def successful_get_customer_profile_response <<-XML refid1 Ok I00001 Successful. #{@customer_profile_id} 123456 #{@credit_card.number} #{@gateway.send(:expdate, @credit_card)} XML end def successful_get_customer_profile_response_with_multiple_payment_profiles <<-XML Ok I00001 Successful. Up to 20 chars Up to 255 Characters Up to 255 Characters #{@customer_profile_id} 1000 #{@credit_card.number} #{@gateway.send(:expdate, @credit_card)} individual 1001 XXXX1234 XXXX XML end def successful_get_customer_payment_profile_response <<-XML refid1 Ok I00001 Successful. #{@customer_payment_profile_id} #{@credit_card.number} #{@gateway.send(:expdate, @credit_card)} XML end def successful_get_customer_shipping_address_response <<-XML refid1 Ok I00001 Successful.
#{@customer_address_id}
XML end def successful_update_customer_profile_response <<-XML refid1 Ok I00001 Successful. #{@customer_profile_id} XML end def successful_update_customer_payment_profile_response <<-XML refid1 Ok I00001 Successful. XML end def successful_update_customer_shipping_address_response <<-XML refid1 Ok I00001 Successful. XML end SUCCESSFUL_DIRECT_RESPONSE = { :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,,,,,,,,,,,,,,,,,,,,,,,,,,,,', :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,,,,,,,,,,,,,,,,,,,,,,,,,,,,', :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,,,,,,,,,,,,,,,,,,,,,,,,,,,,' } def successful_create_customer_profile_transaction_response(transaction_type) <<-XML refid1 Ok I00001 Successful. #{SUCCESSFUL_DIRECT_RESPONSE[transaction_type]} XML end def successful_validate_customer_payment_profile_response <<-XML refid1 Ok I00001 Successful. 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,,,,,,,,,,,,,,,,,,,,,,,,,,,, XML end end