Jonathan Druart
2b90ea2cb0
GetMember returned a patron given a borrowernumber, cardnumber or userid. All of these 3 attributes are defined as a unique key at the DB level and so we can use Koha::Patrons->find to replace this subroutine. Additionaly GetMember set category_type and description. Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
109 lines
3.3 KiB
Perl
109 lines
3.3 KiB
Perl
use Modern::Perl;
|
|
use Test::More tests => 2;
|
|
|
|
use MARC::Record;
|
|
use MARC::Field;
|
|
use C4::Context;
|
|
|
|
use C4::Biblio qw( AddBiblio );
|
|
use C4::Circulation qw( AddIssue AddReturn );
|
|
use C4::Items qw( AddItem );
|
|
use C4::Members qw( AddMember );
|
|
use Koha::Database;
|
|
use Koha::DateUtils;
|
|
use Koha::Patron::Debarments qw( GetDebarments DelDebarment );
|
|
|
|
use t::lib::TestBuilder;
|
|
|
|
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' });
|
|
|
|
local $SIG{__WARN__} = sub { warn $_[0] unless $_[0] =~ /redefined/ };
|
|
my $userenv->{branch} = $branchcode;
|
|
*C4::Context::userenv = \&Mock_userenv;
|
|
|
|
# Test without maxsuspensiondays set
|
|
Koha::IssuingRules->search->delete;
|
|
$builder->build(
|
|
{
|
|
source => 'Issuingrule',
|
|
value => {
|
|
categorycode => '*',
|
|
itemtype => '*',
|
|
branchcode => '*',
|
|
firstremind => 0,
|
|
finedays => 2,
|
|
lengthunit => 'days',
|
|
}
|
|
}
|
|
);
|
|
|
|
my $borrowernumber = AddMember(
|
|
firstname => 'my firstname',
|
|
surname => 'my surname',
|
|
categorycode => $patron_category->{categorycode},
|
|
branchcode => $branchcode,
|
|
);
|
|
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
|
|
my $issuing_rule = Koha::IssuingRules->search->next;
|
|
$issuing_rule->maxsuspensiondays( 10 )->store;
|
|
|
|
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} );
|
|
|
|
$schema->storage->txn_rollback;
|
|
|
|
# C4::Context->userenv
|
|
sub Mock_userenv {
|
|
return $userenv;
|
|
}
|