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

use strict;
use warnings;
use Test::More;

{    # fake test driver (with a submit method)

    package Business::OnlinePayment::MOCK;
    use strict;
    use warnings;
    use base qw(Business::OnlinePayment);
    sub submit { my $self = shift; return 1; }
}
$INC{"Business/OnlinePayment/MOCK.pm"} = "testing";

use Business::OnlinePayment;

my $package = "Business::OnlinePayment";
my $fddrv   = "preCharge";

eval {
    my $tobj = $package->new("MOCK");
    $tobj->fraud_detect($fddrv);
    $tobj->submit;
};

if ( $@ =~ /One of Net::SSLeay.*?or Crypt::SSLeay/ ) {
    plan skip_all => "fraud_detect: $@\n";
}
else {
    plan tests => 5;
}

my $obj = $package->new("MOCK");
can_ok( $obj, qw(fraud_detect) );

# fraud detection failure modes
my $fdbog = "__BOGUS_PROCESSOR";

is( $obj->fraud_detect($fdbog), $fdbog, "fraud_detect set to '$fdbog'" );
eval { $obj->submit; };
like(
    $@,
    qr/^Unable to locate fraud_detection /,
    "fraud_detect with unknown processor croaks"
);

is( $obj->fraud_detect($fddrv), $fddrv, "fraud_detect set to '$fddrv'" );
eval { $obj->submit; };
like( $@, qr/^missing required /, "fraud_detect($fddrv) missing fields" );

# XXX: more test cases needed