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", 28;
80 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
82 # IF first 3 chars of STREET <= 334 and >= 666 THEN AVSADDR == "N"
83 $tx->content( %content, "address" => "500 Any street" );
86 desc => "AVSADDR=N,AVSZIP=Y",
89 authorization => "010101",
94 # IF first 3 chars of STREET >= 667 THEN AVSADDR == "X" (and AVSZIP="X")
95 $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
96 $tx->content( %content, "address" => "700 Any street" );
99 desc => "AVSADDR=X,AVSZIP=X",
102 authorization => "010101",
104 cvv2_response => "Y",
107 # # IF ZIP <= 50001 and >= 99999 THEN AVSZIP == "N"
108 $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
109 $tx->content( %content, "zip" => "99999" );
112 desc => "AVSADDR=Y,AVSZIP=N",
115 authorization => "010101",
117 cvv2_response => "Y",
120 # Both AVSADDR and AVSZIP == "N"
121 $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
122 $tx->content( %content, "address" => "500 Any street", "zip" => "99999" );
125 desc => "AVSADDR=N,AVSZIP=N",
128 authorization => "010101",
130 cvv2_response => "Y",
134 SKIP: { # cvv2_response() / CVV2MATCH
136 skip "CVV2 tests broken", 14;
138 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
140 # IF CVV2 >= 301 and <= 600 THEN CVV2MATCH == "N"
141 $tx->content( %content, "cvv2" => "301" );
147 authorization => "010101",
149 cvv2_response => "N",
152 # IF CVV2 >= 601 THEN CVV2MATCH == "X"
153 $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
154 $tx->content( %content, "cvv2" => "601" );
160 authorization => "010101",
162 cvv2_response => "X",
166 SKIP: { # refund test
168 skip "credit/refund tests broken", 7;
170 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
171 $tx->content( %content, 'action' => "Credit",
172 'card_number' => "4444333322221111",
176 desc => "refund/credit",
178 result_code => "000",
187 skip "void tests broken", 7;
189 my $tx = new Business::OnlinePayment( "TransFirsteLink", %opts );
190 $tx->content( %content, 'action' => "Void",
191 'order_number' => "12345678901234",
197 result_code => "000",
208 $tx->test_transaction(1);
211 is( $tx->is_success, $o{is_success}, "$o{desc}: " . tx_info($tx) );
212 is( $tx->result_code, $o{result_code}, "result_code(): RESULT" );
213 is( $tx->authorization, $o{authorization}, "authorization() / AUTHCODE" );
214 is( $tx->avs_code, $o{avs_code}, "avs_code() / AVSADDR and AVSZIP" );
215 is( $tx->cvv2_response, $o{cvv2_response}, "cvv2_response() / CVV2MATCH" );
216 is( scalar(@{$tx->junk}), 0, "junk() / JUNK " );
217 like( $tx->order_number, qr/^(\d{14}|)$/, "order_number() / PNREF" );
223 no warnings 'uninitialized';
227 "is_success(", $tx->is_success, ")",
228 " order_number(", $tx->order_number, ")",
229 " result_code(", $tx->result_code, ")",
230 " auth_info(", $tx->authorization, ")",
231 " avs_code(", $tx->avs_code, ")",
232 " cvv2_response(", $tx->cvv2_response, ")",
233 $tx->junk ? " junk(". join('|', @{$tx->junk}). ")" : '',