use Test::More tests => 6; use Business::OnlinePayment; my %defaults = ( name => 'Joe Tester', address => '888', city => 'Nowhere', state => 'CA', zip => '77777', phone => '510-555-0021', email => 'joe@example.com', description => 'Business::OnlinePayment::NMI Test', action => 'Normal Authorization', card_number => '5431111111111111', expiration => '10/10', amount => '12.00', ); # SALE my %content = %defaults; my $ordernum = ok_test(\%content, 'credit card sale'); # REFUND %content = ( action => 'Credit', order_number => $ordernum, amount => '6.00', ); ok_test(\%content, 'credit card refund'); # AUTH/CAPTURE %content = %defaults; $content{'action'} = 'Authorization Only'; $ordernum = ok_test(\%content, 'credit card auth'); %content = ( action => 'Post Authorization', order_number => $ordernum, amount => '12.00', ); ok_test(\%content, 'credit card capture'); #VOID %content = ( action => 'Void', order_number => $ordernum, ); ok_test(\%content, 'credit card void'); #FAILURE %content = %defaults; $content{amount} = '0.10'; # amounts < 1.00 are declined on the demo account $content{fail} = 1; ok_test(\%content, 'credit card decline'); sub ok_test { my ($content, $label) = @_; my $fail = delete $content{fail} or 0; my $trans = new Business::OnlinePayment('NMI'); $trans->content( login => 'demo', password => 'password', type => 'CC', %$content ); $trans->submit; diag($trans->error_message) if (!$fail and $trans->error_message); if($fail) { ok(!$trans->is_success, $label) } else { ok($trans->is_success, $label); } return $trans->order_number; } 1;