X-Git-Url: http://git.freeside.biz/gitweb/?p=Business-OnlinePayment-Bambora.git;a=blobdiff_plain;f=t%2F032-payments-card-pre-authorization-complete-void.t;fp=t%2F032-payments-card-pre-authorization-complete-void.t;h=7c575c976a2ce275ccaa62bffeea636b2d8ad09d;hp=0000000000000000000000000000000000000000;hb=24c86c6b9136ad878a118d57fc9b876eee3672f8;hpb=775e7c0cd1eea41d5f7d5fa980db865e44162a80 diff --git a/t/032-payments-card-pre-authorization-complete-void.t b/t/032-payments-card-pre-authorization-complete-void.t new file mode 100755 index 0000000..7c575c9 --- /dev/null +++ b/t/032-payments-card-pre-authorization-complete-void.t @@ -0,0 +1,172 @@ +#!/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', 32 + unless $merchant_id && $api_key; + + my %content = ( + login => $merchant_id, + password => $api_key, + action => 'Authorization Only', + amount => '9.99', + + owner => 'Freeside Internet Services', + name => 'Mitch Jackson', + address => '1407 Graymalkin Lane', + city => 'Vancouver', + state => 'BC', + zip => '111 111', + country => 'CA', + + invoice_number => time(), + card_number => '4030000010001234', + cvv2 => '123', + expiration => '1122', + phone => '251-300-1300', + email => 'mitch@freeside.biz', + ); + + my $tr; + ok( $tr = Business::OnlinePayment->new('Bambora'), 'Instantiatiate $tr' ); + ok( $tr->content( %content ), 'Set transaction content onto $tr' ); + { + local $@; + eval { $tr->submit }; + ok( !$@, "Submit pre-auth (expect approve)" ); + } + + my $response; + my %expect = ( + amount => '9.99', + approved => 1, + auth_code => 'TEST', + message => 'Approved', + message_id => 1, + payment_method => 'CC', + type => 'PA', + ); + my @expect = qw( + card + created + order_number + risk_score + id + ); + + ok( $response = $tr->response_decoded, 'response_decoded' ); + + for my $k ( keys %expect ) { + ok( + $response->{$k} eq $expect{$k}, + sprintf '$tr->%s == %s', $k, $expect{$k} + ); + } + + for my $k ( @expect ) { + ok( + defined $response->{$k}, + sprintf '$r->%s (%s)', + $k, $response->{$k} + ); + } + + %content = ( + %content, + action => 'Post Authorization', + order_number => $tr->order_number, + amount => '8.99', # $1 Less than pre-auth + ); + + my $tr_pa; + ok( $tr_pa = Business::OnlinePayment->new('Bambora'), 'Instantiate $tr_pa' ); + ok( $tr_pa->content( %content ), 'Set transaction content onto $tr_pa' ); + { + local $@; + eval { $tr_pa->submit }; + ok( !$@, "Submit post-auth" ); + warn "Error: $@" if $@; + } + + %expect = ( + amount => '8.99', + approved => '1', + message => 'Approved', + message_id => '1', + type => 'PAC', + ); + @expect = (qw/ + authorizing_merchant_id + card + created + order_number + id + /); + + my $response_pa; + ok( $response_pa = $tr_pa->response_decoded, 'response_decoded' ); + + for my $k ( keys %expect ) { + ok( + $response_pa->{$k} eq $expect{$k}, + sprintf '$tr->%s == %s', $k, $expect{$k} + ); + } + + for my $k ( @expect ) { + ok( + defined $response_pa->{$k}, + sprintf '$r->%s (%s)', + $k, $response_pa->{$k} + ); + } + + # + # Void Transaction + # + + my %content_void = ( + action => 'Void', + login => $content{login}, + password => $content{password}, + order_number => $tr_pa->order_number, + amount => '8.99', + ); + + my $tr_void; + ok( $tr_void = Business::OnlinePayment->new('Bambora'), 'Instantiate $tr_void' ); + ok( $tr_void->content( %content_void ), 'Set transaction content onto $tr_void' ); + { + local $@; + eval { $tr_void->submit }; + ok( !$@, "Submit void" ); + warn "Error: $@" if $@; + } + + %expect = ( + amount => '8.99', + approved => '1', + message => 'Approved', + message_id => '1', + type => 'R', + ); + @expect = (qw/ + authorizing_merchant_id + card + created + order_number + id + /); + +} + +done_testing; \ No newline at end of file