5 use POSIX qw(strftime);
8 use Business::OnlinePayment;
11 "to test set environment variables:"
12 . " (required) ELINK_ACCOUNT and ELINK_PASSWORD";
15 ( $ENV{"ELINK_ACCOUNT"} && $ENV{"ELINK_PASSWORD"} )
17 : ( skip_all => $runinfo )
22 "merchantcustservnum" => "8005551212",
26 login => $ENV{"ELINK_ACCOUNT"},
27 password => $ENV{"ELINK_PASSWORD"},
28 action => "Normal Authorization",
30 description => "Business::OnlinePayment::TransFirsteLink test",
31 card_number => "4111111111111111",
33 expiration => "12/" . strftime( "%y", localtime ),
35 invoice_number => "Test1",
38 email => 'transfirst@weasellips.com',
39 address => "123 Anystreet",
46 { # valid card number test
47 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
48 $tx->content(%content);
51 desc => "valid card_number",
54 authorization => "999999",
55 avs_code => "9", # useless
56 cvv2_response => "99", # doubly useless - docs say 1 char
60 { # invalid card number test
62 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
63 $tx->content( %content, card_number => "4111111111111112" );
66 desc => "invalid card_number",
76 SKIP: { # avs_code() / AVSZIP and AVSADDR tests
78 skip "AVS tests broken", 21;
80 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
82 $tx->content( %content, "address" => "500 Any street" );
85 desc => "AVSADDR=N,AVSZIP=Y",
88 authorization => "999999",
93 $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
94 $tx->content( %content, "zip" => "99999" );
97 desc => "AVSADDR=Y,AVSZIP=N",
100 authorization => "999999",
102 cvv2_response => "M",
105 $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
106 $tx->content( %content, "address" => "500 Any street", "zip" => "99999" );
109 desc => "AVSADDR=N,AVSZIP=N",
111 result_code => "000",
112 authorization => "999999",
114 cvv2_response => "M",
118 SKIP: { # cvv2_response() / CVV2MATCH
120 skip "CVV2 tests broken", 7;
122 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
124 $tx->content( %content, "cvv2" => "301" );
127 desc => "wrong cvv2",
129 result_code => "000",
130 authorization => "999999",
132 cvv2_response => "N",
137 SKIP: { # refund test
139 #skip "credit/refund tests broken", 7;
141 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
142 $tx->content( %content, 'action' => "Credit",
143 'card_number' => "4444333322221111",
147 desc => "refund/credit",
149 result_code => "000",
158 #skip "void tests broken", 7;
160 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
161 $tx->content( %content, 'action' => "Void",
162 'order_number' => "12345678901234",
168 result_code => "000",
179 $tx->test_transaction(1);
182 is( $tx->is_success, $o{is_success}, "$o{desc}: " . tx_info($tx) );
183 is( $tx->result_code, $o{result_code}, "result_code(): RESULT" );
184 is( $tx->authorization, $o{authorization}, "authorization() / AUTHCODE" );
185 is( $tx->avs_code, $o{avs_code}, "avs_code() / AVSADDR and AVSZIP" );
186 is( $tx->cvv2_response, $o{cvv2_response}, "cvv2_response() / CVV2MATCH" );
187 is( scalar(@{$tx->junk}), 0, "junk() / JUNK " );
188 like( $tx->order_number, qr/^(\d{14}|)$/, "order_number() / PNREF" );
194 no warnings 'uninitialized';
198 "is_success(", $tx->is_success, ")",
199 " order_number(", $tx->order_number, ")",
200 " result_code(", $tx->result_code, ")",
201 " auth_info(", $tx->authorization, ")",
202 " avs_code(", $tx->avs_code, ")",
203 " cvv2_response(", $tx->cvv2_response, ")",
204 $tx->junk ? " junk(". join('|', @{$tx->junk}). ")" : '',