Bug 23974: Add new tests for hours_between

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
Jonathan Druart 2019-11-05 16:23:00 +01:00 committed by Martin Renvoize
parent 7f506d4163
commit 5029ed9bd2
No known key found for this signature in database
GPG Key ID: 422B469130441A0F
1 changed files with 143 additions and 1 deletions

View File

@ -17,7 +17,8 @@
use Modern::Perl;
use Test::More tests => 3;
use Test::More tests => 4;
use Time::Fake;
use t::lib::TestBuilder;
use DateTime;
@ -91,4 +92,145 @@ subtest 'crossing_DST' => sub {
);
};
subtest 'hours_between' => sub {
plan tests => 2;
# November 2019
# Su Mo Tu We Th Fr Sa
# 1 2
# 3 4 *5* 6 7 8 9
# 10 11 12 13 14 15 16
# 17 18 19 20 21 22 23
# 24 25 26 27 28 29 30
my $now = dt_from_string('2019-11-05 12:34:56'); # Today is 2019 Nov 5th
my $nov_6 = dt_from_string('2019-11-06 12:34:56');
my $nov_7 = dt_from_string('2019-11-07 12:34:56');
my $nov_12 = dt_from_string('2019-11-12 12:34:56');
my $nov_13 = dt_from_string('2019-11-13 12:34:56');
my $nov_15 = dt_from_string('2019-11-15 12:34:56');
Time::Fake->offset($now->epoch);
subtest 'No holiday' => sub {
plan tests => 2;
my $library = $builder->build_object({ class => 'Koha::Libraries' });
my $calendar = Koha::Calendar->new( branchcode => $library->branchcode );
subtest 'Same hours' => sub {
plan tests => 4;
# Between 5th and 6th
my $diff_hours = $calendar->hours_between( $now, $nov_6 )->hours;
is( $diff_hours, 1 * 24, '' );
# Between 5th and 7th
$diff_hours = $calendar->hours_between( $now, $nov_7 )->hours;
is( $diff_hours, 2 * 24, '' );
# Between 5th and 12th
$diff_hours = $calendar->hours_between( $now, $nov_12 )->hours;
is( $diff_hours, 7 * 24, '' );
# Between 5th and 15th
$diff_hours = $calendar->hours_between( $now, $nov_15 )->hours;
is( $diff_hours, 10 * 24, '' );
};
subtest 'Different hours' => sub {
plan tests => 4;
# Between 5th and 6th
my $diff_hours = $calendar->hours_between( $now, $nov_6->clone->subtract(hours => 3) )->hours;
is( $diff_hours, 1 * 24 - 3, '' );
# Between 5th and 7th
$diff_hours = $calendar->hours_between( $now, $nov_7->clone->subtract(hours => 3) )->hours;
is( $diff_hours, 2 * 24 - 3, '' );
# Between 5th and 12th
$diff_hours = $calendar->hours_between( $now, $nov_12->clone->subtract(hours => 3) )->hours;
is( $diff_hours, 7 * 24 - 3, '' );
# Between 5th and 15th
$diff_hours = $calendar->hours_between( $now, $nov_15->clone->subtract(hours => 3) )->hours;
is( $diff_hours, 10 * 24 - 3, '' );
};
};
subtest 'With holiday' => sub {
plan tests => 2;
my $library = $builder->build_object({ class => 'Koha::Libraries' });
# Wednesdays are closed
my $dbh = C4::Context->dbh;
$dbh->do(q|
INSERT INTO repeatable_holidays (branchcode,weekday,day,month,title,description)
VALUES ( ?, ?, NULL, NULL, ?, '' )
|, undef, $library->branchcode, 3, 'Closed on Wednesday');
my $calendar = Koha::Calendar->new( branchcode => $library->branchcode );
subtest 'Same hours' => sub {
plan tests => 5;
my $diff_hours;
# Between 5th and 6th
$diff_hours = $calendar->hours_between( $now, $nov_6 )->hours;
is( $diff_hours, 0 * 24, '' ); # FIXME Is this really should be 0?
# Between 5th and 7th
$diff_hours = $calendar->hours_between( $now, $nov_7 )->hours;
is( $diff_hours, 2 * 24 - 1 * 24, '' );
# Between 5th and 12th
$diff_hours = $calendar->hours_between( $now, $nov_12 )->hours;
is( $diff_hours, 7 * 24 - 1 * 24, '' );
# Between 5th and 13th
$diff_hours = $calendar->hours_between( $now, $nov_13 )->hours;
is( $diff_hours, 8 * 24 - 2 * 24, '' );
# Between 5th and 15th
$diff_hours = $calendar->hours_between( $now, $nov_15 )->hours;
is( $diff_hours, 10 * 24 - 2 * 24, '' );
};
subtest 'Different hours' => sub {
plan tests => 6;
my $diff_hours;
# Between 5th and 6th
my $duration = $calendar->hours_between( $now, $nov_6->clone->subtract(hours => 3) );
is( $duration->hours, abs(0 * 24 - 3), '' ); # FIXME $duration->hours always return a abs
is( $duration->is_negative, 1, ); # FIXME Do really test for that case in our calls to hours_between?
# Between 5th and 7th
$diff_hours = $calendar->hours_between( $now, $nov_7->clone->subtract(hours => 3) )->hours;
is( $diff_hours, 2 * 24 - 1 * 24 - 3, '' );
# Between 5th and 12th
$diff_hours = $calendar->hours_between( $now, $nov_12->clone->subtract(hours => 3) )->hours;
is( $diff_hours, 7 * 24 - 1 * 24 - 3, '' );
# Between 5th and 13th
$diff_hours = $calendar->hours_between( $now, $nov_13->clone->subtract(hours => 3) )->hours;
is( $diff_hours, 8 * 24 - 2 * 24 - 3, '' );
# Between 5th and 15th
$diff_hours = $calendar->hours_between( $now, $nov_15->clone->subtract(hours => 3) )->hours;
is( $diff_hours, 10 * 24 - 2 * 24 - 3, '' );
};
};
};
$schema->storage->txn_rollback();