s/JetPay/ippay/ per new spec
[Business-OnlinePayment-IPPay.git] / t / card.t
1 #!/usr/bin/perl -w
2
3 use Test::More;
4 require "t/lib/test_account.pl";
5
6 my($login, $password, %opt) = test_account_or_skip('card');
7 plan tests => 50;
8   
9 use_ok 'Business::OnlinePayment';
10
11 my %content = (
12     type           => 'VISA',
13     login          => $login,
14     password       => $password,
15     action         => 'Normal Authorization',
16     description    => 'Business::OnlinePayment visa test',
17 #    card_number    => '4007000000027',
18     card_number    => '4111111111111111',
19     cvv2           => '123',
20     expiration     => expiration_date(),
21     amount         => '49.95',
22     name           => 'Tofu Beast',
23     email          => 'ippay@weasellips.com',
24     address        => '123 Anystreet',
25     city           => 'Anywhere',
26     state          => 'UT',
27     zip            => '84058',
28     country        => 'US',      # will be forced to USA
29     customer_id    => 'tfb',
30 );
31
32 my $voidable;
33 my $voidable_auth;
34 my $voidable_amount = 0;
35
36 # valid card number test
37 {
38   my $tx = Business::OnlinePayment->new("IPPay", %opt);
39   $tx->content(%content);
40   tx_check(
41     $tx,
42     desc          => "valid card_number",
43     is_success    => 1,
44     result_code   => '000',
45     error_message => 'APPROVED',
46     authorization => qr/TEST\d{2}/,
47 #    avs_code      => 'U',          # so rather pointless :\
48     avs_code      => 'Y',          # so very pointless :\
49     cvv2_response => 'P',          # ...
50   );
51   $voidable = $tx->order_number if $tx->is_success;
52   $voidable_auth = $tx->authorization if $tx->is_success;
53   $voidable_amount = $content{amount} if $tx->is_success;
54 }
55
56 # invalid card number test
57 {
58   my $tx = Business::OnlinePayment->new("IPPay", %opt);
59   $tx->content(%content, card_number => "4111111111111112" );
60   tx_check(
61     $tx,
62     desc          => "invalid card_number",
63     is_success    => 0,
64     result_code   => '900', #'912' with old jetpay gw
65     error_message => 'Invalid card number.  ', #'INVALID CARD NUMBER' w/old gw
66     authorization => qr/^$/,
67     avs_code      => '',           # so rather pointless :\
68     cvv2_response => '',           # ...
69     order_number  => qr/^$/,
70   );
71 }
72
73 # authorization only test
74 {
75   my $tx = Business::OnlinePayment->new("IPPay", %opt);
76   $tx->content(%content, action => 'authorization only',  amount => '3.00' );
77   tx_check(
78     $tx,
79     desc          => "authorization only",
80     is_success    => 1,
81     result_code   => '000',
82     error_message => 'APPROVED',
83     authorization => qr/TEST\d{2}/,
84 #    avs_code      => 'U',          # so rather pointless :\
85     avs_code      => 'Y',          # so very pointless :\
86     cvv2_response => 'P',          # ...
87   );
88   $postable = $tx->order_number if $tx->is_success;
89   $postable_auth = $tx->authorization if $tx->is_success;
90   $postable_amount = $content{amount} if $tx->is_success;
91 }
92
93 # authorization void test
94 {
95
96   my $tx = Business::OnlinePayment->new("IPPay", %opt);
97   $tx->content(%content, action => 'authorization only',  amount => '3.00' );
98   $tx->test_transaction(1);
99   $tx->submit;
100
101   if ($tx->is_success) {
102     my $void_tx = Business::OnlinePayment->new("IPPay", %opt );
103
104     $tx->content(%content, action       => 'reverse authorization',
105                            order_number => $tx->order_number );
106     tx_check(
107       $tx,
108       desc          => "reverse authorization",
109       is_success    => 1,
110       result_code   => '000',
111       error_message => 'VOID SUCCESSFUL',
112       authorization => qr/TEST\d{2}/,
113       avs_code      => '',          # so rather pointless :\
114       cvv2_response => 'P',          # ...
115     );
116   }
117   else {
118     
119   }
120 }
121
122 # post authorization test
123 {
124   my $tx = new Business::OnlinePayment( "IPPay", %opt );
125   $tx->content( %content, 'action'       => "post authorization", 
126                           'amount'       => $postable_amount,    # not required
127                           'order_number' => $postable,
128               );
129   tx_check(
130     $tx,
131     desc          => "post authorization",
132     is_success    => 1,
133     result_code   => '000',
134     error_message => 'APPROVED',
135     authorization => qr/^$postable_auth$/,
136     avs_code      => '',
137     cvv2_response => '',
138     );
139 }
140
141 # void test
142 {
143   my $tx = new Business::OnlinePayment( "IPPay", %opt );
144   $tx->content( %content, 'action' => "Void",
145                           'order_number' => $voidable,
146                           'authorization' => $voidable_auth,
147               );
148   tx_check(
149     $tx,
150     desc          => "void",
151     is_success    => 1,
152     result_code   => '000',
153     error_message => 'VOID SUCCESSFUL',
154     authorization => qr/TEST\d{2}/,
155     avs_code      => '',
156     cvv2_response => 'P',
157     );
158 }
159
160 # credit test
161 {
162   my $tx = new Business::OnlinePayment( "IPPay", %opt );
163   $tx->content( %content, 'action' => "credit");
164   tx_check(
165     $tx,
166     desc          => "credit",
167     is_success    => 1,
168     result_code   => '000',
169     error_message => 'APPROVED',
170     authorization => qr/TEST\d{2}/,
171     avs_code      => '',
172     cvv2_response => 'P',
173     );
174 }
175
176
177 sub tx_check {
178     my $tx = shift;
179     my %o  = @_;
180
181     $tx->test_transaction(1);
182     $tx->submit;
183
184     is(   $tx->is_success,    $o{is_success},    "$o{desc}: ". tx_info($tx)  );
185     is(   $tx->result_code,   $o{result_code},   "$o{desc}: result_code()"   );
186     is(   $tx->error_message, $o{error_message}, "$o{desc}: error_message()" );
187     like( $tx->authorization, $o{authorization}, "$o{desc}: authorization()" );
188     is(   $tx->avs_code,      $o{avs_code},      "$o{desc}: avs_code()"      );
189     is(   $tx->cvv2_response, $o{cvv2_response}, "$o{desc}: cvv2_response()" );
190     like( $tx->order_number,  $o{order_number}
191                                 || qr/^\w{18}/,  "$o{desc}: order_number()"  );
192 }
193
194 sub tx_info {
195     my $tx = shift;
196
197     no warnings 'uninitialized';
198
199     return (
200         join( "",
201             "is_success(",     $tx->is_success,    ")",
202             " order_number(",  $tx->order_number,  ")",
203             " error_message(", $tx->error_message, ")",
204             " result_code(",   $tx->result_code,   ")",
205             " auth_info(",     $tx->authorization, ")",
206             " avs_code(",      $tx->avs_code,      ")",
207             " cvv2_response(", $tx->cvv2_response, ")",
208         )
209     );
210 }
211