Pre-auth and voids
[Business-OnlinePayment-Bambora.git] / t / 021-payments-card-normal_authorization.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More;
5
6 use lib 't';
7 require 'TestFixtures.pm';
8 use Business::OnlinePayment;
9
10 my $merchant_id = $ENV{BAMBORA_MERCHANT_ID};
11 my $api_key     = $ENV{BAMBORA_API_KEY};
12
13 SKIP: {
14   skip 'Missing env vars BAMBORA_MERCHANT_ID and BAMBORA_API_KEY', 78
15     unless $merchant_id && $api_key;
16
17   my %content = (
18     login       => $merchant_id,
19     password    => $api_key,
20     action      => 'Normal Authorization',
21     amount      => '9.99',
22
23     owner       => 'Freeside Internet Services',
24     name        => 'Mitch Jackson',
25     address     => '1407 Graymalkin Lane',
26     city        => 'Vancouver',
27     state       => 'BC',
28     zip         => '111 111',
29     country     => 'CA',
30
31     card_number => '4242424242424242',
32     cvv2        => '111',
33     expiration  => '1122',
34     phone       => '251-300-1300',
35     email       => 'mitch@freeside.biz',
36   );
37
38   # Test approved card numbers,
39   # ref: https://dev.na.bambora.com/docs/references/payment_APIs/test_cards/
40   my %approved_cards = (
41     visa        => { card => '4030000010001234', cvv2 => '123' },
42     mastercard  => { card => '5100000010001004', cvv2 => '123' },
43     mastercard2 => { card => '2223000048400011', cvv2 => '123' },
44     amex        => { card => '371100001000131',  cvv2 => '1234' },
45     visa        => { card => '4030000010001234', cvv2 => '123' },
46     discover    => { card => '6011500080009080', cvv2 => '123' },
47   );
48
49   for my $name ( keys %approved_cards ) {
50     $content{card_number} = $approved_cards{$name}->{card};
51     $content{cvv2} = $approved_cards{$name}->{cvv2};
52
53     my $tr;
54     ok( $tr = Business::OnlinePayment->new('Bambora'), 'Instantiatiate $tr' );
55     ok( $tr->content( %content ), 'Set transaction content onto $tr' );
56     {
57       local $@;
58       eval { $tr->submit };
59       ok( !$@, "$name Process transaction (expect approve)" );
60     }
61
62     for my $attr (qw/
63       is_success
64       message_id
65       authorization
66       order_number
67       txn_date
68       avs_code
69     /) {
70       ok(
71         defined $tr->$attr(),
72         sprintf '%s $tr->%s() = %s',
73           $name,
74           $attr,
75           $tr->$attr()
76       );
77     }
78   }
79
80   # Test declined card numbers,
81   # ref: https://dev.na.bambora.com/docs/references/payment_APIs/test_cards/
82   my %decline_cards = (
83     visa        => { card => '4003050500040005', cvv2 => '123' },
84     mastercard  => { card => '5100000020002000', cvv2 => '123' },
85     amex        => { card => '342400001000180', cvv2 => '1234' },
86     discover    => { card => '6011000900901111', cvv2 => '123' },
87   );
88   for my $name ( keys %decline_cards ) {
89     $content{card_number} = $decline_cards{$name}->{card};
90     $content{cvv2} = $decline_cards{$name}->{cvv2};
91
92     my $tr;
93     ok( $tr = Business::OnlinePayment->new('Bambora'), 'Instantiate $tr' );
94     ok( $tr->content( %content ), 'Set transaction content onto $tr' );
95     {
96       local $@;
97       eval { $tr->submit };
98       ok( !$@, "$name: Process transaction (expect decline)" );
99     }
100
101     ok( $tr->is_success == 0, '$tr->is_success == 0' );
102     ok( $tr->result_code != 1, '$tr->result_code != 1' );
103     ok( $tr->error_message, '$tr->error_message: '.$tr->error_message );
104   }
105 }
106
107 done_testing;