use strict;
use warnings;
use Test::More;
use Module::Runtime qw( use_module );
use FindBin; use lib "$FindBin::Bin/lib";
my $dtc = use_module('Business::CyberSource::Request::Authorization');
my $t = new_ok( use_module('Test::Business::CyberSource') );
my @test_pairs = (
[ '4111111111111111' => '001' ],
[ '5555555555554444' => '002' ],
[ '3566111111111113' => '007' ],
);
foreach ( @test_pairs ) {
my ( $acct_num, $type_code ) = @{ $_ };
my $dto = new_ok( $dtc => [{
reference_code => my $code = $dtc . '->new',
purchase_totals => $t->resolve( service => '/helper/purchase_totals'),
bill_to => $t->resolve( service => '/helper/bill_to'),
card => $t->resolve(
service => '/helper/card',
parameters => {
account_number => $acct_num,
},
),
}]);
can_ok( $dto, 'serialize' );
isa_ok $dto->bill_to, 'Business::CyberSource::RequestPart::BillTo';
isa_ok $dto->purchase_totals, 'Business::CyberSource::RequestPart::PurchaseTotals';
isa_ok $dto->card, 'Business::CyberSource::RequestPart::Card';
my %expected = (
billTo => {
firstName => 'Caleb',
lastName => 'Cushing',
country => 'US',
ipAddress => '192.168.100.2',
street1 => 'somewhere',
state => 'TX',
email => 'xenoterracide@gmail.com',
city => 'Houston',
postalCode => '77064',
},
card => {
accountNumber => $acct_num,
cardType => $type_code,
cvIndicator => 1,
cvNumber => 1111,
expirationMonth => 5,
expirationYear => 2025,
fullName => 'Caleb Cushing',
},
ccAuthService => {
run => 'true',
},
purchaseTotals => {
currency => 'USD',
grandTotalAmount => 3000.00,
},
merchantReferenceCode => $code,
);
is_deeply $dto->serialize, \%expected, 'serialize';
is( ref( $dto->serialize ), 'HASH', 'serialize returns a hashref' );
is( $dto->reference_code, $code, $dtc .'->reference_code' );
}
done_testing;