Koha/t/db_dependent/Circulation/IssuingRules/maxsuspensiondays.t
Jonathan Druart 25848e5af3
Bug 18936: Fix some more tests
* CanItemBeReserved
Prior to "Bug 18936: Convert issuingrules fields to circulation_rules",
GetHoldRule returned holds_per_record even if no reservesallowed was
defined. This change restores this behavior.
FIXME Note: In GetHoldRule we return itemtype only if reservesallowed is set,
not sure it is correct.

* t/db_dependent/Holds/DisallowHoldIfItemsAvailable.t
When setting returnbranch, holdallowed and hold_fulfillment_policy, we
should not provide categorycode.

* t/db_dependent/Holds.t
Prefer to keep the existing rules instead of removing them. It got quite
hard to understand what was going on here because of the mixup with
the rule reservesallowed that was in issuingrules, and the other rules
we used for the tests. Also, categorycode should not be passed to set
those 3 rules (holdallowed, hold_fulfillment_policy and returnbranch)

* t/db_dependent/Circulation.t
Setting lengthunit to 'hours', no need to make sure the rule has been
correctly be saved

* t/db_dependent/Circulation/CalcDateDue.t
It uses hardcoded data that is not in the sample data (categorycode=C).
Let use K that exists and postpone a refactore of the whole script (to
make it create the data it needs).

* t/db_dependent/Circulation/ReturnClaims.t
* t/db_dependent/Circulation/IssuingRules/maxsuspensiondays.t
Simple replace Koha::IssuingRule with Koha::CirculationRules

* t/db_dependent/Koha/Charges/Fees.t
=> FIXME Still failing, stuck here, need help

Signed-off-by: Minna Kivinen <minna.kivinen@hamk.fi>
Signed-off-by: Joonas Kylmälä <joonas.kylmala@helsinki.fi>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
2020-02-04 09:56:27 +00:00

162 lines
5.2 KiB
Perl

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::Items qw( AddItem );
use C4::Biblio qw( AddBiblio );
use Koha::Database;
use Koha::DateUtils;
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;
$dbh->{RaiseError} = 1;
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 (undef, undef, $itemnumber) = AddItem({
homebranch => $branchcode,
holdingbranch => $branchcode,
barcode => $barcode,
itype => $itemtype
} , $biblionumber);
# 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;