X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=t%2Fbop.t;h=c5535d2b92bd1ce5516ab37f7c55d4bb46bf65d7;hb=417f1443bc69fd3b5c9bce17cfb618d0c7da486f;hp=7b8f34e3621d75e4de960566e59b4836cd69f664;hpb=09f4ef51f7d1102f9a4869c8e947f765c728a9c4;p=Business-OnlinePayment.git diff --git a/t/bop.t b/t/bop.t index 7b8f34e..c5535d2 100644 --- a/t/bop.t +++ b/t/bop.t @@ -1,26 +1,46 @@ #!/usr/bin/perl -# $Id: bop.t,v 1.4 2006-08-31 15:06:32 lawrence Exp $ +# $Id: bop.t,v 1.7 2006-11-20 04:54:24 plobbes Exp $ use strict; use warnings; -use Test::More tests => 49; +use Test::More tests => 62; BEGIN { use_ok("Business::OnlinePayment") or exit; } -{ # fake test driver 1 +{ # fake test driver 1 (no submit method) package Business::OnlinePayment::MOCK1; use strict; use warnings; use base qw(Business::OnlinePayment); +} + +{ # fake test driver 2 (with submit method that dies) + + package Business::OnlinePayment::MOCK2; + use strict; + use warnings; + use base qw(Business::OnlinePayment); + sub submit { die("in processor submit\n"); } +} +{ # fake test driver 3 (with submit method) + + package Business::OnlinePayment::MOCK3; + use strict; + use warnings; + use base qw(Business::OnlinePayment); + sub submit { return (1); } } my $package = "Business::OnlinePayment"; -my $driver = "MOCK1"; +my @drivers = qw(MOCK1 MOCK2 MOCK3); +my $driver = $drivers[0]; # trick to make use() happy (called in Business::OnlinePayment->new) -$INC{"Business/OnlinePayment/${driver}.pm"} = "testing"; +foreach my $drv (@drivers) { + $INC{"Business/OnlinePayment/${drv}.pm"} = "testing"; +} { # new can_ok( $package, qw(new) ); @@ -76,7 +96,38 @@ $INC{"Business/OnlinePayment/${driver}.pm"} = "testing"; # XXX # { # _risk_detect } -# { # _pre_submit } + +{ # _pre_submit + + my $s_orig = Business::OnlinePayment::MOCK3->can("submit"); + is( ref $s_orig, "CODE", "MOCK3 submit code ref $s_orig" ); + + # test to ensure we do not go recursive when wrapping submit + my $obj1 = $package->new("MOCK3"); + my $s_new1 = $obj1->can("submit"); + + isnt( $s_new1, $s_orig, "MOCK3 submit code ref $s_new1 (wrapped)" ); + is( $obj1->submit, "1", "MOCK3(obj1) submit returns 1" ); + + my $obj2 = $package->new("MOCK3"); + my $s_new2 = $obj2->can("submit"); + is( $obj2->submit, "1", "MOCK3(obj2) submit returns 1" ); + + # fraud detection failure modes + my $obj = $package->new("MOCK3"); + my $bogus = "__BOGUS_PROCESSOR"; + my $valid = "preCharge"; + + is( $obj->fraud_detect($bogus), $bogus, "fraud_detect set to '$bogus'" ); + eval { $obj->submit; }; + is( $@, "", "fraud_detect ignores non-existant processors" ); + + is( $obj->fraud_detect($valid), $valid, "fraud_detect set to '$valid'" ); + eval { $obj->submit; }; + like( $@, qr/^missing required /, "fraud_detect($valid) missing fields" ); + + # XXX: more test cases for preCharge needed +} { # content my $obj; @@ -104,7 +155,7 @@ $INC{"Business/OnlinePayment/${driver}.pm"} = "testing"; is( $obj->required_fields, 0, "no required fields" ); eval { $obj->required_fields("field1"); }; - like( $@, qr/^missing required field/, "missing required_fields() croaks" ); + like( $@, qr/^missing required field/, "missing required_fields croaks" ); } { # get_fields @@ -149,9 +200,16 @@ $INC{"Business/OnlinePayment/${driver}.pm"} = "testing"; can_ok( $package, qw(submit) ); can_ok( $obj, qw(submit) ); - eval { $obj->submit; }; like( $@, qr/^Processor subclass did not /, "missing submit() croaks" ); + is( $obj->can("submit"), $package->can("submit"), "submit unchanged" ); + + my $mock2 = $package->new("MOCK2"); + can_ok( $mock2, qw(submit) ); + + isnt( $mock2->can("submit"), $package->can("submit"), "submit changed" ); + eval { $mock2->submit; }; + like( $@, qr/^in processor submit/, "processor submit() is called" ); } { # dump_contents