summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorjeff <jeff>2007-09-26 21:53:00 +0000
committerjeff <jeff>2007-09-26 21:53:00 +0000
commit33468536729cb00592ce4ac4af3594b32a8bddb5 (patch)
tree2f6bcabb3610db3eb18c81fcadc71d370f1090d6 /t
Initial importstart
Diffstat (limited to 't')
-rw-r--r--t/00load.t13
-rw-r--r--t/bop.t51
-rw-r--r--t/credit_card.t197
-rw-r--r--t/live_card.t202
-rw-r--r--t/pod-coverage.t10
-rw-r--r--t/pod.t9
6 files changed, 482 insertions, 0 deletions
diff --git a/t/00load.t b/t/00load.t
new file mode 100644
index 0000000..db03d45
--- /dev/null
+++ b/t/00load.t
@@ -0,0 +1,13 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More tests => 2;
+
+BEGIN {
+ use_ok("Business::OnlinePayment")
+ or BAIL_OUT("unable to load Business::OnlinePayment\n");
+
+ use_ok("Business::OnlinePayment::viaKLIX")
+ or BAIL_OUT("unable to load Business::OnlinePayment::viaKLIX\n");
+}
diff --git a/t/bop.t b/t/bop.t
new file mode 100644
index 0000000..89de36a
--- /dev/null
+++ b/t/bop.t
@@ -0,0 +1,51 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More tests => 11;
+
+use Business::OnlinePayment;
+
+my $package = "Business::OnlinePayment";
+my $driver = "viaKLIX";
+
+{ # new
+ my $obj;
+
+ $obj = $package->new($driver);
+ isa_ok( $obj, $package );
+
+ # convenience methods
+ can_ok( $obj, qw(order_number avs_code cvv2_response) );
+ can_ok( $obj, qw(debug expdate_mmyy) );
+
+ # internal methods
+ can_ok( $obj, qw(_map_fields _revmap_fields) );
+
+ # defaults
+ my $server = "www.viaKLIX.com";
+
+ is( $obj->server, $server, "server($server)" );
+ is( $obj->port, "443", "port(443)" );
+ is( $obj->path, "/process.asp", "process.asp" );
+}
+
+{ # expdate
+ my $obj = $package->new($driver);
+ my @exp = (
+
+ #OFF [qw(1999.8 0899)],
+ #OFF [qw(1984-11 1184)],
+ #OFF [qw(06/7 0706)],
+ #OFF [qw(06-12 1206)],
+ [qw(12/06 1206)],
+ [qw(6/2000 0600)],
+ [qw(10/2000 1000)],
+ [qw(1/99 0199)],
+ );
+ foreach my $aref (@exp) {
+ my ( $exp, $moyr ) = @$aref;
+ my ($mmyy) = $obj->expdate_mmyy($exp);
+ is( $mmyy, $moyr, "$exp: MMYY '$mmyy' eq '$moyr' from $exp" );
+ }
+}
diff --git a/t/credit_card.t b/t/credit_card.t
new file mode 100644
index 0000000..b13048b
--- /dev/null
+++ b/t/credit_card.t
@@ -0,0 +1,197 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use POSIX qw(strftime);
+use Test::More;
+
+use Business::OnlinePayment;
+
+my $runinfo =
+ "to test set environment variables:"
+ . " (required) VIAKLIX_ACCOUNT, VIAKLIX_USERID, and VIAKLIX_PASSWORD";
+
+plan(
+ ( $ENV{"VIAKLIX_ACCOUNT"}
+ && $ENV{"VIAKLIX_USERID"}
+ && $ENV{"VIAKLIX_PASSWORD"} )
+ ? ( tests => 42 )
+ : ( skip_all => $runinfo )
+);
+
+my %opts = (
+ "debug" => 0,
+ "default_ssl_user_id" => $ENV{"VIAKLIX_USERID"},
+ "default_ssl_salestax" => "0.00",
+ "default_ssl_customer_code" => "TESTCUSTOMER",
+);
+
+my %content = (
+ login => $ENV{"VIAKLIX_ACCOUNT"},
+ password => $ENV{"VIAKLIX_PASSWORD"},
+ action => "Normal Authorization",
+ type => "VISA",
+ description => "Business::OnlinePayment::viaKLIX test",
+ card_number => "4111111111111111",
+ cvv2 => "123",
+ expiration => "12/" . strftime( "%y", localtime ),
+ amount => "0.01",
+ invoice_number => "Test1",
+ first_name => "Tofu",
+ last_name => "Beast",
+ email => 'viaklix@weasellips.com',
+ address => "123 Anystreet",
+ city => "Anywhere",
+ state => "GA",
+ zip => "30004",
+ country => "US",
+);
+
+{ # valid card number test
+ my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+ $tx->content(%content);
+ tx_check(
+ $tx,
+ desc => "valid card_number",
+ is_success => 1,
+ result_code => "0",
+ authorization => "123456",
+ avs_code => "X",
+ cvv2_response => "P",
+ order_number => "00000000-0000-0000-0000-000000000000",
+ );
+}
+
+{ # invalid card number test
+
+ my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+ $tx->content( %content, card_number => "4111111111111112" );
+ tx_check(
+ $tx,
+ desc => "invalid card_number",
+ is_success => 0,
+ result_code => 4000,
+ authorization => undef,
+ avs_code => undef,
+ cvv2_response => undef,
+ order_number => undef,
+ );
+}
+
+
+SKIP: { # avs_code() / AVSZIP and AVSADDR tests
+
+ skip "AVS tests broken", 18;
+
+ my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+
+ $tx->content( %content, "address" => "500 Any street" );
+ tx_check(
+ $tx,
+ desc => "AVSADDR=N,AVSZIP=Y",
+ is_success => 1,
+ result_code => "0",
+ authorization => "123456",
+ avs_code => "Z",
+ cvv2_response => "P",
+ order_number => "00000000-0000-0000-0000-000000000000",
+ );
+
+ $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+ $tx->content( %content, "zip" => "99999" );
+ tx_check(
+ $tx,
+ desc => "AVSADDR=Y,AVSZIP=N",
+ is_success => 1,
+ result_code => "0",
+ authorization => "123456",
+ avs_code => "A",
+ cvv2_response => "P",
+ order_number => "00000000-0000-0000-0000-000000000000",
+ );
+
+ $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+ $tx->content( %content, "address" => "500 Any street", "zip" => "99999" );
+ tx_check(
+ $tx,
+ desc => "AVSADDR=N,AVSZIP=N",
+ is_success => 1,
+ result_code => "0",
+ authorization => "123456",
+ avs_code => "N",
+ cvv2_response => "P",
+ order_number => "00000000-0000-0000-0000-000000000000",
+ );
+}
+
+SKIP: { # cvv2_response() / CVV2MATCH
+
+ skip "CVV2 tests broken", 6;
+
+ my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+
+ $tx->content( %content, "cvv2" => "301" );
+ tx_check(
+ $tx,
+ desc => "wrong cvv2",
+ is_success => 1,
+ result_code => "0",
+ authorization => "123456",
+ avs_code => "X",
+ cvv2_response => "N",
+ order_number => "00000000-0000-0000-0000-000000000000",
+ );
+
+}
+
+SKIP: { # refund test
+
+ skip "credit/refund tests broken", 6;
+
+ my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+ $tx->content( %content, 'action' => "Credit",
+ 'card_number' => "4444333322221111",
+ );
+ tx_check(
+ $tx,
+ desc => "refund/credit",
+ is_success => 1,
+ result_code => "0",
+ authorization => undef,
+ avs_code => undef,
+ cvv2_response => undef,
+ order_number => "00000000-0000-0000-0000-000000000000",
+ );
+}
+
+sub tx_check {
+ my $tx = shift;
+ my %o = @_;
+
+ $tx->test_transaction(1);
+ $tx->submit;
+
+ is( $tx->is_success, $o{is_success}, "$o{desc}: " . tx_info($tx) );
+ is( $tx->result_code, $o{result_code}, "result_code(): RESULT" );
+ is( $tx->authorization, $o{authorization}, "authorization() / AUTHCODE" );
+ is( $tx->avs_code, $o{avs_code}, "avs_code() / AVSADDR and AVSZIP" );
+ is( $tx->cvv2_response, $o{cvv2_response}, "cvv2_response() / CVV2MATCH" );
+ is( $tx->order_number, $o{order_number}, "order_number() / PNREF" );
+}
+
+sub tx_info {
+ my $tx = shift;
+
+ no warnings 'uninitialized';
+
+ return (
+ join( "",
+ "is_success(", $tx->is_success, ")",
+ " order_number(", $tx->order_number, ")",
+ " result_code(", $tx->result_code, ")",
+ " auth_info(", $tx->authorization, ")",
+ " avs_code(", $tx->avs_code, ")",
+ " cvv2_response(", $tx->cvv2_response, ")",
+ )
+ );
+}
diff --git a/t/live_card.t b/t/live_card.t
new file mode 100644
index 0000000..b239ffc
--- /dev/null
+++ b/t/live_card.t
@@ -0,0 +1,202 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use POSIX qw(strftime);
+use Test::More;
+
+use Business::OnlinePayment;
+
+my $runinfo =
+ "to test set environment variables:"
+ . " (required) VIAKLIX_ACCOUNT, VIAKLIX_PASSWORD, VIAKLIX_CARD,"
+ . " VIAKLIX_CVV2, VIAKLIX_EXP, VIAKLIX_CARD_NAME, VIAKLIX_CARD_ADDRESS,"
+ . " VIAKLIX_CARD_CITY, VIAKLIX_CARD_STATE, VIAKLIX_CARD_ZIP, and VIAKLIX_DO_LIVE ";
+
+plan(
+ ( $ENV{"VIAKLIX_ACCOUNT"} && $ENV{"VIAKLIX_PASSWORD"} &&
+ $ENV{"VIAKLIX_CARD"} && $ENV{"VIAKLIX_CVV2"} &&
+ $ENV{"VIAKLIX_EXP"} && $ENV{"VIAKLIX_CARD_NAME"} &&
+ $ENV{"VIAKLIX_CARD_ADDRESS"} && $ENV{"VIAKLIX_CARD_CITY"} &&
+ $ENV{"VIAKLIX_CARD_STATE"} && $ENV{"VIAKLIX_CARD_ZIP"} &&
+ $ENV{"VIAKLIX_DO_LIVE"}
+ )
+ ? ( tests => 42 )
+ : ( skip_all => $runinfo )
+);
+
+my %opts = (
+ "debug" => 2,
+ "default_ssl_user_id" => $ENV{"VIAKLIX_USERID"},
+ "default_ssl_salestax" => "0.00",
+ "default_ssl_customer_code" => "LIVETESTCUSTOMER",
+);
+
+my %content = (
+ login => $ENV{"VIAKLIX_ACCOUNT"},
+ password => $ENV{"VIAKLIX_PASSWORD"},
+ action => "Normal Authorization",
+ type => "CC",
+ description => "Business::OnlinePayment::viaKLIX live test",
+ card_number => $ENV{"VIAKLIX_CARD"},
+ cvv2 => $ENV{"VIAKLIX_CVV2"},
+ expiration => $ENV{"VIAKLIX_EXP"},
+ amount => "0.01",
+ invoice_number => "LiveTest",
+ name => $ENV{"VIAKLIX_CARD_NAME"},
+ address => $ENV{"VIAKLIX_CARD_ADDRESS"},
+ city => $ENV{"VIAKLIX_CARD_CITY"},
+ state => $ENV{"VIAKLIX_CARD_STATE"},
+ zip => $ENV{"VIAKLIX_CARD_ZIP"},
+);
+
+my $credit_amount = 0;
+
+{ # valid card number test
+ my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+ $tx->content(%content);
+ tx_check(
+ $tx,
+ desc => "valid card_number",
+ is_success => 1,
+ result_code => "0",
+ authorization => qr/^\w{6}$/,
+ avs_code => "Y",
+ cvv2_response => "M",
+ order_number => qr/^([0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12})$/,
+ );
+ $credit_amount += $content{amount} if $tx->is_success;
+}
+
+{ # invalid card number test
+
+ my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+ $tx->content( %content, card_number => "4111111111111112" );
+ tx_check(
+ $tx,
+ desc => "invalid card_number",
+ is_success => 0,
+ result_code => 4000,
+ authorization => qr/^$/,
+ avs_code => undef,
+ cvv2_response => undef,
+ order_number => qr/^$/,
+ );
+}
+
+
+{ # avs_code() / AVSZIP and AVSADDR tests
+
+ my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+
+ $tx->content( %content, "address" => "500 Any street" );
+ tx_check(
+ $tx,
+ desc => "AVSADDR=N,AVSZIP=Y",
+ is_success => 1,
+ result_code => "0",
+ authorization => qr/^\w{6}$/,
+ avs_code => "Z",
+ cvv2_response => "M",
+ order_number => qr/^([0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12})$/,
+ );
+ $credit_amount += $content{amount} if $tx->is_success;
+
+ $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+ $tx->content( %content, "zip" => "99999" );
+ tx_check(
+ $tx,
+ desc => "AVSADDR=Y,AVSZIP=N",
+ is_success => 1,
+ result_code => "0",
+ authorization => qr/^\w{6}$/,
+ avs_code => "A",
+ cvv2_response => "M",
+ order_number => qr/^([0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12})$/,
+ );
+ $credit_amount += $content{amount} if $tx->is_success;
+
+ $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+ $tx->content( %content, "address" => "500 Any street", "zip" => "99999" );
+ tx_check(
+ $tx,
+ desc => "AVSADDR=N,AVSZIP=N",
+ is_success => 1,
+ result_code => "0",
+ authorization => qr/^\w{6}$/,
+ avs_code => "N",
+ cvv2_response => "M",
+ order_number => qr/^([0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12})$/,
+ );
+ $credit_amount += $content{amount} if $tx->is_success;
+}
+
+{ # cvv2_response() / CVV2MATCH
+
+ my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+
+ $tx->content( %content, "cvv2" => $content{cvv2}+1 );
+ tx_check(
+ $tx,
+ desc => "wrong cvv2",
+ is_success => 1,
+ result_code => "0",
+ authorization => qr/^\w{6}$/,
+ avs_code => "Y",
+ cvv2_response => "N",
+ order_number => qr/^([0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12})$/,
+ );
+ $credit_amount += $content{amount} if $tx->is_success;
+
+}
+
+SKIP: { # refund test
+
+ skip "Refund tests require account with refund capability", 6;
+
+ my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
+ $tx->content( %content, 'action' => "Credit",
+ 'amount' => sprintf("%.2f", $credit_amount),
+ );
+ tx_check(
+ $tx,
+ desc => "refund/credit",
+ is_success => 1,
+ result_code => "0",
+ authorization => qr/^$/,
+ avs_code => undef,
+ cvv2_response => undef,
+ order_number => qr/^$/,
+ );
+}
+
+sub tx_check {
+ my $tx = shift;
+ my %o = @_;
+
+ $tx->submit;
+
+ is( $tx->is_success, $o{is_success}, "$o{desc}: " . tx_info($tx) );
+ is( $tx->result_code, $o{result_code}, "result_code(): RESULT" );
+ like( $tx->authorization, $o{authorization}, "authorization() / AUTHCODE" );
+ is( $tx->avs_code, $o{avs_code}, "avs_code() / AVSADDR and AVSZIP" );
+ is( $tx->cvv2_response, $o{cvv2_response}, "cvv2_response() / CVV2MATCH" );
+ like( $tx->order_number, $o{order_number}, "order_number() / PNREF" );
+}
+
+sub tx_info {
+ my $tx = shift;
+
+ no warnings 'uninitialized';
+
+ return (
+ join( "",
+ "is_success(", $tx->is_success, ")",
+ " order_number(", $tx->order_number, ")",
+ " result_code(", $tx->result_code, ")",
+ " auth_info(", $tx->authorization, ")",
+ " avs_code(", $tx->avs_code, ")",
+ " cvv2_response(", $tx->cvv2_response, ")",
+ )
+ );
+}
diff --git a/t/pod-coverage.t b/t/pod-coverage.t
new file mode 100644
index 0000000..640ed2c
--- /dev/null
+++ b/t/pod-coverage.t
@@ -0,0 +1,10 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More;
+
+eval "use Test::Pod::Coverage 1.00";
+plan skip_all => "Test::Pod::Coverage 1.00 required for testing POD coverage"
+ if $@;
+all_pod_coverage_ok({ also_private => [ qw( required_fields ) ]});
diff --git a/t/pod.t b/t/pod.t
new file mode 100644
index 0000000..2c9935c
--- /dev/null
+++ b/t/pod.t
@@ -0,0 +1,9 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Test::More;
+
+eval "use Test::Pod 1.00";
+plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
+all_pod_files_ok();