- added tests for avs_code() and cvv2_code()
authorplobbes <plobbes>
Mon, 22 Jan 2007 05:55:10 +0000 (05:55 +0000)
committerplobbes <plobbes>
Mon, 22 Jan 2007 05:55:10 +0000 (05:55 +0000)
t/credit_card.t

index 7b57484..108f859 100644 (file)
@@ -14,7 +14,7 @@ my $runinfo =
 
 plan(
       ( $ENV{"PFPRO_USER"} && $ENV{"PFPRO_VENDOR"} && $ENV{"PFPRO_PWD"} )
-    ? ( tests => 2 )
+    ? ( tests => 56 )
     : ( skip_all => $runinfo )
 );
 
@@ -25,40 +25,155 @@ my %opts = (
 );
 
 my %content = (
-    type        => "VISA",
     login       => $ENV{"PFPRO_USER"},
     password    => $ENV{"PFPRO_PWD"},
     action      => "Normal Authorization",
+    type        => "VISA",
     description => "Business::OnlinePayment::PayflowPro test",
+    card_number => "4111111111111111",
+    cvv2        => "123",
+    expiration  => "12/" . strftime( "%y", localtime ),
     amount      => "0.01",
     first_name  => "Tofu",
     last_name   => "Beast",
+    email       => 'ivan-payflowpro@420.am',
     address     => "123 Anystreet",
     city        => "Anywhere",
     state       => "GA",
     zip         => "30004",
     country     => "US",
-    email       => 'ivan-payflowpro@420.am',
-    expiration  => "12/" . strftime( "%y", localtime ),
-    cvv2        => "123",
-
-    #card_number specified in test case
 );
 
 {    # valid card number test
     my $tx = new Business::OnlinePayment( "PayflowPro", %opts );
-    $tx->content( %content, card_number => "4111111111111111" );
-    $tx->test_transaction(1);
-    $tx->submit;
-    is( $tx->is_success, 1, "valid   card num: " . tx_info($tx) );
+    $tx->content(%content);
+    tx_check(
+        $tx,
+        desc          => "valid card_number",
+        is_success    => 1,
+        result_code   => 0,
+        error_message => "Approved",
+        authorization => "010101",
+        avs_code      => "Y",
+        cvv2_code     => "Y",
+    );
 }
 
 {    # invalid card number test
     my $tx = new Business::OnlinePayment( "PayflowPro", %opts );
     $tx->content( %content, card_number => "4111111111111112" );
+    tx_check(
+        $tx,
+        desc          => "invalid card_number",
+        is_success    => 0,
+        result_code   => 23,
+        error_message => "Invalid account number",
+        authorization => undef,
+        avs_code      => undef,
+        cvv2_code     => undef,
+    );
+}
+
+{    # avs_code() / AVSZIP and AVSADDR tests
+    my $tx = new Business::OnlinePayment( "PayflowPro", %opts );
+
+    # IF first 3 chars of STREET <= 334 and >= 666 THEN AVSADDR == "N"
+    $tx->content( %content, "address" => "500 Any street" );
+    tx_check(
+        $tx,
+        desc          => "AVSADDR=N,AVSZIP=Y",
+        is_success    => 0,
+        result_code   => 126,
+        error_message => "Under review by Fraud Service",
+        authorization => "010101",
+        avs_code      => "Z",
+        cvv2_code     => "Y",
+    );
+
+    # IF first 3 chars of STREET >= 667 THEN AVSADDR == "X" (and AVSZIP="X")
+    $tx->content( %content, "address" => "700 Any street" );
+    tx_check(
+        $tx,
+        desc          => "AVSADDR=X,AVSZIP=X",
+        is_success    => 1,
+        result_code   => 0,
+        error_message => "Approved",
+        authorization => "010101",
+        avs_code      => "",
+        cvv2_code     => "Y",
+    );
+
+    # IF ZIP <= 50001 and >= 99999 THEN AVSZIP == "N"
+    $tx->content( %content, "zip" => "99999" );
+    tx_check(
+        $tx,
+        desc          => "AVSADDR=Y,AVSZIP=N",
+        is_success    => 0,
+        result_code   => 126,
+        error_message => "Under review by Fraud Service",
+        authorization => "010101",
+        avs_code      => "A",
+        cvv2_code     => "Y",
+    );
+
+    # Both AVSADDR and AVSZIP == "N"
+    $tx->content( %content, "address" => "500 Any street", "zip" => "99999" );
+    tx_check(
+        $tx,
+        desc          => "AVSADDR=N,AVSZIP=N",
+        is_success    => 0,
+        result_code   => 126,
+        error_message => "Under review by Fraud Service",
+        authorization => "010101",
+        avs_code      => "N",
+        cvv2_code     => "Y",
+    );
+}
+
+{    # cvv2_code() / CVV2MATCH
+    my $tx = new Business::OnlinePayment( "PayflowPro", %opts );
+
+    # IF CVV2 >= 301 and <= 600 THEN CVV2MATCH == "N"
+    $tx->content( %content, "cvv2" => "301" );
+    tx_check(
+        $tx,
+        desc          => "cvv2(301)",
+        is_success    => 0,
+        result_code   => 126,
+        error_message => "Under review by Fraud Service",
+        authorization => "010101",
+        avs_code      => "Y",
+        cvv2_code     => "N",
+    );
+
+    # IF CVV2 >= 601 THEN CVV2MATCH == "X"
+    $tx->content( %content, "cvv2" => "601" );
+    tx_check(
+        $tx,
+        desc          => "cvv2(601)",
+        is_success    => 0,
+        result_code   => 126,
+        error_message => "Under review by Fraud Service",
+        authorization => "010101",
+        avs_code      => "Y",
+        cvv2_code     => "X",
+    );
+}
+
+sub tx_check {
+    my $tx = shift;
+    my %o  = @_;
+
     $tx->test_transaction(1);
     $tx->submit;
-    is( $tx->is_success, 0, "invalid card num: " . tx_info($tx) );
+
+    is( $tx->is_success,  $o{is_success},  $o{desc} . ": " . tx_info($tx) );
+    is( $tx->result_code, $o{result_code}, "result_code(): RESULT" );
+    like( $tx->order_number, qr/^\w{12}/, "order_number() / PNREF" );
+    is( $tx->error_message, $o{error_message}, "error_message() / RESPMSG" );
+    is( $tx->authorization, $o{authorization}, "authorization() / AUTHCODE" );
+    is( $tx->avs_code,  $o{avs_code},  "avs_code() / AVSADDR and AVSZIP" );
+    is( $tx->cvv2_code, $o{cvv2_code}, "cvv2_code() / CVV2MATCH" );
 }
 
 sub tx_info {
@@ -68,7 +183,8 @@ sub tx_info {
 
     return (
         join( "",
-            "order_number(",   $tx->order_number,  ")",
+            "is_success(",     $tx->is_success,    ")",
+            " order_number(",  $tx->order_number,  ")",
             " error_message(", $tx->error_message, ")",
             " result_code(",   $tx->result_code,   ")",
             " auth_info(",     $tx->authorization, ")",