require 'test_helper' class DataCashTest < Test::Unit::TestCase # 100 Cents AMOUNT = 100 def setup @gateway = DataCashGateway.new( :login => 'LOGIN', :password => 'PASSWORD' ) @credit_card = credit_card('4242424242424242') @address = { :name => 'Mark McBride', :address1 => 'Flat 12/3', :address2 => '45 Main Road', :city => 'London', :state => 'None', :country => 'GBR', :zip => 'A987AA', :phone => '(555)555-5555' } @options = { :order_id => generate_unique_id, :billing_address => @address } end def test_successful_purchase @gateway.expects(:ssl_post).returns(successful_purchase_response) response = @gateway.purchase(@amount, @credit_card, @options) assert_instance_of Response, response assert_success response assert response.test? assert_equal 'The transaction was successful', response.message assert_equal '4400200050664928;123456789;', response.authorization end def test_unsuccessful_purchase @gateway.expects(:ssl_post).returns(failed_purchase_response) response = @gateway.purchase(@amount, @credit_card, @options) assert_instance_of Response, response assert_failure response assert response.test? assert_equal 'Invalid reference number', response.message end def test_error_response @gateway.expects(:ssl_post).returns(failed_purchase_response) response = @gateway.purchase(@amount, @credit_card, @options) assert_instance_of Response, response assert_failure response assert response.test? assert_equal 'Invalid reference number', response.message end def test_supported_countries assert_equal ['GB'], DataCashGateway.supported_countries end def test_supported_card_types assert_equal [ :visa, :master, :american_express, :discover, :diners_club, :jcb, :maestro, :switch, :solo, :laser ], DataCashGateway.supported_cardtypes end def test_purchase_with_missing_order_id_option assert_raise(ArgumentError){ @gateway.purchase(100, @credit_card, {}) } end def test_authorize_with_missing_order_id_option assert_raise(ArgumentError){ @gateway.authorize(100, @credit_card, {}) } end def test_purchase_does_not_raise_exception_with_missing_billing_address @gateway.expects(:ssl_post).returns(successful_purchase_response) assert @gateway.authorize(100, @credit_card, {:order_id => generate_unique_id }).is_a?(ActiveMerchant::Billing::Response) end def test_continuous_authority_purchase_with_missing_continuous_authority_reference assert_raise(ArgumentError) do @gateway.authorize(100, "a;b;", @options) end end def test_successful_continuous_authority_purchase @gateway.expects(:ssl_post).returns(successful_purchase_response) response = @gateway.purchase(@amount, '4400200050664928;123456789;10000000', @options) assert_instance_of Response, response assert_success response assert response.test? assert_equal 'The transaction was successful', response.message end private def failed_purchase_response <<-XML 22 TEST United Kingdom 2d24cc91284c1ed5c65d8821f1e752c7 Clydesdale Bank PLC Invalid reference number Solo 4400200050664928 XML end def successful_purchase_response <<-XML 1 TEST United Kingdom 2d24cc91284c1ed5c65d8821f1e752c7 Clydesdale Bank PLC The transaction was successful Visa 4400200050664928 123456789 XML end end