Jonathan Druart
9e249435f9
It has been missed on bug 17600. Signed-off-by: Nick Clemens <nick@bywatersolutions.com> Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Adjusted commit title. Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
161 lines
5.2 KiB
Perl
Executable file
161 lines
5.2 KiB
Perl
Executable file
use Modern::Perl;
|
|
use Test::More tests => 4;
|
|
|
|
use MARC::Record;
|
|
use MARC::Field;
|
|
use C4::Context;
|
|
|
|
use C4::Circulation qw( AddIssue AddReturn );
|
|
use C4::Biblio qw( AddBiblio );
|
|
use Koha::Database;
|
|
use Koha::DateUtils qw( dt_from_string output_pref );
|
|
use Koha::Patron::Debarments qw( GetDebarments DelDebarment );
|
|
use Koha::Patrons;
|
|
|
|
use t::lib::TestBuilder;
|
|
use t::lib::Mocks;
|
|
|
|
my $schema = Koha::Database->schema;
|
|
$schema->storage->txn_begin;
|
|
my $builder = t::lib::TestBuilder->new;
|
|
my $dbh = C4::Context->dbh;
|
|
|
|
my $branchcode = $builder->build({ source => 'Branch' })->{branchcode};
|
|
my $itemtype = $builder->build({ source => 'Itemtype' })->{itemtype};
|
|
my $patron_category = $builder->build({ source => 'Category' });
|
|
|
|
t::lib::Mocks::mock_userenv({ branchcode => $branchcode });
|
|
|
|
# Test without maxsuspensiondays set
|
|
Koha::CirculationRules->search->delete;
|
|
Koha::CirculationRules->set_rules(
|
|
{
|
|
categorycode => undef,
|
|
itemtype => undef,
|
|
branchcode => undef,
|
|
rules => {
|
|
firstremind => 0,
|
|
finedays => 2,
|
|
lengthunit => 'days',
|
|
suspension_chargeperiod => 1,
|
|
}
|
|
}
|
|
);
|
|
|
|
my $borrowernumber = Koha::Patron->new({
|
|
firstname => 'my firstname',
|
|
surname => 'my surname',
|
|
categorycode => $patron_category->{categorycode},
|
|
branchcode => $branchcode,
|
|
})->store->borrowernumber;
|
|
my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed;
|
|
|
|
my $record = MARC::Record->new();
|
|
$record->append_fields(
|
|
MARC::Field->new('100', ' ', ' ', a => 'My author'),
|
|
MARC::Field->new('245', ' ', ' ', a => 'My title'),
|
|
);
|
|
|
|
my $barcode = 'bc_maxsuspensiondays';
|
|
my ($biblionumber, $biblioitemnumber) = AddBiblio($record, '');
|
|
my $itemnumber = Koha::Item->new({
|
|
biblionumber => $biblionumber,
|
|
homebranch => $branchcode,
|
|
holdingbranch => $branchcode,
|
|
barcode => $barcode,
|
|
itype => $itemtype
|
|
})->store->itemnumber;
|
|
|
|
# clear any holidays to avoid throwing off the suspension day
|
|
# calculations
|
|
$dbh->do('DELETE FROM special_holidays');
|
|
$dbh->do('DELETE FROM repeatable_holidays');
|
|
|
|
my $daysago20 = dt_from_string->add_duration(DateTime::Duration->new(days => -20));
|
|
my $daysafter40 = dt_from_string->add_duration(DateTime::Duration->new(days => 40));
|
|
|
|
AddIssue( $borrower, $barcode, $daysago20 );
|
|
AddReturn( $barcode, $branchcode );
|
|
my $debarments = GetDebarments({borrowernumber => $borrower->{borrowernumber}});
|
|
is(
|
|
$debarments->[0]->{expiration},
|
|
output_pref({ dt => $daysafter40, dateformat => 'iso', dateonly => 1 }),
|
|
'calculate suspension with no maximum set'
|
|
);
|
|
DelDebarment( $debarments->[0]->{borrower_debarment_id} );
|
|
|
|
# Test with maxsuspensiondays = 10 days
|
|
Koha::CirculationRules->set_rules(
|
|
{
|
|
categorycode => undef,
|
|
itemtype => undef,
|
|
branchcode => undef,
|
|
rules => {
|
|
maxsuspensiondays => 10,
|
|
}
|
|
}
|
|
);
|
|
|
|
my $daysafter10 = dt_from_string->add_duration(DateTime::Duration->new(days => 10));
|
|
AddIssue( $borrower, $barcode, $daysago20 );
|
|
AddReturn( $barcode, $branchcode );
|
|
$debarments = GetDebarments({borrowernumber => $borrower->{borrowernumber}});
|
|
is(
|
|
$debarments->[0]->{expiration},
|
|
output_pref({ dt => $daysafter10, dateformat => 'iso', dateonly => 1 }),
|
|
'calculate suspension with a maximum set'
|
|
);
|
|
DelDebarment( $debarments->[0]->{borrower_debarment_id} );
|
|
|
|
subtest "suspension_chargeperiod" => sub {
|
|
Koha::CirculationRules->set_rules(
|
|
{
|
|
categorycode => undef,
|
|
itemtype => undef,
|
|
branchcode => undef,
|
|
rules => {
|
|
firstremind => 0,
|
|
finedays => 7,
|
|
lengthunit => 'days',
|
|
suspension_chargeperiod => 15,
|
|
maxsuspensiondays => 333,
|
|
}
|
|
}
|
|
);
|
|
my $patron = $builder->build_object({ class => 'Koha::Patrons' });
|
|
my $item = $builder->build_sample_item;
|
|
|
|
my $last_year = dt_from_string->clone->subtract( years => 1 );
|
|
my $today = dt_from_string;
|
|
my $new_debar_dt = C4::Circulation::_calculate_new_debar_dt( $patron->unblessed, $item->unblessed, $last_year, $today );
|
|
is( $new_debar_dt->truncate( to => 'day' ),
|
|
$today->clone->add( days => 365 / 15 * 7 )->truncate( to => 'day' ) );
|
|
|
|
};
|
|
|
|
subtest "maxsuspensiondays" => sub {
|
|
Koha::CirculationRules->set_rules(
|
|
{
|
|
categorycode => undef,
|
|
itemtype => undef,
|
|
branchcode => undef,
|
|
rules => {
|
|
firstremind => 0,
|
|
finedays => 15,
|
|
lengthunit => 'days',
|
|
suspension_chargeperiod => 7,
|
|
maxsuspensiondays => 333,
|
|
}
|
|
}
|
|
);
|
|
my $patron = $builder->build_object({ class => 'Koha::Patrons' });
|
|
my $item = $builder->build_sample_item;
|
|
|
|
my $last_year = dt_from_string->clone->subtract( years => 1 );
|
|
my $today = dt_from_string;
|
|
my $new_debar_dt = C4::Circulation::_calculate_new_debar_dt( $patron->unblessed, $item->unblessed, $last_year, $today );
|
|
is( $new_debar_dt->truncate( to => 'day' ),
|
|
$today->clone->add( days => 333 )->truncate( to => 'day' ) );
|
|
};
|
|
|
|
$schema->storage->txn_rollback;
|