Koha-clms/t/Koha/DateTime/Format/SQL.t

86 lines
2.5 KiB
Perl
Executable File

#!/usr/bin/perl
use Modern::Perl;
use DateTime::TimeZone;
use Test::Exception;
use Test::MockModule;
use Test::NoWarnings;
use Test::More;
BEGIN { use_ok('Koha::DateTime::Format::SQL'); }
my $local_timezone = DateTime::TimeZone->new( name => 'local' );
my $koha_config_mock = Test::MockModule->new('Koha::Config');
my $config = { timezone => '' };
$koha_config_mock->mock( 'get', sub { $config->{ $_[1] } } );
subtest 'normal datetime, no timezone configured' => sub {
plan tests => 7;
$config->{timezone} = '';
$Koha::DateTime::Format::SQL::timezone = undef;
my $dt = Koha::DateTime::Format::SQL->parse_datetime('2024-01-02 10:11:12');
is( $dt->year, 2024 );
is( $dt->month, 1 );
is( $dt->day, 2 );
is( $dt->hour, 10 );
is( $dt->minute, 11 );
is( $dt->second, 12 );
is( $dt->time_zone->name, $local_timezone->name );
};
subtest 'normal datetime, with timezone configured' => sub {
plan tests => 7;
$config->{timezone} = 'Pacific/Auckland';
$Koha::DateTime::Format::SQL::timezone = undef;
my $dt = Koha::DateTime::Format::SQL->parse_datetime('2024-01-02 10:11:12');
is( $dt->year, 2024 );
is( $dt->month, 1 );
is( $dt->day, 2 );
is( $dt->hour, 10 );
is( $dt->minute, 11 );
is( $dt->second, 12 );
is( $dt->time_zone->name, 'Pacific/Auckland' );
};
subtest 'infinite datetime, no timezone configured' => sub {
plan tests => 7;
$config->{timezone} = '';
$Koha::DateTime::Format::SQL::timezone = undef;
my $dt = Koha::DateTime::Format::SQL->parse_datetime('9999-01-02 10:11:12');
is( $dt->year, 9999 );
is( $dt->month, 1 );
is( $dt->day, 2 );
is( $dt->hour, 10 );
is( $dt->minute, 11 );
is( $dt->second, 12 );
is( $dt->time_zone->name, 'floating' );
};
subtest 'normal datetime, with timezone configured' => sub {
plan tests => 7;
$config->{timezone} = 'Pacific/Auckland';
$Koha::DateTime::Format::SQL::timezone = undef;
my $dt = Koha::DateTime::Format::SQL->parse_datetime('9999-01-02 10:11:12');
is( $dt->year, 9999 );
is( $dt->month, 1 );
is( $dt->day, 2 );
is( $dt->hour, 10 );
is( $dt->minute, 11 );
is( $dt->second, 12 );
is( $dt->time_zone->name, 'floating' );
};
done_testing;