From a3c4ce01b36bacf1169bd1897bf7f22a4ab992a8 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Fri, 7 Jul 2017 13:03:39 +0000 Subject: [PATCH] Bug 9031: Unit tests for DST crossing in (days|hours)_between Signed-off-by: Marcel de Rooy Without the patch for Calendar.pm, this crashes on: Invalid local time for date in time zone: America/New_York But even with the original change to Calendar.pm, I would see: Invalid local time for date in time zone: Europe/Amsterdam Adding a follow-up for that. Signed-off-by: Nick Clemens Signed-off-by: Jonathan Druart --- t/db_dependent/Calendar.t | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/t/db_dependent/Calendar.t b/t/db_dependent/Calendar.t index d443f112e9..751cd86efe 100644 --- a/t/db_dependent/Calendar.t +++ b/t/db_dependent/Calendar.t @@ -17,12 +17,13 @@ use Modern::Perl; -use Test::More tests => 5; +use Test::More tests => 6; use t::lib::TestBuilder; use DateTime; use Koha::Caches; use Koha::DateUtils; +use POSIX qw(tzset); use_ok('Koha::Calendar'); @@ -66,4 +67,20 @@ is($forwarded_dt->ymd, $today->ymd, '0 day should return start dt'); $forwarded_dt = $calendar->days_forward($today, -2); is($forwarded_dt->ymd, $today->ymd, 'negative day should return start dt'); +subtest 'crossing_DST' => sub { + + plan tests => 2; + + $ENV{TZ} = 'America/New_York'; + tzset; + my $tz = DateTime::TimeZone->new( name => 'local' ); + my $start_date = dt_from_string( "2016-03-09 02:29:00",undef,$tz ); + my $end_date = dt_from_string("2017-01-01"); + my $days_between = $calendar->days_between($start_date,$end_date); + is($days_between->{days}, 298, "Days calculated correctly"); + my $hours_between = $calendar->hours_between($start_date,$end_date); + is($hours_between->{minutes}, 428671, "Hours (in minutes) calculated correctly"); + +}; + $schema->storage->txn_rollback(); -- 2.39.5