71513: Card tokenization [American Express tests]
authorJonathan Prykop <jonathan@freeside.biz>
Wed, 1 Feb 2017 22:31:56 +0000 (16:31 -0600)
committerJonathan Prykop <jonathan@freeside.biz>
Wed, 1 Feb 2017 22:31:56 +0000 (16:31 -0600)
FS/t/suite/13-tokenization.t
FS/t/suite/14-tokenization_refund.t

index 0a965aa..4b8794b 100755 (executable)
@@ -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') ) {
 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.';
 }
 
 } 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
 
 ### 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);
 
 $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;
 # find two stored credit cards.
 my @cust = map { FS::cust_main->by_key($_) } (10, 12);
 my @payby = map { ($_->cust_payby)[0] } @cust;
index 1a0f840..a7d9fa8 100755 (executable)
@@ -229,8 +229,10 @@ foreach my $voiding (0,1) {
 exit;
 
 sub random_card {
 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')
   my $paydate = DateTime->now
                 ->add('years' => 1)
                 ->truncate(to => 'month')
@@ -239,6 +241,7 @@ sub random_card {
            'payinfo'  => $payinfo,
            'paydate'  => $paydate,
            'payname'  => 'Tokenize Me',
            'payinfo'  => $payinfo,
            'paydate'  => $paydate,
            'payname'  => 'Tokenize Me',
+           'paycvv'   => '1234', #American Express
   );
 }
 
   );
 }