summaryrefslogtreecommitdiff
path: root/t/021-payments-card-normal_authorization.t
blob: f4eb89babfe1f580e1f101c68dd69d4d3713572c (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
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;

use lib 't';
require 'TestFixtures.pm';
use Business::OnlinePayment;

my $merchant_id = $ENV{BAMBORA_MERCHANT_ID};
my $api_key     = $ENV{BAMBORA_API_KEY};

SKIP: {
  skip 'Missing env vars BAMBORA_MERCHANT_ID and BAMBORA_API_KEY', 78
    unless $merchant_id && $api_key;

  my %content = (
    login       => $merchant_id,
    password    => $api_key,
    action      => 'Normal Authorization',
    amount      => '9.99',

    owner       => 'Freeside Internet Services',
    name        => 'Mitch Jackson',
    address     => '1407 Graymalkin Lane',
    city        => 'Vancouver',
    state       => 'BC',
    zip         => '111 111',
    country     => 'CA',

    card_number => '4242424242424242',
    cvv2        => '111',
    expiration  => '1122',
    phone       => '251-300-1300',
    email       => 'mitch@freeside.biz',
  );

  # Test approved card numbers,
  # ref: https://dev.na.bambora.com/docs/references/payment_APIs/test_cards/
  my %approved_cards = (
    visa        => { card => '4030000010001234', cvv2 => '123' },
    mastercard  => { card => '5100000010001004', cvv2 => '123' },
    mastercard2 => { card => '2223000048400011', cvv2 => '123' },
    amex        => { card => '371100001000131',  cvv2 => '1234' },
    visa        => { card => '4030000010001234', cvv2 => '123' },
    discover    => { card => '6011500080009080', cvv2 => '123' },
  );

  for my $name ( keys %approved_cards ) {
    $content{card_number} = $approved_cards{$name}->{card};
    $content{cvv2} = $approved_cards{$name}->{cvv2};

    my $tr;
    ok( $tr = Business::OnlinePayment->new('Bambora'), 'Instantiatiate $tr' );
    ok( $tr->content( %content ), 'Set transaction content onto $tr' );
    {
      local $@;
      eval { $tr->submit };
      ok( !$@, "$name Process transaction (expect approve)" );
    }

    for my $attr (qw/
      is_success
      message_id
      authorization
      order_number
      txn_date
      avs_code
    /) {
      ok(
        defined $tr->$attr(),
        sprintf '%s $tr->%s() = %s',
          $name,
          $attr,
          $tr->$attr()
      );
    }
  }

  # Test declined card numbers,
  # ref: https://dev.na.bambora.com/docs/references/payment_APIs/test_cards/
  my %decline_cards = (
    visa        => { card => '4003050500040005', cvv2 => '123' },
    mastercard  => { card => '5100000020002000', cvv2 => '123' },
    amex        => { card => '342400001000180', cvv2 => '1234' },
    discover    => { card => '6011000900901111', cvv2 => '123' },
  );
  for my $name ( keys %decline_cards ) {
    $content{card_number} = $decline_cards{$name}->{card};
    $content{cvv2} = $decline_cards{$name}->{cvv2};

    my $tr;
    ok( $tr = Business::OnlinePayment->new('Bambora'), 'Instantiate $tr' );
    ok( $tr->content( %content ), 'Set transaction content onto $tr' );
    {
      local $@;
      eval { $tr->submit };
      ok( !$@, "$name: Process transaction (expect decline)" );
    }

    ok( $tr->is_success == 0, '$tr->is_success == 0' );
    ok( $tr->result_code != 1, '$tr->result_code != 1' );
    ok( $tr->error_message, '$tr->error_message: '.$tr->error_message );
  }
}

done_testing;