The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# bug #67064

use strict;
use warnings;

use DateTime;
use DateTime::Incomplete;
use Test::More;

# 7am in America/Sao_Paulo (UTC-03)
# Note we need to specify up to nanosecond - otherwise previous() will return an hour like 07:59:59.999999
my $dti = DateTime::Incomplete->new(
    hour       => 7,
    minute     => 0,
    second     => 0,
    nanosecond => 0,
    time_zone  => 'America/Sao_Paulo'
);

# 2011-03-29T00:00:00 UTC
my $dt =
  DateTime->new( year => 2011, month => 03, day => 29, time_zone => 'UTC' );

{

    # when is it next 7am in Brazil?  ... should be 10am UTC.
    my $next   = $dti->next($dt);
    my $dt_str = $next->datetime . " " . $next->time_zone->name;
    print "# $dt_str\n";
    is( $dt_str, "2011-03-29T10:00:00 UTC", 'result timezone is UTC' );

    $dt_str = $dt->datetime . " " . $dt->time_zone->name;
    print "# $dt_str\n";
    is( $dt_str, "2011-03-29T00:00:00 UTC", '$dt is the same' );
}

{

    # when is it previous 7am in Brazil?  ... should be 10am UTC.
    my $previous = $dti->previous($dt);
    my $dt_str   = $previous->datetime . " " . $previous->time_zone->name;
    print "# $dt_str\n";
    is( $dt_str, "2011-03-28T10:00:00 UTC", 'result timezone is UTC' );

    $dt_str = $dt->datetime . " " . $dt->time_zone->name;
    print "# $dt_str\n";
    is( $dt_str, "2011-03-29T00:00:00 UTC", '$dt is the same' );
}

done_testing;