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;
|