use strict; use warnings; use Test::More; use Test::Fatal; use Class::Load qw( load_class ); use DateTime; my $card_c = load_class('Business::CyberSource::RequestPart::Card'); my $card0 = new_ok( $card_c => [{ account_number => '4111111111111111', expiration => { year => '2025', month => '04', }, }]); is $card0->type, 'VISA', 'type visa'; isa_ok $card0->expiration, 'DateTime', 'expiration object'; is $card0->expiration->month, 4, 'expiration month'; is $card0->expiration->year, 2025, 'expiration year'; is $card0->expiration->day, 30, 'expiration day'; is $card0->is_expired, 0, 'card0 not expired'; my $dt0 = DateTime->new( year => 2025, month => 4, day => 30 ); my $dt1 = DateTime->new( year => 2025, month => 5, day => 1 ); my $dt2 = DateTime->new( year => 2025, month => 5, day => 2 ); my $dt3 = DateTime->new( year => 2025, month => 6, day => 1 ); is $card0->_compare_date_against_expiration( $dt0 ), 0, 'april not expired'; is $card0->_compare_date_against_expiration( $dt1 ), 0, 'may 1 not expired'; is $card0->_compare_date_against_expiration( $dt2 ), 1, 'may 2 expired'; is $card0->_compare_date_against_expiration( $dt3 ), 1, 'june expired'; my $card1 = new_ok( $card_c => [{ account_number => '5555 5555 5555 4444', expiration => { year => '2012', month => '04', }, }]); is $card1->type, 'MASTERCARD', 'mastercard'; is $card1->is_expired, 1, 'card1 expired'; my $card2 = new_ok( $card_c => [{ account_number => '3566 1111 1111 1113', expiration => { year => '2012', month => '04', }, }]); is( $card2->type, 'JCB', 'JCB' ); done_testing;