#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw(strftime);
use Test::More;
use Business::OnlinePayment;
my $runinfo =
"to test set environment variables:"
. " (required) ELINK_ACH_ACCOUNT, ELINK_ACH_PASSWORD"
. " ELINK_ROUTING_CODE, ELINK_BANK_ACCOUNT, ELINK_ACH_NAME"
. " ELINK_ACH_ADDRESS, ELINK_ACH_CITY, ELINK_ACH_STATE"
. " ELINK_ACH_ZIP, ELINK_ACH_PHONE, ELINK_DO_LIVE";
plan(
( $ENV{"ELINK_ACH_ACCOUNT"} && $ENV{"ELINK_ACH_PASSWORD"} &&
$ENV{"ELINK_ROUTING_CODE"} && $ENV{"ELINK_BANK_ACCOUNT"} &&
$ENV{"ELINK_ACH_NAME"} && $ENV{"ELINK_ACH_ADDRESS"} &&
$ENV{"ELINK_ACH_CITY"} && $ENV{"ELINK_ACH_STATE"} &&
$ENV{"ELINK_ACH_ZIP"} && $ENV{"ELINK_ACH_PHONE"} &&
$ENV{"ELINK_DO_LIVE"}
)
? ( tests => 12 )
: ( skip_all => $runinfo )
);
my %opts = (
"debug" => 0,
"merchantcustservnum" => "8005551212",
);
my %content = (
login => $ENV{"ELINK_ACH_ACCOUNT"},
password => $ENV{"ELINK_ACH_PASSWORD"},
action => "Normal Authorization",
type => "CHECK",
description => "Business::OnlinePayment::TransFirsteLink live test",
routing_code => $ENV{"ELINK_ROUTING_CODE"},
account_number => $ENV{"ELINK_BANK_ACCOUNT"},
check_number => "99",
amount => "1.01",
invoice_number => "LiveTest",
customer_id => "LiveTestCust",
account_name => $ENV{"ELINK_ACH_NAME"},
address => $ENV{"ELINK_ACH_ADDRESS"},
city => $ENV{"ELINK_ACH_CITY"},
state => $ENV{"ELINK_ACH_STATE"},
zip => $ENV{"ELINK_ACH_ZIP"},
phone => $ENV{"ELINK_ACH_PHONE"},
);
{ # valid account test
my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
$tx->content(%content);
tx_check(
$tx,
desc => "valid account",
is_success => 1,
result_code => "P00",
);
}
SKIP: { # invalid account test
skip "invalid account tests broken", 4;
my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
$tx->content( %content, routing_code => "052000113",
account_number => "000000000001",
);
tx_check(
$tx,
desc => "invalid account",
is_success => 0,
result_code => 214,
);
}
{ # credit/refund test
my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
$tx->content( %content, action => "Credit");
tx_check(
$tx,
desc => "credit/refund",
is_success => 1,
result_code => "ACCEPTED",
);
}
sub tx_check {
my $tx = shift;
my %o = @_;
$tx->submit;
is( $tx->is_success, $o{is_success}, "$o{desc}: " . tx_info($tx) );
is( $tx->result_code, $o{result_code}, "result_code(): RESULT" );
is( scalar(@{$tx->junk}), 0, "junk() / JUNK " );
like( $tx->order_number, qr/^(\d{9}|)$/, "order_number() / PNREF" );
}
sub tx_info {
my $tx = shift;
no warnings 'uninitialized';
return (
join( "",
"is_success(", $tx->is_success, ")",
" order_number(", $tx->order_number, ")",
" result_code(", $tx->result_code, ")",
$tx->junk ? " junk(". join('|', @{$tx->junk}). ")" : '',
)
);
}