+
+{ # _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
+}