# -*-perl-*-
# $Id: 07_utility.t,v 3.4 2004/02/26 02:02:29 lachoy Exp $
use strict;
use lib qw( t/ );
use Test::More tests => 17;
do "t/config.pl";
require_ok( 'SPOPS::Utility' );
# determine_limit()
{
my $limit_start = '5';
my ( $offset_start, $max_start ) = SPOPS::Utility->determine_limit( $limit_start );
is( $offset_start, 0, 'Limit start offset' );
is( $max_start, 5, 'Limit start max' );
my $limit_range = '15,25';
my ( $offset_range, $max_range ) = SPOPS::Utility->determine_limit( $limit_range );
is( $offset_range, 15, 'Limit range offset' );
is( $max_range, 40, 'Limit range max' );
}
# generate_random_code()
{
my $random_1 = SPOPS::Utility->generate_random_code(15);
is( length $random_1, 15, 'Random simple length' );
ok( $random_1 =~ /^[A-Z]+$/, 'Random simple all caps' );
my $random_2 = SPOPS::Utility->generate_random_code( 10, 'mixed' );
is( length $random_2, 10, 'Random mixed length' );
ok( $random_2 =~ /^[A-Za-z]+$/, 'Random mixed case' );
my %uniq = ();
for ( 1 .. 100 ) {
$uniq{ SPOPS::Utility->generate_random_code(10) }++;
}
is( scalar keys %uniq, 100, 'Generate 100 unique random codes' );
}
# date stuff
{
my $base_time = time;
my ( $sec, $min, $hour, $mday, $mon, $year, @date_info ) = localtime( $base_time );
$mon = sprintf( '%02d', $mon+1 );
$mday = sprintf( '%02d', $mday );
$hour = sprintf( '%02d', $hour );
$min = sprintf( '%02d', $min );
$sec = sprintf( '%02d', $sec );
$year += 1900;
SKIP: {
skip( 'Weird timezone interaction', 1 );
my $now = Class::Date->new({ time => $base_time })->strftime( '%Y-%m-%d %T' );
is( $now, "$year-$mon-$mday $hour:$min:$sec", 'Default format for now()' );
}
my $today = SPOPS::Utility->today();
is( $today, "$year-$mon-$mday", 'Format for today()' );
ok( SPOPS::Utility->now_between_dates({ begin => '2000-01-01',
end => '2010-01-01' }),
'Today is between date 1 and date 2' );
ok( ! SPOPS::Utility->now_between_dates({ begin => '2010-01-01',
end => '2011-01-01' }),
'Today is not between date 1 and date 2' );
my $date = Class::Date->new( $base_time );
}
# List process. The 'is_deeply' comparisons are a little cumbersome
# because we can't depend on the order of the items coming back.
{
my @existing = qw( a b c d );
my @new = qw( b d e );
my $process_results = SPOPS::Utility->list_process( \@existing, \@new );
my %add = map { $_ => 1 } @{ $process_results->{add} };
is_deeply( \%add, { 'e' => 1 }, 'List process add items' );
my %keep = map { $_ => 1 } @{ $process_results->{keep} };
is_deeply( \%keep, { 'b' => 1, 'd' => 1 }, 'List process keep items' );
my %remove = map { $_ => 1 } @{ $process_results->{remove} };
is_deeply( \%remove, { 'a' => 1, 'c' => 1 }, 'List process remove items' );
}