From 33468536729cb00592ce4ac4af3594b32a8bddb5 Mon Sep 17 00:00:00 2001 From: jeff Date: Wed, 26 Sep 2007 21:53:00 +0000 Subject: Initial import --- t/00load.t | 13 ++++ t/bop.t | 51 ++++++++++++++ t/credit_card.t | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++ t/live_card.t | 202 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ t/pod-coverage.t | 10 +++ t/pod.t | 9 +++ 6 files changed, 482 insertions(+) create mode 100644 t/00load.t create mode 100644 t/bop.t create mode 100644 t/credit_card.t create mode 100644 t/live_card.t create mode 100644 t/pod-coverage.t create mode 100644 t/pod.t (limited to 't') 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(); -- cgit v1.2.1