@@ -, +, @@ --- Koha/Calendar.pm | 5 +++-- t/db_dependent/Holidays.t | 49 +++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 48 insertions(+), 6 deletions(-) --- a/Koha/Calendar.pm +++ a/Koha/Calendar.pm @@ -54,12 +54,13 @@ sub _init { sub exception_holidays { my ( $self ) = @_; - my $dbh = C4::Context->dbh; - my $branch = $self->{branchcode}; + my $cache = Koha::Cache->get_instance(); my $cached = $cache->get_from_cache('exception_holidays'); return $cached if $cached; + my $dbh = C4::Context->dbh; + my $branch = $self->{branchcode}; my $exception_holidays_sth = $dbh->prepare( 'SELECT day, month, year FROM special_holidays WHERE branchcode = ? AND isexception = 1' ); --- a/t/db_dependent/Holidays.t +++ a/t/db_dependent/Holidays.t @@ -17,16 +17,16 @@ use Modern::Perl; -use Test::More tests => 10; -use t::lib::TestBuilder; +use Test::More tests => 15; +use DateTime; +use DateTime::TimeZone; +use t::lib::TestBuilder; use C4::Context; use C4::Branch; use Koha::Database; use Koha::DateUtils; -use DateTime; -use DateTime::TimeZone; BEGIN { use_ok('Koha::Calendar'); @@ -119,6 +119,47 @@ C4::Calendar->new( branchcode => $branch_2 )->insert_single_holiday( is( Koha::Calendar->new( branchcode => $branch_2 )->is_holiday( $today ), 1, "Today is a holiday for $branch_2" ); is( Koha::Calendar->new( branchcode => $branch_1 )->is_holiday( $today ), 0, "Today is not a holiday for $branch_1"); +# Few tests for exception holidays +my ( $diff, $cal, $special ); +$dbh->do("DELETE FROM special_holidays"); +_add_exception( $today, $branch_1, 'Today' ); +$cal = Koha::Calendar->new( branchcode => $branch_1 ); +$special = $cal->exception_holidays; +is( $special->count, 1, 'One exception holiday added' ); + +my $tomorrow= dt_from_string(); +$tomorrow->add_duration( DateTime::Duration->new(days => 1) ); +_add_exception( $tomorrow, $branch_1, 'Tomorrow' ); +$cal = Koha::Calendar->new( branchcode => $branch_1 ); +$special = $cal->exception_holidays; +is( $special->count, 2, 'Set of exception holidays contains two dates' ); + +$diff = $today->delta_days( $special->min )->in_units('days'); +is( $diff, 0, 'Lowest exception holiday is today' ); +$diff = $tomorrow->delta_days( $special->max )->in_units('days'); +is( $diff, 0, 'Highest exception holiday is tomorrow' ); + +C4::Calendar->new( branchcode => $branch_1 )->delete_holiday( + weekday => $tomorrow->day_of_week, + day => $tomorrow->day, + month => $tomorrow->month, + year => $tomorrow->year, +); +$cal = Koha::Calendar->new( branchcode => $branch_1 ); +$special = $cal->exception_holidays; +is( $special->count, 1, 'Set of exception holidays back to one' ); + +sub _add_exception { + my ( $dt, $branch, $descr ) = @_; + C4::Calendar->new( branchcode => $branch )->insert_exception_holiday( + day => $dt->day, + month => $dt->month, + year => $dt->year, + title => $descr, + description => $descr, + ); +} + $schema->storage->txn_rollback; 1; --