The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

BEGIN { push @INC, "t/lib" };

use Test::More;

require "t/lib/test_account.pl";


my($arblogin, $arbpassword) = test_account_or_skip('arb');
my($aimlogin, $aimpassword) = test_account_or_skip();
plan tests => 9;
  
use_ok 'Business::OnlinePayment';
my $tx = Business::OnlinePayment->new("AuthorizeNet", 
                                      fraud_detect => '_Fake',
                                      fraud_detect_faked_result => '0',
                                      fraud_detect_faked_score => '2',
                                      maximum_fraud_score => '1',
                                     );
$tx->content(
    type           => 'VISA',
    login          => $arblogin,
    password       => $arbpassword,
    action         => 'Recurring Authorization',
    description    => 'Business::OnlinePayment::ARB mixed test',
    amount         => '1.05',
    first_name     => 'Tofu',
    last_name      => 'Beast',
    card_number    => '4007000000027',
    expiration     => expiration_date(),
    interval       => '1 month',
    start          => tomorrow(),
    periods        => '6',
);
$tx->test_transaction(1); # test, dont really charge
$tx->submit();

ok(!$tx->is_success()) or diag "ARB Fraud detection unexpectedly did not fail.";

$tx->fraud_detect_faked_result(1);
$tx->submit();

ok(!$tx->is_success()) or diag "ARB Fraud detection unexpectedly did not deny.";

$tx->fraud_detect_faked_score(0);
$tx->submit();

ok($tx->is_success()) or diag $tx->error_message();

my $subscription = $tx->order_number();
like($subscription, qr/^[0-9]{1,13}$/, "Get order number");

SKIP: {

  skip "No order number", 1 unless $subscription;

  $tx->content(
    login        => $arblogin,
    password     => $arbpassword,
    action       => 'Cancel Recurring Authorization',
    subscription => $subscription,
  );
  $tx->test_transaction(1);
  $tx->submit();
  ok($tx->is_success()) or diag $tx->error_message;
}

$tx->server('test.authorize.net');
$tx->path('/gateway/transact.dll');
$tx->content(
    type           => 'VISA',
    login          => $aimlogin,
    password       => $aimpassword,
    action         => 'Normal Authorization',
    description    => 'Business::OnlinePayment::AIM mixed test',
    amount         => '1.06',
    first_name     => 'Tofu',
    last_name      => 'Beast',
    card_number    => '4007000000027',
    expiration     => expiration_date(),
);
$tx->test_transaction(1); #test, don't really charge
$tx->fraud_detect_faked_result(0);
$tx->fraud_detect_faked_score(2);
$tx->submit();

ok(!$tx->is_success()) or diag "AIM Fraud detection unexpectedly did not fail.";

$tx->submit();
$tx->fraud_detect_faked_result(1);

ok(!$tx->is_success()) or diag "AIM Fraud detection unexpectedly did not deny.";

$tx->fraud_detect_faked_score(0);
$tx->submit();
ok($tx->is_success()) or diag $tx->error_message;