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'
);
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');
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;