From 5701cfb8cfe8458f2083957bc13fef15190c201c Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Wed, 1 Feb 2017 16:31:56 -0600 Subject: [PATCH] 71513: Card tokenization [American Express tests] --- FS/t/suite/13-tokenization.t | 30 +++++++++++++++++++++++++++++- FS/t/suite/14-tokenization_refund.t | 7 +++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/FS/t/suite/13-tokenization.t b/FS/t/suite/13-tokenization.t index 0a965aa87..4b8794b3a 100755 --- a/FS/t/suite/13-tokenization.t +++ b/FS/t/suite/13-tokenization.t @@ -8,11 +8,13 @@ use FS::cust_main; use Business::CreditCard qw(generate_last_digit); use DateTime; if ( stat('/usr/local/etc/freeside/cardfortresstest.txt') ) { - plan tests => 18; + plan tests => 25; } else { plan skip_all => 'CardFortress test encryption key is not installed.'; } +#local $FS::cust_main::Billing_Realtime::DEBUG = 2; + ### can only run on test database (company name "Freeside Test") ### will run upgrade, which uses lots of prints & warns beyond regular test output @@ -85,6 +87,32 @@ my $pending_failed = FS::cust_pay_pending->new({ $err = $pending_failed->insert; ok( !$err, "create a failed payment attempt" ) or BAIL_OUT($err); +# create two customers with an AmEx card & paycvv, +# then run a payment with one, just to generate some test AmEx data + +my $amex_cust; +foreach my $i (0,1) { + my $cust_main = $fs->new_customer("AmEx $i"); + isa_ok ( $cust_main, 'FS::cust_main', "AmEx $i customer" ) or BAIL_OUT(''); + $err = $cust_main->insert; + ok( !$err, "insert AmEx $i customer" ) or BAIL_OUT($err); + # add card + my $cust_payby; + my %card = random_card(); + $card{'payinfo'} = '347594362484937'; + $card{'paycvv'} = '1234'; + $err = $cust_main->save_cust_payby( + %card, + payment_payby => $card{'payby'}, + auto => 1, + saved_cust_payby => \$cust_payby + ); + ok( !$err, "save AmEx $i card" ) or BAIL_OUT($err); + $amex_cust = $cust_main; +} +$err = $amex_cust->realtime_cust_payby( amount => '1.00' ); +ok( !$err, "run AmEx payment" ) or BAIL_OUT($err); + # find two stored credit cards. my @cust = map { FS::cust_main->by_key($_) } (10, 12); my @payby = map { ($_->cust_payby)[0] } @cust; diff --git a/FS/t/suite/14-tokenization_refund.t b/FS/t/suite/14-tokenization_refund.t index 1a0f8405e..a7d9fa8c5 100755 --- a/FS/t/suite/14-tokenization_refund.t +++ b/FS/t/suite/14-tokenization_refund.t @@ -229,8 +229,10 @@ foreach my $voiding (0,1) { exit; sub random_card { - my $payinfo = '4111' . join('', map { int(rand(10)) } 1 .. 11); - $payinfo .= generate_last_digit($payinfo); +# my $payinfo = '4111' . join('', map { int(rand(10)) } 1 .. 11); +# $payinfo .= generate_last_digit($payinfo); +# Use AmEx for everything, to make sure cardtype gets set correctly + my $payinfo = '347594362484937'; #American Express my $paydate = DateTime->now ->add('years' => 1) ->truncate(to => 'month') @@ -239,6 +241,7 @@ sub random_card { 'payinfo' => $payinfo, 'paydate' => $paydate, 'payname' => 'Tokenize Me', + 'paycvv' => '1234', #American Express ); } -- 2.11.0