summaryrefslogtreecommitdiff
path: root/FS/t/suite/13-tokenization.t
blob: 9a3ef3f2238e25eeaae4354f45eed0315bdfc687 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/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;