Initial import
[Business-OnlinePayment-viaKLIX.git] / t / credit_card.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use POSIX qw(strftime);
6 use Test::More;
7
8 use Business::OnlinePayment;
9
10 my $runinfo =
11     "to test set environment variables:"
12   . " (required) VIAKLIX_ACCOUNT, VIAKLIX_USERID, and VIAKLIX_PASSWORD";
13
14 plan(
15       (   $ENV{"VIAKLIX_ACCOUNT"}
16        && $ENV{"VIAKLIX_USERID"}
17        && $ENV{"VIAKLIX_PASSWORD"} )
18     ? ( tests => 42 )
19     : ( skip_all => $runinfo )
20 );
21
22 my %opts = (
23     "debug"                      => 0,
24     "default_ssl_user_id"        => $ENV{"VIAKLIX_USERID"},
25     "default_ssl_salestax"       => "0.00",
26     "default_ssl_customer_code"  => "TESTCUSTOMER",
27 );
28
29 my %content = (
30     login          => $ENV{"VIAKLIX_ACCOUNT"},
31     password       => $ENV{"VIAKLIX_PASSWORD"},
32     action         => "Normal Authorization",
33     type           => "VISA",
34     description    => "Business::OnlinePayment::viaKLIX test",
35     card_number    => "4111111111111111",
36     cvv2           => "123",
37     expiration     => "12/" . strftime( "%y", localtime ),
38     amount         => "0.01",
39     invoice_number => "Test1",
40     first_name     => "Tofu",
41     last_name      => "Beast",
42     email          => 'viaklix@weasellips.com',
43     address        => "123 Anystreet",
44     city           => "Anywhere",
45     state          => "GA",
46     zip            => "30004",
47     country        => "US",
48 );
49
50 {    # valid card number test
51     my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
52     $tx->content(%content);
53     tx_check(
54         $tx,
55         desc          => "valid card_number",
56         is_success    => 1,
57         result_code   => "0",
58         authorization => "123456",
59         avs_code      => "X",
60         cvv2_response => "P",
61         order_number  => "00000000-0000-0000-0000-000000000000",
62     );
63 }
64
65 {    # invalid card number test
66
67     my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
68     $tx->content( %content, card_number => "4111111111111112" );
69     tx_check(
70         $tx,
71         desc          => "invalid card_number",
72         is_success    => 0,
73         result_code   => 4000,
74         authorization => undef,
75         avs_code      => undef,
76         cvv2_response => undef,
77         order_number  => undef,
78     );
79 }
80
81
82 SKIP: {    # avs_code() / AVSZIP and AVSADDR tests
83
84     skip "AVS tests broken", 18;
85
86     my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
87
88     $tx->content( %content, "address" => "500 Any street" );
89     tx_check(
90         $tx,
91         desc          => "AVSADDR=N,AVSZIP=Y",
92         is_success    => 1,
93         result_code   => "0",
94         authorization => "123456",
95         avs_code      => "Z",
96         cvv2_response => "P",
97         order_number  => "00000000-0000-0000-0000-000000000000",
98     );
99
100     $tx = new Business::OnlinePayment( "viaKLIX", %opts );
101     $tx->content( %content, "zip" => "99999" );
102     tx_check(
103         $tx,
104         desc          => "AVSADDR=Y,AVSZIP=N",
105         is_success    => 1,
106         result_code   => "0",
107         authorization => "123456",
108         avs_code      => "A",
109         cvv2_response => "P",
110         order_number  => "00000000-0000-0000-0000-000000000000",
111     );
112
113     $tx = new Business::OnlinePayment( "viaKLIX", %opts );
114     $tx->content( %content, "address" => "500 Any street", "zip" => "99999" );
115     tx_check(
116         $tx,
117         desc          => "AVSADDR=N,AVSZIP=N",
118         is_success    => 1,
119         result_code   => "0",
120         authorization => "123456",
121         avs_code      => "N",
122         cvv2_response => "P",
123         order_number  => "00000000-0000-0000-0000-000000000000",
124     );
125 }
126
127 SKIP: {    # cvv2_response() / CVV2MATCH
128
129     skip "CVV2 tests broken", 6;
130
131     my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
132
133     $tx->content( %content, "cvv2" => "301" );
134     tx_check(
135         $tx,
136         desc          => "wrong cvv2",
137         is_success    => 1,
138         result_code   => "0",
139         authorization => "123456",
140         avs_code      => "X",
141         cvv2_response => "N",
142         order_number  => "00000000-0000-0000-0000-000000000000",
143     );
144
145 }
146
147 SKIP: {    # refund test
148
149     skip "credit/refund tests broken", 6;
150
151     my $tx = new Business::OnlinePayment( "viaKLIX", %opts );
152     $tx->content( %content, 'action' => "Credit",
153                             'card_number' => "4444333322221111",
154                 );
155     tx_check(
156         $tx,
157         desc          => "refund/credit",
158         is_success    => 1,
159         result_code   => "0",
160         authorization => undef,
161         avs_code      => undef,
162         cvv2_response => undef,
163         order_number  => "00000000-0000-0000-0000-000000000000",
164     );
165 }
166
167 sub tx_check {
168     my $tx = shift;
169     my %o  = @_;
170
171     $tx->test_transaction(1);
172     $tx->submit;
173
174     is( $tx->is_success,    $o{is_success},    "$o{desc}: " . tx_info($tx) );
175     is( $tx->result_code,   $o{result_code},   "result_code(): RESULT" );
176     is( $tx->authorization, $o{authorization}, "authorization() / AUTHCODE" );
177     is( $tx->avs_code,  $o{avs_code},  "avs_code() / AVSADDR and AVSZIP" );
178     is( $tx->cvv2_response, $o{cvv2_response}, "cvv2_response() / CVV2MATCH" );
179     is( $tx->order_number, $o{order_number}, "order_number() / PNREF" );
180 }
181
182 sub tx_info {
183     my $tx = shift;
184
185     no warnings 'uninitialized';
186
187     return (
188         join( "",
189             "is_success(",     $tx->is_success,    ")",
190             " order_number(",  $tx->order_number,  ")",
191             " result_code(",   $tx->result_code,   ")",
192             " auth_info(",     $tx->authorization, ")",
193             " avs_code(",      $tx->avs_code,      ")",
194             " cvv2_response(", $tx->cvv2_response, ")",
195         )
196     );
197 }