#!/usr/bin/perl use FS::Test; use Test::More tests => 9; use FS::Conf; ### can only run on test database (company name "Freeside Test") ### will run upgrade, which uses lots of prints & warns beyond regular test output my $fs = FS::Test->new( user => 'admin' ); my $conf = new_ok('FS::Conf'); my $err; my $bopconf; like( $conf->config('company_name'), qr/^Freeside Test/, 'using test database' ) or BAIL_OUT(''); # some pre-upgrade cleanup, upgrade will fail if these are still configured foreach my $cust_main ( $fs->qsearch('cust_main') ) { my @count = $fs->qsearch('agent_payment_gateway', { agentnum => $cust_main->agentnum } ); if (@count > 1) { note("DELETING CARDTYPE GATEWAYS"); foreach my $apg (@count) { $err = $apg->delete if $apg->cardtype; last if $err; } @count = $fs->qsearch('agent_payment_gateway', { agentnum => $cust_main->agentnum } ); if (@count > 1) { $err = "Still found ".@count." gateways for custnum ".$cust_main->custnum; last; } } } ok( !$err, "remove obsolete payment gateways" ) or BAIL_OUT($err); $bopconf = 'IPPay TESTTERMINAL'; $conf->set('business-onlinepayment' => $bopconf); is( join("\n",$conf->config('business-onlinepayment')), $bopconf, "setting first default gateway" ) or BAIL_OUT(''); # generate a few void/refund records for upgrading my $counter = 20; foreach my $cust_pay ( $fs->qsearch('cust_pay',{ payby => 'CARD' }) ) { if ($counter % 2) { $err = $cust_pay->void('Testing'); $err = "Voiding: $err" if $err; } else { # from realtime_refund_bop, just the important bits while ( $cust_pay->unapplied < $cust_pay->paid ) { my @cust_bill_pay = $cust_pay->cust_bill_pay; last unless @cust_bill_pay; my $cust_bill_pay = pop @cust_bill_pay; $err = $cust_bill_pay->delete; $err = "Refund unapply: $err" if $err; last if $err; } last if $err; my $cust_refund = new FS::cust_refund ( { 'custnum' => $cust_pay->cust_main->custnum, 'paynum' => $cust_pay->paynum, 'source_paynum' => $cust_pay->paynum, 'refund' => $cust_pay->paid, '_date' => '', 'payby' => $cust_pay->payby, 'payinfo' => $cust_pay->payinfo, 'reason' => 'Testing', 'gatewaynum' => $cust_pay->gatewaynum, 'processor' => $cust_pay->payment_gateway ? $cust_pay->payment_gateway->processor : '', 'auth' => $cust_pay->auth, 'order_number' => $cust_pay->order_number, } ); $err = $cust_refund->insert( reason_type => 'Refund' ); $err = "Refunding: $err" if $err; } last if $err; $counter -= 1; last unless $counter > 0; } ok( !$err, "create some refunds and voids" ) or BAIL_OUT($err); $err = system('freeside-upgrade','admin'); ok( !$err, 'initial upgrade' ) or BAIL_OUT('Error string: '.$!); $bopconf = 'CardFortress cardfortresstest (TEST54) Normal Authorization gateway IPPay gateway_login TESTTERMINAL gateway_password private_key /usr/local/etc/freeside/cardfortresstest.txt'; $conf->set('business-onlinepayment' => $bopconf); is( join("\n",$conf->config('business-onlinepayment')), $bopconf, "setting tokenizable default gateway" ) or BAIL_OUT(''); foreach my $pg ($fs->qsearch('payment_gateway')) { unless ($pg->gateway_module eq 'CardFortress') { note('UPGRADING NON-CF PAYMENT GATEWAY'); my %pgopts = ( gateway => $pg->gateway_module, gateway_login => $pg->gateway_username, gateway_password => $pg->gateway_password, private_key => '/usr/local/etc/freeside/cardfortresstest.txt', ); $pg->gateway_module('CardFortress'); $pg->gateway_username('cardfortresstest'); $pg->gateway_password('(TEST54)'); $err = $pg->replace(\%pgopts); last if $err; } } ok( !$err, "remove non-CF payment gateways" ) or BAIL_OUT($err); $err = system('freeside-upgrade','admin'); ok( !$err, 'tokenizable upgrade' ) or BAIL_OUT('Error string: '.$!); 1;