Bug 26250: Fix tests when SearchEngine=Elastic
Most of the time the tests are failing because the item is not created
correctly (missing biblio and/or biblioitem).
The usual error is:
t/db_dependent/selenium/regressions.t ..... 5/5 Can't call method "leader" on an undefined value at /kohadevbox/koha/Koha/SearchEngine/Elasticsearch.pm line 534.
In this patch we are making sure $builder->build({ source => 'Item' })
is replace with $builder->build_sample_item
Test plan:
Turn on Elastic and confirm that all the tests pass!
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
5fd8774c68
commit
9c9dddeaa4
|
|
@ -75,7 +75,7 @@ my $userenv_branchcode = $branchcode;
|
|||
|
||||
# Test manualinvoice
|
||||
my $itemtype = $builder->build( { source => 'Itemtype' } );
|
||||
my $item = $builder->build( { source => 'Item', value => { itype => $itemtype->{itemtype} } } );
|
||||
my $item = $builder->build_sample_item( { itype => $itemtype->{itemtype} } );
|
||||
my $patron = $builder->build( { source => 'Borrower' } );
|
||||
my $amount = 5;
|
||||
my $description = "Test fee!";
|
||||
|
|
@ -83,7 +83,7 @@ my $type = 'LOST';
|
|||
my $note = 'Test note!';
|
||||
warning_like {
|
||||
C4::Accounts::manualinvoice( $patron->{borrowernumber},
|
||||
$item->{itemnumber}, $description, $type, $amount, $note )
|
||||
$item->itemnumber, $description, $type, $amount, $note )
|
||||
}
|
||||
qr/C4::Accounts::manualinvoice is deprecated in favor of Koha::Account->add_debit/,
|
||||
"deprecation warning received for manualinvoice";
|
||||
|
|
@ -586,10 +586,10 @@ subtest "C4::Accounts::chargelostitem tests" => sub {
|
|||
processfee => 2.04,
|
||||
}});
|
||||
my $cli_borrowernumber = $builder->build({ source => 'Borrower' })->{'borrowernumber'};
|
||||
my $cli_itemnumber1 = $builder->build({ source => 'Item', value => { itype => $itype_no_replace_no_fee->{itemtype} } })->{'itemnumber'};
|
||||
my $cli_itemnumber2 = $builder->build({ source => 'Item', value => { itype => $itype_replace_no_fee->{itemtype} } })->{'itemnumber'};
|
||||
my $cli_itemnumber3 = $builder->build({ source => 'Item', value => { itype => $itype_no_replace_fee->{itemtype} } })->{'itemnumber'};
|
||||
my $cli_itemnumber4 = $builder->build({ source => 'Item', value => { itype => $itype_replace_fee->{itemtype} } })->{'itemnumber'};
|
||||
my $cli_itemnumber1 = $builder->build_sample_item({ itype => $itype_no_replace_no_fee->{itemtype} })->itemnumber;
|
||||
my $cli_itemnumber2 = $builder->build_sample_item({ itype => $itype_replace_no_fee->{itemtype} })->itemnumber;
|
||||
my $cli_itemnumber3 = $builder->build_sample_item({ itype => $itype_no_replace_fee->{itemtype} })->itemnumber;
|
||||
my $cli_itemnumber4 = $builder->build_sample_item({ itype => $itype_replace_fee->{itemtype} })->itemnumber;
|
||||
|
||||
my $cli_issue_id_1 = $builder->build({ source => 'Issue', value => { borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber1 } })->{issue_id};
|
||||
my $cli_issue_id_2 = $builder->build({ source => 'Issue', value => { borrowernumber => $cli_borrowernumber, itemnumber => $cli_itemnumber2 } })->{issue_id};
|
||||
|
|
|
|||
|
|
@ -698,7 +698,7 @@ subtest 'ModReceiveOrder replacementprice tests' => sub {
|
|||
plan tests => 2;
|
||||
#Let's build an order, we need a couple things though
|
||||
my $builder = t::lib::TestBuilder->new;
|
||||
my $order_biblio = $builder->build({ source => 'Biblio' });
|
||||
my $order_biblio = $builder->build_sample_biblio;
|
||||
my $order_basket = $builder->build({ source => 'Aqbasket', value => { is_standing => 0 } });
|
||||
my $order_invoice = $builder->build({ source => 'Aqinvoice'});
|
||||
my $order_currency = $builder->build({ source => 'Currency', value => { active => 1, archived => 0, symbol => 'F', rate => 2, isocode => undef, currency => 'FOO' } });
|
||||
|
|
@ -715,7 +715,7 @@ subtest 'ModReceiveOrder replacementprice tests' => sub {
|
|||
};
|
||||
my $receive_order = $builder->build({ source => 'Aqorder', value => $orderinfo });
|
||||
(undef, my $received_ordernumber) = ModReceiveOrder({
|
||||
biblionumber => $order_biblio->{biblionumber},
|
||||
biblionumber => $order_biblio->biblionumber,
|
||||
order => $receive_order,
|
||||
invoice => $order_invoice,
|
||||
quantityreceived => $receive_order->{quantity},
|
||||
|
|
@ -726,7 +726,7 @@ subtest 'ModReceiveOrder replacementprice tests' => sub {
|
|||
$orderinfo->{replacementprice} = 16.12;
|
||||
$receive_order = $builder->build({ source => 'Aqorder', value => $orderinfo });
|
||||
(undef, $received_ordernumber) = ModReceiveOrder({
|
||||
biblionumber => $order_biblio->{biblionumber},
|
||||
biblionumber => $order_biblio->biblionumber,
|
||||
order => $receive_order,
|
||||
invoice => $order_invoice,
|
||||
quantityreceived => $receive_order->{quantity},
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ use Modern::Perl;
|
|||
|
||||
use POSIX qw(strftime);
|
||||
|
||||
use Test::More tests => 57;
|
||||
use Test::More tests => 54;
|
||||
|
||||
use t::lib::TestBuilder;
|
||||
use t::lib::Mocks;
|
||||
|
|
@ -47,25 +47,8 @@ my $dbh = C4::Context->dbh;
|
|||
|
||||
$dbh->do("DELETE FROM circulation_rules");
|
||||
|
||||
my $biblio = Koha::Biblio->new()->store();
|
||||
ok( $biblio->id, 'Koha::Biblio created' );
|
||||
|
||||
my $biblioitem = $schema->resultset('Biblioitem')->new(
|
||||
{
|
||||
biblionumber => $biblio->id
|
||||
}
|
||||
)->insert();
|
||||
ok( $biblioitem->id, 'biblioitem created' );
|
||||
|
||||
my $itype = $builder->build({ source => 'Itemtype' });
|
||||
my $item = Koha::Item->new(
|
||||
{
|
||||
biblionumber => $biblio->id,
|
||||
biblioitemnumber => $biblioitem->id,
|
||||
itype => $itype->{itemtype},
|
||||
}
|
||||
)->store();
|
||||
ok( $item->id, 'Koha::Item created' );
|
||||
my $item = $builder->build_sample_item;
|
||||
my $biblio = $item->biblio;
|
||||
|
||||
my $branch = $builder->build({ source => 'Branch' });
|
||||
my $category = $builder->build({ source => 'Category' });
|
||||
|
|
@ -86,8 +69,8 @@ my $article_request_title = 'an article request title';
|
|||
my $article_request = Koha::ArticleRequest->new(
|
||||
{
|
||||
borrowernumber => $patron->id,
|
||||
biblionumber => $biblio->id,
|
||||
itemnumber => $item->id,
|
||||
biblionumber => $item->biblionumber,
|
||||
itemnumber => $item->itemnumber,
|
||||
title => $article_request_title,
|
||||
}
|
||||
)->store();
|
||||
|
|
|
|||
|
|
@ -50,12 +50,11 @@ subtest 'Test generation of annual barcodes from DB values' => sub {
|
|||
|
||||
my $barcodevalue = $barcodeobj->value();
|
||||
|
||||
my $item_1 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
my $item_1 = $builder->build_sample_item(
|
||||
{
|
||||
barcode => $barcodevalue
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
is($barcodevalue,$barcodeobj->db_max(), "(annual) First barcode saved to db is equal to db_max" );
|
||||
|
||||
|
|
@ -66,12 +65,11 @@ subtest 'Test generation of annual barcodes from DB values' => sub {
|
|||
$barcodevalue = $barcodeobj->next_value($barcodevalue);
|
||||
$barcodevalue = $barcodeobj->next_value($barcodevalue);
|
||||
|
||||
my $item_2 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
my $item_2 = $builder->build_sample_item(
|
||||
{
|
||||
barcode => $barcodevalue
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
$barcodeobj = C4::Barcodes->new('annual');
|
||||
|
||||
|
|
@ -105,12 +103,11 @@ subtest 'Test generation of hbyymmincr barcodes from DB values' => sub {
|
|||
|
||||
my $barcodevalue = $barcodeobj->value();
|
||||
|
||||
my $item_1 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
my $item_1 = $builder->build_sample_item(
|
||||
{
|
||||
barcode => $barcodevalue
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
is($barcodevalue,$barcodeobj->db_max(), "(hbyymmincr) First barcode saved to db is equal to db_max" );
|
||||
|
||||
|
|
@ -121,12 +118,11 @@ subtest 'Test generation of hbyymmincr barcodes from DB values' => sub {
|
|||
$barcodevalue = $barcodeobj->next_value($barcodevalue);
|
||||
$barcodevalue = $barcodeobj->next_value($barcodevalue);
|
||||
|
||||
my $item_2 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
my $item_2 = $builder->build_sample_item(
|
||||
{
|
||||
barcode => $barcodevalue
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
$barcodeobj = C4::Barcodes->new('hbyymmincr',$branchcode_1);
|
||||
|
||||
|
|
|
|||
|
|
@ -34,30 +34,26 @@ my $builder = t::lib::TestBuilder->new;
|
|||
my $dbh = C4::Context->dbh;
|
||||
$dbh->do(q|DELETE FROM issues|);
|
||||
$dbh->do(q|DELETE FROM items|);
|
||||
my $item_1 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
my $item_1 = $builder->build_sample_item(
|
||||
{
|
||||
barcode => '33333074344563'
|
||||
}
|
||||
});
|
||||
my $item_2 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
);
|
||||
my $item_2 = $builder->build_sample_item(
|
||||
{
|
||||
barcode => 'hb12070890'
|
||||
}
|
||||
});
|
||||
my $item_3 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
);
|
||||
my $item_3 = $builder->build_sample_item(
|
||||
{
|
||||
barcode => '201200345'
|
||||
}
|
||||
});
|
||||
my $item_4 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
);
|
||||
my $item_4 = $builder->build_sample_item(
|
||||
{
|
||||
barcode => '2012-0034'
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
my %args = (
|
||||
year => '2012',
|
||||
|
|
|
|||
|
|
@ -33,15 +33,15 @@ subtest "Check MARC field length calculation" => sub {
|
|||
|
||||
t::lib::Mocks->mock_preference( 'marcflavour', 'MARC21' );
|
||||
|
||||
my $biblio = t::lib::TestBuilder->new->build({ source => 'Biblio' });
|
||||
my $biblio = t::lib::TestBuilder->new->build_sample_biblio;
|
||||
my $record = MARC::Record->new;
|
||||
$record->append_fields(
|
||||
MARC::Field->new( '100', '', '', a => 'My title' ),
|
||||
);
|
||||
|
||||
is( $record->leader, ' 'x24, 'No leader lengths' );
|
||||
C4::Biblio::ModBiblioMarc( $record, $biblio->{biblionumber}, '' );
|
||||
my $savedrec = C4::Biblio::GetMarcBiblio({ biblionumber => $biblio->{biblionumber} });
|
||||
C4::Biblio::ModBiblioMarc( $record, $biblio->biblionumber, '' );
|
||||
my $savedrec = C4::Biblio::GetMarcBiblio({ biblionumber => $biblio->biblionumber });
|
||||
like( substr($savedrec->leader,0,5), qr/^\d{5}$/, 'Record length found' );
|
||||
like( substr($savedrec->leader,12,5), qr/^\d{5}$/, 'Base address found' );
|
||||
};
|
||||
|
|
|
|||
|
|
@ -968,9 +968,7 @@ subtest 'GetBudgetSpent GetBudgetOrdered GetBudgetsPlanCell tests' => sub {
|
|||
#Let's build an order, we need a couple things though
|
||||
t::lib::Mocks::mock_preference('OrderPriceRounding','nearest_cent');
|
||||
|
||||
my $spent_biblio = $builder->build({ source => 'Biblio' });
|
||||
my $item_1 = $builder->build({ source => 'Item', value => { biblionumber => $spent_biblio->{biblionumber} } });
|
||||
my $biblioitem_1 = $builder->build({ source => 'Biblioitem', value => { biblionumber => $spent_biblio->{biblionumber}, itemnumber => $item_1->{itemnumber} } });
|
||||
my $item_1 = $builder->build_sample_item;
|
||||
my $spent_basket = $builder->build({ source => 'Aqbasket', value => { is_standing => 0 } });
|
||||
my $spent_invoice = $builder->build({ source => 'Aqinvoice'});
|
||||
my $spent_currency = $builder->build({ source => 'Currency', value => { active => 1, archived => 0, symbol => 'F', rate => 2, isocode => undef, currency => 'FOO' } });
|
||||
|
|
@ -996,7 +994,7 @@ subtest 'GetBudgetSpent GetBudgetOrdered GetBudgetsPlanCell tests' => sub {
|
|||
rrp => 16.99,
|
||||
discount => .42,
|
||||
ecost => 16.91,
|
||||
biblionumber => $spent_biblio->{biblionumber},
|
||||
biblionumber => $item_1->biblionumber,
|
||||
currency => $spent_currency->{currency},
|
||||
tax_rate_on_ordering => 0,
|
||||
tax_value_on_ordering => 0,
|
||||
|
|
@ -1045,7 +1043,7 @@ subtest 'GetBudgetSpent GetBudgetOrdered GetBudgetsPlanCell tests' => sub {
|
|||
#Let's test some budget planning
|
||||
#Regression tests for bug 18736
|
||||
#We need an item to test by BRANCHES
|
||||
my $order_item_1 = $builder->build({ source => 'AqordersItem', value => { ordernumber => $spent_order->{ordernumber}, itemnumber => $item_1->{itemnumber} } });
|
||||
my $order_item_1 = $builder->build({ source => 'AqordersItem', value => { ordernumber => $spent_order->{ordernumber}, itemnumber => $item_1->itemnumber } });
|
||||
my $spent_fund = Koha::Acquisition::Funds->find( $spent_order->{budget_id} );
|
||||
my $cell = {
|
||||
authcat => 'MONTHS',
|
||||
|
|
@ -1062,12 +1060,12 @@ subtest 'GetBudgetSpent GetBudgetOrdered GetBudgetsPlanCell tests' => sub {
|
|||
expected_exact => 9.8542,
|
||||
},
|
||||
'BRANCHES' => {
|
||||
authvalue => $item_1->{homebranch},
|
||||
authvalue => $item_1->homebranch,
|
||||
expected_rounded => 9.85,
|
||||
expected_exact => 9.8542,
|
||||
},
|
||||
'ITEMTYPES' => {
|
||||
authvalue => $biblioitem_1->{itemtype},
|
||||
authvalue => $item_1->biblioitem->itemtype,
|
||||
expected_rounded => 78.80,
|
||||
expected_exact => 78.8336,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -83,9 +83,9 @@ sub test_debarment_on_checkout {
|
|||
);
|
||||
my @caller = caller;
|
||||
my $line_number = $caller[2];
|
||||
AddIssue( $patron, $item->{barcode}, $due_date );
|
||||
AddIssue( $patron, $item->barcode, $due_date );
|
||||
|
||||
my ( undef, $message ) = AddReturn( $item->{barcode}, $library->{branchcode}, undef, $return_date );
|
||||
my ( undef, $message ) = AddReturn( $item->barcode, $library->{branchcode}, undef, $return_date );
|
||||
is( $message->{WasReturned} && exists $message->{Debarred}, 1, 'AddReturn must have debarred the patron' )
|
||||
or diag('AddReturn returned message ' . Dumper $message );
|
||||
my $debarments = Koha::Patron::Debarments::GetDebarments(
|
||||
|
|
@ -749,19 +749,16 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
|
||||
subtest "too_late_renewal / no_auto_renewal_after" => sub {
|
||||
plan tests => 14;
|
||||
my $item_to_auto_renew = $builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->biblionumber,
|
||||
homebranch => $branch,
|
||||
holdingbranch => $branch,
|
||||
}
|
||||
my $item_to_auto_renew = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblio->biblionumber,
|
||||
library => $branch,
|
||||
}
|
||||
);
|
||||
|
||||
my $ten_days_before = dt_from_string->add( days => -10 );
|
||||
my $ten_days_ahead = dt_from_string->add( days => 10 );
|
||||
AddIssue( $renewing_borrower, $item_to_auto_renew->{barcode}, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
AddIssue( $renewing_borrower, $item_to_auto_renew->barcode, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
|
||||
Koha::CirculationRules->set_rules(
|
||||
{
|
||||
|
|
@ -775,7 +772,7 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
);
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_too_late', 'Cannot renew, too late(returned code is auto_too_late)' );
|
||||
|
||||
|
|
@ -791,7 +788,7 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
);
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_too_late', 'Cannot auto renew, too late - no_auto_renewal_after is inclusive(returned code is auto_too_late)' );
|
||||
|
||||
|
|
@ -807,7 +804,7 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
);
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_too_soon', 'Cannot auto renew, too soon - no_auto_renewal_after is defined(returned code is auto_too_soon)' );
|
||||
|
||||
|
|
@ -823,7 +820,7 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
);
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_renew', 'Cannot renew, renew is automatic' );
|
||||
|
||||
|
|
@ -840,7 +837,7 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
);
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_too_late', 'Cannot renew, too late(returned code is auto_too_late)' );
|
||||
|
||||
|
|
@ -857,7 +854,7 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
);
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_too_late', 'Cannot renew, too late(returned code is auto_too_late)' );
|
||||
|
||||
|
|
@ -874,25 +871,23 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
);
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_renew', 'Cannot renew, renew is automatic' );
|
||||
};
|
||||
|
||||
subtest "auto_too_much_oweing | OPACFineNoRenewalsBlockAutoRenew & OPACFineNoRenewalsIncludeCredit" => sub {
|
||||
plan tests => 10;
|
||||
my $item_to_auto_renew = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
my $item_to_auto_renew = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblio->biblionumber,
|
||||
homebranch => $branch,
|
||||
holdingbranch => $branch,
|
||||
library => $branch,
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
my $ten_days_before = dt_from_string->add( days => -10 );
|
||||
my $ten_days_ahead = dt_from_string->add( days => 10 );
|
||||
AddIssue( $renewing_borrower, $item_to_auto_renew->{barcode}, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
AddIssue( $renewing_borrower, $item_to_auto_renew->barcode, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
|
||||
Koha::CirculationRules->set_rules(
|
||||
{
|
||||
|
|
@ -915,12 +910,12 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
amount => $fines_amount,
|
||||
interface => 'test',
|
||||
type => 'OVERDUE',
|
||||
item_id => $item_to_auto_renew->{itemnumber},
|
||||
item_id => $item_to_auto_renew->itemnumber,
|
||||
description => "Some fines"
|
||||
}
|
||||
)->status('RETURNED')->store;
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_renew', 'Can auto renew, OPACFineNoRenewals=10, patron has 5' );
|
||||
|
||||
|
|
@ -929,12 +924,12 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
amount => $fines_amount,
|
||||
interface => 'test',
|
||||
type => 'OVERDUE',
|
||||
item_id => $item_to_auto_renew->{itemnumber},
|
||||
item_id => $item_to_auto_renew->itemnumber,
|
||||
description => "Some fines"
|
||||
}
|
||||
)->status('RETURNED')->store;
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_renew', 'Can auto renew, OPACFineNoRenewals=10, patron has 10' );
|
||||
|
||||
|
|
@ -943,12 +938,12 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
amount => $fines_amount,
|
||||
interface => 'test',
|
||||
type => 'OVERDUE',
|
||||
item_id => $item_to_auto_renew->{itemnumber},
|
||||
item_id => $item_to_auto_renew->itemnumber,
|
||||
description => "Some fines"
|
||||
}
|
||||
)->status('RETURNED')->store;
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_too_much_oweing', 'Cannot auto renew, OPACFineNoRenewals=10, patron has 15' );
|
||||
|
||||
|
|
@ -961,13 +956,13 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
)->store;
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_renew', 'Can auto renew, OPACFineNoRenewals=10, OPACFineNoRenewalsIncludeCredit=1, patron has 15 debt, 5 credit' );
|
||||
|
||||
C4::Context->set_preference('OPACFineNoRenewalsIncludeCredit','0');
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_too_much_oweing', 'Cannot auto renew, OPACFineNoRenewals=10, OPACFineNoRenewalsIncludeCredit=1, patron has 15 debt, 5 credit' );
|
||||
|
||||
|
|
@ -977,14 +972,12 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
|
||||
subtest "auto_account_expired | BlockExpiredPatronOpacActions" => sub {
|
||||
plan tests => 6;
|
||||
my $item_to_auto_renew = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
my $item_to_auto_renew = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblio->biblionumber,
|
||||
homebranch => $branch,
|
||||
holdingbranch => $branch,
|
||||
library => $branch,
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
Koha::CirculationRules->set_rules(
|
||||
{
|
||||
|
|
@ -1005,9 +998,9 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
# => auto renew is allowed
|
||||
t::lib::Mocks::mock_preference('BlockExpiredPatronOpacActions', 0);
|
||||
my $patron = $expired_borrower;
|
||||
my $checkout = AddIssue( $patron, $item_to_auto_renew->{barcode}, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
my $checkout = AddIssue( $patron, $item_to_auto_renew->barcode, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $patron->{borrowernumber}, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $patron->{borrowernumber}, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_renew', 'Can auto renew, patron is expired but BlockExpiredPatronOpacActions=0' );
|
||||
Koha::Checkouts->find( $checkout->issue_id )->delete;
|
||||
|
|
@ -1017,9 +1010,9 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
# => auto renew is not allowed
|
||||
t::lib::Mocks::mock_preference('BlockExpiredPatronOpacActions', 1);
|
||||
$patron = $expired_borrower;
|
||||
$checkout = AddIssue( $patron, $item_to_auto_renew->{barcode}, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
$checkout = AddIssue( $patron, $item_to_auto_renew->barcode, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $patron->{borrowernumber}, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $patron->{borrowernumber}, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_account_expired', 'Can not auto renew, lockExpiredPatronOpacActions=1 and patron is expired' );
|
||||
Koha::Checkouts->find( $checkout->issue_id )->delete;
|
||||
|
|
@ -1029,9 +1022,9 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
# => auto renew is allowed
|
||||
t::lib::Mocks::mock_preference('BlockExpiredPatronOpacActions', 1);
|
||||
$patron = $renewing_borrower;
|
||||
$checkout = AddIssue( $patron, $item_to_auto_renew->{barcode}, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
$checkout = AddIssue( $patron, $item_to_auto_renew->barcode, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
( $renewokay, $error ) =
|
||||
CanBookBeRenewed( $patron->{borrowernumber}, $item_to_auto_renew->{itemnumber} );
|
||||
CanBookBeRenewed( $patron->{borrowernumber}, $item_to_auto_renew->itemnumber );
|
||||
is( $renewokay, 0, 'Do not renew, renewal is automatic' );
|
||||
is( $error, 'auto_renew', 'Can auto renew, BlockExpiredPatronOpacActions=1 but patron is not expired' );
|
||||
Koha::Checkouts->find( $checkout->issue_id )->delete;
|
||||
|
|
@ -1039,19 +1032,16 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
|
||||
subtest "GetLatestAutoRenewDate" => sub {
|
||||
plan tests => 5;
|
||||
my $item_to_auto_renew = $builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->biblionumber,
|
||||
homebranch => $branch,
|
||||
holdingbranch => $branch,
|
||||
}
|
||||
my $item_to_auto_renew = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblio->biblionumber,
|
||||
library => $branch,
|
||||
}
|
||||
);
|
||||
|
||||
my $ten_days_before = dt_from_string->add( days => -10 );
|
||||
my $ten_days_ahead = dt_from_string->add( days => 10 );
|
||||
AddIssue( $renewing_borrower, $item_to_auto_renew->{barcode}, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
AddIssue( $renewing_borrower, $item_to_auto_renew->barcode, $ten_days_ahead, undef, $ten_days_before, undef, { auto_renew => 1 } );
|
||||
Koha::CirculationRules->set_rules(
|
||||
{
|
||||
categorycode => undef,
|
||||
|
|
@ -1064,7 +1054,7 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
}
|
||||
);
|
||||
my $latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
my $latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $latest_auto_renew_date, undef, 'GetLatestAutoRenewDate should return undef if no_auto_renewal_after or no_auto_renewal_after_hard_limit are not defined' );
|
||||
my $five_days_before = dt_from_string->add( days => -5 );
|
||||
Koha::CirculationRules->set_rules(
|
||||
|
|
@ -1079,7 +1069,7 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
}
|
||||
);
|
||||
$latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
$latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $latest_auto_renew_date->truncate( to => 'minute' ),
|
||||
$five_days_before->truncate( to => 'minute' ),
|
||||
'GetLatestAutoRenewDate should return -5 days if no_auto_renewal_after = 5 and date_due is 10 days before'
|
||||
|
|
@ -1100,7 +1090,7 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
}
|
||||
);
|
||||
$latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
$latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $latest_auto_renew_date->truncate( to => 'minute' ),
|
||||
$five_days_ahead->truncate( to => 'minute' ),
|
||||
'GetLatestAutoRenewDate should return +5 days if no_auto_renewal_after = 15 and date_due is 10 days before'
|
||||
|
|
@ -1118,7 +1108,7 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
}
|
||||
);
|
||||
$latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
$latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $latest_auto_renew_date->truncate( to => 'day' ),
|
||||
$two_days_ahead->truncate( to => 'day' ),
|
||||
'GetLatestAutoRenewDate should return +2 days if no_auto_renewal_after_hard_limit is defined and not no_auto_renewal_after'
|
||||
|
|
@ -1135,7 +1125,7 @@ subtest "CanBookBeRenewed tests" => sub {
|
|||
}
|
||||
}
|
||||
);
|
||||
$latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->{itemnumber} );
|
||||
$latest_auto_renew_date = GetLatestAutoRenewDate( $renewing_borrowernumber, $item_to_auto_renew->itemnumber );
|
||||
is( $latest_auto_renew_date->truncate( to => 'day' ),
|
||||
$two_days_ahead->truncate( to => 'day' ),
|
||||
'GetLatestAutoRenewDate should return +2 days if no_auto_renewal_after_hard_limit is < no_auto_renewal_after'
|
||||
|
|
@ -1602,11 +1592,11 @@ subtest 'CanBookBeIssued & AllowReturnToBranch' => sub {
|
|||
homebranch => $homebranch->{branchcode},
|
||||
holdingbranch => $holdingbranch->{branchcode},
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
|
||||
set_userenv($holdingbranch);
|
||||
|
||||
my $issue = AddIssue( $patron_1->unblessed, $item->{barcode} );
|
||||
my $issue = AddIssue( $patron_1->unblessed, $item->barcode );
|
||||
is( ref($issue), 'Koha::Checkout', 'AddIssue should return a Koha::Checkout object' );
|
||||
|
||||
my ( $error, $question, $alerts );
|
||||
|
|
@ -1619,16 +1609,16 @@ subtest 'CanBookBeIssued & AllowReturnToBranch' => sub {
|
|||
ok( $error->{UNKNOWN_BARCODE}, '"KohaIsAwesome" is not a valid barcode as expected.' );
|
||||
## Can be issued from homebranch
|
||||
set_userenv($homebranch);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->barcode );
|
||||
is( keys(%$error) + keys(%$alerts), 0, 'There should not be any errors or alerts (impossible)' . str($error, $question, $alerts) );
|
||||
is( exists $question->{ISSUED_TO_ANOTHER}, 1, 'ISSUED_TO_ANOTHER must be set' );
|
||||
## Can be issued from holdingbranch
|
||||
set_userenv($holdingbranch);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->barcode );
|
||||
is( keys(%$error) + keys(%$alerts), 0, 'There should not be any errors or alerts (impossible)' . str($error, $question, $alerts) );
|
||||
is( exists $question->{ISSUED_TO_ANOTHER}, 1, 'ISSUED_TO_ANOTHER must be set' );
|
||||
## Can be issued from another branch
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->barcode );
|
||||
is( keys(%$error) + keys(%$alerts), 0, 'There should not be any errors or alerts (impossible)' . str($error, $question, $alerts) );
|
||||
is( exists $question->{ISSUED_TO_ANOTHER}, 1, 'ISSUED_TO_ANOTHER must be set' );
|
||||
|
||||
|
|
@ -1636,18 +1626,18 @@ subtest 'CanBookBeIssued & AllowReturnToBranch' => sub {
|
|||
t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'holdingbranch' );
|
||||
## Cannot be issued from homebranch
|
||||
set_userenv($homebranch);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->barcode );
|
||||
is( keys(%$question) + keys(%$alerts), 0, 'There should not be any errors or alerts (impossible)' . str($error, $question, $alerts) );
|
||||
is( exists $error->{RETURN_IMPOSSIBLE}, 1, 'RETURN_IMPOSSIBLE must be set' );
|
||||
is( $error->{branch_to_return}, $holdingbranch->{branchcode}, 'branch_to_return matched holdingbranch' );
|
||||
## Can be issued from holdinbranch
|
||||
set_userenv($holdingbranch);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->barcode );
|
||||
is( keys(%$error) + keys(%$alerts), 0, 'There should not be any errors or alerts (impossible)' . str($error, $question, $alerts) );
|
||||
is( exists $question->{ISSUED_TO_ANOTHER}, 1, 'ISSUED_TO_ANOTHER must be set' );
|
||||
## Cannot be issued from another branch
|
||||
set_userenv($otherbranch);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->barcode );
|
||||
is( keys(%$question) + keys(%$alerts), 0, 'There should not be any errors or alerts (impossible)' . str($error, $question, $alerts) );
|
||||
is( exists $error->{RETURN_IMPOSSIBLE}, 1, 'RETURN_IMPOSSIBLE must be set' );
|
||||
is( $error->{branch_to_return}, $holdingbranch->{branchcode}, 'branch_to_return matches holdingbranch' );
|
||||
|
|
@ -1656,18 +1646,18 @@ subtest 'CanBookBeIssued & AllowReturnToBranch' => sub {
|
|||
t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homebranch' );
|
||||
## Can be issued from holdinbranch
|
||||
set_userenv($homebranch);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->barcode );
|
||||
is( keys(%$error) + keys(%$alerts), 0, 'There should not be any errors or alerts (impossible)' . str($error, $question, $alerts) );
|
||||
is( exists $question->{ISSUED_TO_ANOTHER}, 1, 'ISSUED_TO_ANOTHER must be set' );
|
||||
## Cannot be issued from holdinbranch
|
||||
set_userenv($holdingbranch);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->barcode );
|
||||
is( keys(%$question) + keys(%$alerts), 0, 'There should not be any errors or alerts (impossible)' . str($error, $question, $alerts) );
|
||||
is( exists $error->{RETURN_IMPOSSIBLE}, 1, 'RETURN_IMPOSSIBLE must be set' );
|
||||
is( $error->{branch_to_return}, $homebranch->{branchcode}, 'branch_to_return matches homebranch' );
|
||||
## Cannot be issued from holdinbranch
|
||||
set_userenv($otherbranch);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron_2, $item->barcode );
|
||||
is( keys(%$question) + keys(%$alerts), 0, 'There should not be any errors or alerts (impossible)' . str($error, $question, $alerts) );
|
||||
is( exists $error->{RETURN_IMPOSSIBLE}, 1, 'RETURN_IMPOSSIBLE must be set' );
|
||||
is( $error->{branch_to_return}, $homebranch->{branchcode}, 'branch_to_return matches homebranch' );
|
||||
|
|
@ -1689,12 +1679,12 @@ subtest 'AddIssue & AllowReturnToBranch' => sub {
|
|||
homebranch => $homebranch->{branchcode},
|
||||
holdingbranch => $holdingbranch->{branchcode},
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
|
||||
set_userenv($holdingbranch);
|
||||
|
||||
my $ref_issue = 'Koha::Checkout';
|
||||
my $issue = AddIssue( $patron_1, $item->{barcode} );
|
||||
my $issue = AddIssue( $patron_1, $item->barcode );
|
||||
|
||||
my ( $error, $question, $alerts );
|
||||
|
||||
|
|
@ -1702,42 +1692,42 @@ subtest 'AddIssue & AllowReturnToBranch' => sub {
|
|||
t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
|
||||
## Can be issued from homebranch
|
||||
set_userenv($homebranch);
|
||||
is ( ref( AddIssue( $patron_2, $item->{barcode} ) ), $ref_issue, 'AllowReturnToBranch - anywhere | Can be issued from homebranch');
|
||||
set_userenv($holdingbranch); AddIssue( $patron_1, $item->{barcode} ); # Reinsert the original issue
|
||||
is ( ref( AddIssue( $patron_2, $item->barcode ) ), $ref_issue, 'AllowReturnToBranch - anywhere | Can be issued from homebranch');
|
||||
set_userenv($holdingbranch); AddIssue( $patron_1, $item->barcode ); # Reinsert the original issue
|
||||
## Can be issued from holdinbranch
|
||||
set_userenv($holdingbranch);
|
||||
is ( ref( AddIssue( $patron_2, $item->{barcode} ) ), $ref_issue, 'AllowReturnToBranch - anywhere | Can be issued from holdingbranch');
|
||||
set_userenv($holdingbranch); AddIssue( $patron_1, $item->{barcode} ); # Reinsert the original issue
|
||||
is ( ref( AddIssue( $patron_2, $item->barcode ) ), $ref_issue, 'AllowReturnToBranch - anywhere | Can be issued from holdingbranch');
|
||||
set_userenv($holdingbranch); AddIssue( $patron_1, $item->barcode ); # Reinsert the original issue
|
||||
## Can be issued from another branch
|
||||
set_userenv($otherbranch);
|
||||
is ( ref( AddIssue( $patron_2, $item->{barcode} ) ), $ref_issue, 'AllowReturnToBranch - anywhere | Can be issued from otherbranch');
|
||||
set_userenv($holdingbranch); AddIssue( $patron_1, $item->{barcode} ); # Reinsert the original issue
|
||||
is ( ref( AddIssue( $patron_2, $item->barcode ) ), $ref_issue, 'AllowReturnToBranch - anywhere | Can be issued from otherbranch');
|
||||
set_userenv($holdingbranch); AddIssue( $patron_1, $item->barcode ); # Reinsert the original issue
|
||||
|
||||
# AllowReturnToBranch == holdinbranch
|
||||
t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'holdingbranch' );
|
||||
## Cannot be issued from homebranch
|
||||
set_userenv($homebranch);
|
||||
is ( ref( AddIssue( $patron_2, $item->{barcode} ) ), '', 'AllowReturnToBranch - holdingbranch | Cannot be issued from homebranch');
|
||||
is ( ref( AddIssue( $patron_2, $item->barcode ) ), '', 'AllowReturnToBranch - holdingbranch | Cannot be issued from homebranch');
|
||||
## Can be issued from holdingbranch
|
||||
set_userenv($holdingbranch);
|
||||
is ( ref( AddIssue( $patron_2, $item->{barcode} ) ), $ref_issue, 'AllowReturnToBranch - holdingbranch | Can be issued from holdingbranch');
|
||||
set_userenv($holdingbranch); AddIssue( $patron_1, $item->{barcode} ); # Reinsert the original issue
|
||||
is ( ref( AddIssue( $patron_2, $item->barcode ) ), $ref_issue, 'AllowReturnToBranch - holdingbranch | Can be issued from holdingbranch');
|
||||
set_userenv($holdingbranch); AddIssue( $patron_1, $item->barcode ); # Reinsert the original issue
|
||||
## Cannot be issued from another branch
|
||||
set_userenv($otherbranch);
|
||||
is ( ref( AddIssue( $patron_2, $item->{barcode} ) ), '', 'AllowReturnToBranch - holdingbranch | Cannot be issued from otherbranch');
|
||||
is ( ref( AddIssue( $patron_2, $item->barcode ) ), '', 'AllowReturnToBranch - holdingbranch | Cannot be issued from otherbranch');
|
||||
|
||||
# AllowReturnToBranch == homebranch
|
||||
t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homebranch' );
|
||||
## Can be issued from homebranch
|
||||
set_userenv($homebranch);
|
||||
is ( ref( AddIssue( $patron_2, $item->{barcode} ) ), $ref_issue, 'AllowReturnToBranch - homebranch | Can be issued from homebranch' );
|
||||
set_userenv($holdingbranch); AddIssue( $patron_1, $item->{barcode} ); # Reinsert the original issue
|
||||
is ( ref( AddIssue( $patron_2, $item->barcode ) ), $ref_issue, 'AllowReturnToBranch - homebranch | Can be issued from homebranch' );
|
||||
set_userenv($holdingbranch); AddIssue( $patron_1, $item->barcode ); # Reinsert the original issue
|
||||
## Cannot be issued from holdinbranch
|
||||
set_userenv($holdingbranch);
|
||||
is ( ref( AddIssue( $patron_2, $item->{barcode} ) ), '', 'AllowReturnToBranch - homebranch | Cannot be issued from holdingbranch' );
|
||||
is ( ref( AddIssue( $patron_2, $item->barcode ) ), '', 'AllowReturnToBranch - homebranch | Cannot be issued from holdingbranch' );
|
||||
## Cannot be issued from another branch
|
||||
set_userenv($otherbranch);
|
||||
is ( ref( AddIssue( $patron_2, $item->{barcode} ) ), '', 'AllowReturnToBranch - homebranch | Cannot be issued from otherbranch' );
|
||||
is ( ref( AddIssue( $patron_2, $item->barcode ) ), '', 'AllowReturnToBranch - homebranch | Cannot be issued from otherbranch' );
|
||||
# TODO t::lib::Mocks::mock_preference('AllowReturnToBranch', 'homeorholdingbranch');
|
||||
};
|
||||
|
||||
|
|
@ -1750,38 +1740,38 @@ subtest 'CanBookBeIssued + Koha::Patron->is_debarred|has_overdues' => sub {
|
|||
{
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
my $item_2 = $builder->build_sample_item(
|
||||
{
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
|
||||
my ( $error, $question, $alerts );
|
||||
|
||||
# Patron cannot issue item_1, they have overdues
|
||||
my $yesterday = DateTime->today( time_zone => C4::Context->tz() )->add( days => -1 );
|
||||
my $issue = AddIssue( $patron->unblessed, $item_1->{barcode}, $yesterday ); # Add an overdue
|
||||
my $issue = AddIssue( $patron->unblessed, $item_1->barcode, $yesterday ); # Add an overdue
|
||||
|
||||
t::lib::Mocks::mock_preference( 'OverduesBlockCirc', 'confirmation' );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->barcode );
|
||||
is( keys(%$error) + keys(%$alerts), 0, 'No key for error and alert' . str($error, $question, $alerts) );
|
||||
is( $question->{USERBLOCKEDOVERDUE}, 1, 'OverduesBlockCirc=confirmation, USERBLOCKEDOVERDUE should be set for question' );
|
||||
|
||||
t::lib::Mocks::mock_preference( 'OverduesBlockCirc', 'block' );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->barcode );
|
||||
is( keys(%$question) + keys(%$alerts), 0, 'No key for question and alert ' . str($error, $question, $alerts) );
|
||||
is( $error->{USERBLOCKEDOVERDUE}, 1, 'OverduesBlockCirc=block, USERBLOCKEDOVERDUE should be set for error' );
|
||||
|
||||
# Patron cannot issue item_1, they are debarred
|
||||
my $tomorrow = DateTime->today( time_zone => C4::Context->tz() )->add( days => 1 );
|
||||
Koha::Patron::Debarments::AddDebarment( { borrowernumber => $patron->borrowernumber, expiration => $tomorrow } );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->barcode );
|
||||
is( keys(%$question) + keys(%$alerts), 0, 'No key for question and alert ' . str($error, $question, $alerts) );
|
||||
is( $error->{USERBLOCKEDWITHENDDATE}, output_pref( { dt => $tomorrow, dateformat => 'sql', dateonly => 1 } ), 'USERBLOCKEDWITHENDDATE should be tomorrow' );
|
||||
|
||||
Koha::Patron::Debarments::AddDebarment( { borrowernumber => $patron->borrowernumber } );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->barcode );
|
||||
is( keys(%$question) + keys(%$alerts), 0, 'No key for question and alert ' . str($error, $question, $alerts) );
|
||||
is( $error->{USERBLOCKEDNOENDDATE}, '9999-12-31', 'USERBLOCKEDNOENDDATE should be 9999-12-31 for unlimited debarments' );
|
||||
};
|
||||
|
|
@ -1812,9 +1802,9 @@ subtest 'CanBookBeIssued + Statistic patrons "X"' => sub {
|
|||
{
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
|
||||
my ( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_1->{barcode} );
|
||||
my ( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_1->barcode );
|
||||
is( $error->{STATS}, 1, '"Error" flag "STATS" must be set if CanBookBeIssued is called with a statistic patron (category_type=X)' );
|
||||
|
||||
# TODO There are other tests to provide here
|
||||
|
|
@ -1944,20 +1934,20 @@ subtest 'CanBookBeIssued + AllowMultipleIssuesOnABiblio' => sub {
|
|||
biblionumber => $biblionumber,
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
|
||||
my $item_2 = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber,
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
|
||||
my ( $error, $question, $alerts );
|
||||
my $issue = AddIssue( $patron->unblessed, $item_1->{barcode}, dt_from_string->add( days => 1 ) );
|
||||
my $issue = AddIssue( $patron->unblessed, $item_1->barcode, dt_from_string->add( days => 1 ) );
|
||||
|
||||
t::lib::Mocks::mock_preference('AllowMultipleIssuesOnABiblio', 0);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->barcode );
|
||||
cmp_deeply(
|
||||
{ error => $error, alerts => $alerts },
|
||||
{ error => {}, alerts => {} },
|
||||
|
|
@ -1966,7 +1956,7 @@ subtest 'CanBookBeIssued + AllowMultipleIssuesOnABiblio' => sub {
|
|||
is( $question->{BIBLIO_ALREADY_ISSUED}, 1, 'BIBLIO_ALREADY_ISSUED question flag should be set if AllowMultipleIssuesOnABiblio=0 and issue already exists' );
|
||||
|
||||
t::lib::Mocks::mock_preference('AllowMultipleIssuesOnABiblio', 1);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->barcode );
|
||||
cmp_deeply(
|
||||
{ error => $error, question => $question, alerts => $alerts },
|
||||
{ error => {}, question => {}, alerts => {} },
|
||||
|
|
@ -1977,7 +1967,7 @@ subtest 'CanBookBeIssued + AllowMultipleIssuesOnABiblio' => sub {
|
|||
Koha::Subscription->new({ biblionumber => $biblionumber })->store;
|
||||
|
||||
t::lib::Mocks::mock_preference('AllowMultipleIssuesOnABiblio', 0);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->barcode );
|
||||
cmp_deeply(
|
||||
{ error => $error, question => $question, alerts => $alerts },
|
||||
{ error => {}, question => {}, alerts => {} },
|
||||
|
|
@ -1985,7 +1975,7 @@ subtest 'CanBookBeIssued + AllowMultipleIssuesOnABiblio' => sub {
|
|||
);
|
||||
|
||||
t::lib::Mocks::mock_preference('AllowMultipleIssuesOnABiblio', 1);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron, $item_2->barcode );
|
||||
cmp_deeply(
|
||||
{ error => $error, question => $question, alerts => $alerts },
|
||||
{ error => {}, question => {}, alerts => {} },
|
||||
|
|
@ -2010,13 +2000,13 @@ subtest 'AddReturn + CumulativeRestrictionPeriods' => sub {
|
|||
biblionumber => $biblionumber,
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
my $item_2 = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber,
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
|
||||
# And the circulation rule
|
||||
Koha::CirculationRules->search->delete;
|
||||
|
|
@ -2038,12 +2028,12 @@ subtest 'AddReturn + CumulativeRestrictionPeriods' => sub {
|
|||
my $now = dt_from_string;
|
||||
my $five_days_ago = $now->clone->subtract( days => 5 );
|
||||
my $ten_days_ago = $now->clone->subtract( days => 10 );
|
||||
AddIssue( $patron, $item_1->{barcode}, $five_days_ago ); # Add an overdue
|
||||
AddIssue( $patron, $item_2->{barcode}, $ten_days_ago )
|
||||
AddIssue( $patron, $item_1->barcode, $five_days_ago ); # Add an overdue
|
||||
AddIssue( $patron, $item_2->barcode, $ten_days_ago )
|
||||
; # Add another overdue
|
||||
|
||||
t::lib::Mocks::mock_preference( 'CumulativeRestrictionPeriods', '0' );
|
||||
AddReturn( $item_1->{barcode}, $library->{branchcode}, undef, $now );
|
||||
AddReturn( $item_1->barcode, $library->{branchcode}, undef, $now );
|
||||
my $debarments = Koha::Patron::Debarments::GetDebarments(
|
||||
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } );
|
||||
is( scalar(@$debarments), 1 );
|
||||
|
|
@ -2059,7 +2049,7 @@ subtest 'AddReturn + CumulativeRestrictionPeriods' => sub {
|
|||
);
|
||||
is( $debarments->[0]->{expiration}, $expected_expiration );
|
||||
|
||||
AddReturn( $item_2->{barcode}, $library->{branchcode}, undef, $now );
|
||||
AddReturn( $item_2->barcode, $library->{branchcode}, undef, $now );
|
||||
$debarments = Koha::Patron::Debarments::GetDebarments(
|
||||
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } );
|
||||
is( scalar(@$debarments), 1 );
|
||||
|
|
@ -2076,10 +2066,10 @@ subtest 'AddReturn + CumulativeRestrictionPeriods' => sub {
|
|||
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } );
|
||||
|
||||
t::lib::Mocks::mock_preference( 'CumulativeRestrictionPeriods', '1' );
|
||||
AddIssue( $patron, $item_1->{barcode}, $five_days_ago ); # Add an overdue
|
||||
AddIssue( $patron, $item_2->{barcode}, $ten_days_ago )
|
||||
AddIssue( $patron, $item_1->barcode, $five_days_ago ); # Add an overdue
|
||||
AddIssue( $patron, $item_2->barcode, $ten_days_ago )
|
||||
; # Add another overdue
|
||||
AddReturn( $item_1->{barcode}, $library->{branchcode}, undef, $now );
|
||||
AddReturn( $item_1->barcode, $library->{branchcode}, undef, $now );
|
||||
$debarments = Koha::Patron::Debarments::GetDebarments(
|
||||
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } );
|
||||
is( scalar(@$debarments), 1 );
|
||||
|
|
@ -2092,7 +2082,7 @@ subtest 'AddReturn + CumulativeRestrictionPeriods' => sub {
|
|||
);
|
||||
is( $debarments->[0]->{expiration}, $expected_expiration );
|
||||
|
||||
AddReturn( $item_2->{barcode}, $library->{branchcode}, undef, $now );
|
||||
AddReturn( $item_2->barcode, $library->{branchcode}, undef, $now );
|
||||
$debarments = Koha::Patron::Debarments::GetDebarments(
|
||||
{ borrowernumber => $patron->{borrowernumber}, type => 'SUSPENSION' } );
|
||||
is( scalar(@$debarments), 1 );
|
||||
|
|
@ -2122,7 +2112,7 @@ subtest 'AddReturn + suspension_chargeperiod' => sub {
|
|||
biblionumber => $biblionumber,
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
|
||||
# And the issuing rule
|
||||
Koha::CirculationRules->search->delete;
|
||||
|
|
@ -2336,17 +2326,17 @@ subtest 'CanBookBeIssued + AutoReturnCheckedOutItems' => sub {
|
|||
{
|
||||
library => $library->branchcode,
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
|
||||
my ( $error, $question, $alerts );
|
||||
my $issue = AddIssue( $patron1->unblessed, $item->{barcode} );
|
||||
my $issue = AddIssue( $patron1->unblessed, $item->barcode );
|
||||
|
||||
t::lib::Mocks::mock_preference('AutoReturnCheckedOutItems', 0);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron2, $item->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron2, $item->barcode );
|
||||
is( $question->{ISSUED_TO_ANOTHER}, 1, 'ISSUED_TO_ANOTHER question flag should be set if AutoReturnCheckedOutItems is disabled and item is checked out to another' );
|
||||
|
||||
t::lib::Mocks::mock_preference('AutoReturnCheckedOutItems', 1);
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron2, $item->{barcode} );
|
||||
( $error, $question, $alerts ) = CanBookBeIssued( $patron2, $item->barcode );
|
||||
is( $alerts->{RETURNED_FROM_ANOTHER}->{patron}->borrowernumber, $patron1->borrowernumber, 'RETURNED_FROM_ANOTHER alert flag should be set if AutoReturnCheckedOutItems is enabled and item is checked out to another' );
|
||||
|
||||
t::lib::Mocks::mock_preference('AutoReturnCheckedOutItems', 0);
|
||||
|
|
@ -2371,7 +2361,7 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
library => $library->{branchcode},
|
||||
replacementprice => 7
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
|
||||
Koha::CirculationRules->search->delete;
|
||||
Koha::CirculationRules->set_rules(
|
||||
|
|
@ -2396,26 +2386,26 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
$patron = Koha::Patrons->find( $patron->{borrowernumber} );
|
||||
|
||||
# No return date specified, today will be used => 10 days overdue charged
|
||||
AddIssue( $patron->unblessed, $item->{barcode}, $ten_days_ago ); # date due was 10d ago
|
||||
AddReturn( $item->{barcode}, $library->{branchcode} );
|
||||
AddIssue( $patron->unblessed, $item->barcode, $ten_days_ago ); # date due was 10d ago
|
||||
AddReturn( $item->barcode, $library->{branchcode} );
|
||||
is( int($patron->account->balance()), 10, 'Patron should have a charge of 10 (10 days x 1)' );
|
||||
Koha::Account::Lines->search({ borrowernumber => $patron->borrowernumber })->delete;
|
||||
|
||||
# specify return date 5 days before => no overdue charged
|
||||
AddIssue( $patron->unblessed, $item->{barcode}, $five_days_ago ); # date due was 5d ago
|
||||
AddReturn( $item->{barcode}, $library->{branchcode}, undef, $ten_days_ago );
|
||||
AddIssue( $patron->unblessed, $item->barcode, $five_days_ago ); # date due was 5d ago
|
||||
AddReturn( $item->barcode, $library->{branchcode}, undef, $ten_days_ago );
|
||||
is( int($patron->account->balance()), 0, 'AddReturn: pass return_date => no overdue' );
|
||||
Koha::Account::Lines->search({ borrowernumber => $patron->borrowernumber })->delete;
|
||||
|
||||
# specify return date 5 days later => 5 days overdue charged
|
||||
AddIssue( $patron->unblessed, $item->{barcode}, $ten_days_ago ); # date due was 10d ago
|
||||
AddReturn( $item->{barcode}, $library->{branchcode}, undef, $five_days_ago );
|
||||
AddIssue( $patron->unblessed, $item->barcode, $ten_days_ago ); # date due was 10d ago
|
||||
AddReturn( $item->barcode, $library->{branchcode}, undef, $five_days_ago );
|
||||
is( int($patron->account->balance()), 5, 'AddReturn: pass return_date => overdue' );
|
||||
Koha::Account::Lines->search({ borrowernumber => $patron->borrowernumber })->delete;
|
||||
|
||||
# specify return date 5 days later, specify exemptfine => no overdue charge
|
||||
AddIssue( $patron->unblessed, $item->{barcode}, $ten_days_ago ); # date due was 10d ago
|
||||
AddReturn( $item->{barcode}, $library->{branchcode}, 1, $five_days_ago );
|
||||
AddIssue( $patron->unblessed, $item->barcode, $ten_days_ago ); # date due was 10d ago
|
||||
AddReturn( $item->barcode, $library->{branchcode}, 1, $five_days_ago );
|
||||
is( int($patron->account->balance()), 0, 'AddReturn: pass return_date => no overdue' );
|
||||
Koha::Account::Lines->search({ borrowernumber => $patron->borrowernumber })->delete;
|
||||
|
||||
|
|
@ -2423,7 +2413,7 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
|
||||
plan tests => 3;
|
||||
|
||||
my $issue = AddIssue( $patron->unblessed, $item->{barcode}, $ten_days_ago ); # date due was 10d ago
|
||||
my $issue = AddIssue( $patron->unblessed, $item->barcode, $ten_days_ago ); # date due was 10d ago
|
||||
|
||||
# Fake fines cronjob on this checkout
|
||||
my ($fine) =
|
||||
|
|
@ -2432,7 +2422,7 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
UpdateFine(
|
||||
{
|
||||
issue_id => $issue->issue_id,
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
borrowernumber => $patron->borrowernumber,
|
||||
amount => $fine,
|
||||
due => output_pref($ten_days_ago)
|
||||
|
|
@ -2442,12 +2432,12 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
10, "Overdue fine of 10 days overdue" );
|
||||
|
||||
# Fake longoverdue with charge and not marking returned
|
||||
LostItem( $item->{itemnumber}, 'cronjob', 0 );
|
||||
LostItem( $item->itemnumber, 'cronjob', 0 );
|
||||
is( int( $patron->account->balance() ),
|
||||
17, "Lost fine of 7 plus 10 days overdue" );
|
||||
|
||||
# Now we return it today
|
||||
AddReturn( $item->{barcode}, $library->{branchcode} );
|
||||
AddReturn( $item->barcode, $library->{branchcode} );
|
||||
is( int( $patron->account->balance() ),
|
||||
17, "Should have a single 10 days overdue fine and lost charge" );
|
||||
|
||||
|
|
@ -2461,7 +2451,7 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
|
||||
t::lib::Mocks::mock_preference('CalculateFinesOnBackdate', 1);
|
||||
|
||||
my $issue = AddIssue( $patron->unblessed, $item->{barcode}, $one_day_ago ); # date due was 1d ago
|
||||
my $issue = AddIssue( $patron->unblessed, $item->barcode, $one_day_ago ); # date due was 1d ago
|
||||
|
||||
# Fake fines cronjob on this checkout
|
||||
my ($fine) =
|
||||
|
|
@ -2470,7 +2460,7 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
UpdateFine(
|
||||
{
|
||||
issue_id => $issue->issue_id,
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
borrowernumber => $patron->borrowernumber,
|
||||
amount => $fine,
|
||||
due => output_pref($one_day_ago)
|
||||
|
|
@ -2480,13 +2470,13 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
1, "Overdue fine of 1 day overdue" );
|
||||
|
||||
# Backdated return (dropbox mode example - charge should be removed)
|
||||
AddReturn( $item->{barcode}, $library->{branchcode}, 1, $one_day_ago );
|
||||
AddReturn( $item->barcode, $library->{branchcode}, 1, $one_day_ago );
|
||||
is( int( $patron->account->balance() ),
|
||||
0, "Overdue fine should be annulled" );
|
||||
my $lines = Koha::Account::Lines->search({ borrowernumber => $patron->borrowernumber });
|
||||
is( $lines->count, 0, "Overdue fine accountline has been removed");
|
||||
|
||||
$issue = AddIssue( $patron->unblessed, $item->{barcode}, $two_days_ago ); # date due was 2d ago
|
||||
$issue = AddIssue( $patron->unblessed, $item->barcode, $two_days_ago ); # date due was 2d ago
|
||||
|
||||
# Fake fines cronjob on this checkout
|
||||
($fine) =
|
||||
|
|
@ -2495,7 +2485,7 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
UpdateFine(
|
||||
{
|
||||
issue_id => $issue->issue_id,
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
borrowernumber => $patron->borrowernumber,
|
||||
amount => $fine,
|
||||
due => output_pref($one_day_ago)
|
||||
|
|
@ -2526,7 +2516,7 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
is( $line->amountoutstanding+0, 0, "Overdue fine amountoutstanding reduced to 0");
|
||||
|
||||
# Backdated return (dropbox mode example - charge should be removed)
|
||||
AddReturn( $item->{barcode}, $library->{branchcode}, undef, $one_day_ago );
|
||||
AddReturn( $item->barcode, $library->{branchcode}, undef, $one_day_ago );
|
||||
is( int( $patron->account->balance() ),
|
||||
-1, "Refund credit has been applied" );
|
||||
$lines = Koha::Account::Lines->search({ borrowernumber => $patron->borrowernumber }, { order_by => { '-asc' => 'accountlines_id' }});
|
||||
|
|
@ -2553,7 +2543,7 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
|
||||
t::lib::Mocks::mock_preference('CalculateFinesOnBackdate', 1);
|
||||
|
||||
my $issue = AddIssue( $patron->unblessed, $item->{barcode}, $one_day_ago ); # date due was 1d ago
|
||||
my $issue = AddIssue( $patron->unblessed, $item->barcode, $one_day_ago ); # date due was 1d ago
|
||||
|
||||
# Fake fines cronjob on this checkout
|
||||
my ($fine) =
|
||||
|
|
@ -2562,7 +2552,7 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
UpdateFine(
|
||||
{
|
||||
issue_id => $issue->issue_id,
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
borrowernumber => $patron->borrowernumber,
|
||||
amount => $fine,
|
||||
due => output_pref($one_day_ago)
|
||||
|
|
@ -2572,7 +2562,7 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
1, "Overdue fine of 1 day overdue" );
|
||||
|
||||
# Backdated return (dropbox mode example - charge should no longer exist)
|
||||
AddReturn( $item->{barcode}, $library->{branchcode}, 1, $one_day_ago );
|
||||
AddReturn( $item->barcode, $library->{branchcode}, 1, $one_day_ago );
|
||||
is( int( $patron->account->balance() ),
|
||||
0, "Overdue fine should be annulled" );
|
||||
|
||||
|
|
@ -2586,13 +2576,13 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
t::lib::Mocks::mock_preference( 'CalculateFinesOnBackdate', 1 );
|
||||
|
||||
my $due_date = dt_from_string;
|
||||
my $issue = AddIssue( $patron->unblessed, $item->{barcode}, $due_date );
|
||||
my $issue = AddIssue( $patron->unblessed, $item->barcode, $due_date );
|
||||
|
||||
# Add fine
|
||||
UpdateFine(
|
||||
{
|
||||
issue_id => $issue->issue_id,
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
borrowernumber => $patron->borrowernumber,
|
||||
amount => 0.25,
|
||||
due => output_pref($due_date)
|
||||
|
|
@ -2603,7 +2593,7 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
|
||||
# Backdate return to exact due date and time
|
||||
my ( undef, $message ) =
|
||||
AddReturn( $item->{barcode}, $library->{branchcode},
|
||||
AddReturn( $item->barcode, $library->{branchcode},
|
||||
undef, $due_date );
|
||||
|
||||
my $accountline =
|
||||
|
|
@ -2611,13 +2601,13 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
ok( !$accountline, 'accountline removed as expected' );
|
||||
|
||||
# Re-issue
|
||||
$issue = AddIssue( $patron->unblessed, $item->{barcode}, $due_date );
|
||||
$issue = AddIssue( $patron->unblessed, $item->barcode, $due_date );
|
||||
|
||||
# Add fine
|
||||
UpdateFine(
|
||||
{
|
||||
issue_id => $issue->issue_id,
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
borrowernumber => $patron->borrowernumber,
|
||||
amount => .25,
|
||||
due => output_pref($due_date)
|
||||
|
|
@ -2647,7 +2637,7 @@ subtest 'AddReturn | is_overdue' => sub {
|
|||
|
||||
# Backdate return to exact due date and time
|
||||
( undef, $message ) =
|
||||
AddReturn( $item->{barcode}, $library->{branchcode},
|
||||
AddReturn( $item->barcode, $library->{branchcode},
|
||||
undef, $due_date );
|
||||
|
||||
$lines = Koha::Account::Lines->search(
|
||||
|
|
@ -2766,46 +2756,46 @@ subtest 'Set waiting flag' => sub {
|
|||
{
|
||||
library => $library_1->{branchcode},
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
|
||||
set_userenv( $library_2 );
|
||||
my $reserve_id = AddReserve(
|
||||
{
|
||||
branchcode => $library_2->{branchcode},
|
||||
borrowernumber => $patron_2->{borrowernumber},
|
||||
biblionumber => $item->{biblionumber},
|
||||
biblionumber => $item->biblionumber,
|
||||
priority => 1,
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
}
|
||||
);
|
||||
|
||||
set_userenv( $library_1 );
|
||||
my $do_transfer = 1;
|
||||
my ( $res, $rr ) = AddReturn( $item->{barcode}, $library_1->{branchcode} );
|
||||
ModReserveAffect( $item->{itemnumber}, undef, $do_transfer, $reserve_id );
|
||||
my ( $res, $rr ) = AddReturn( $item->barcode, $library_1->{branchcode} );
|
||||
ModReserveAffect( $item->itemnumber, undef, $do_transfer, $reserve_id );
|
||||
my $hold = Koha::Holds->find( $reserve_id );
|
||||
is( $hold->found, 'T', 'Hold is in transit' );
|
||||
|
||||
my ( $status ) = CheckReserves($item->{itemnumber});
|
||||
my ( $status ) = CheckReserves($item->itemnumber);
|
||||
is( $status, 'Reserved', 'Hold is not waiting yet');
|
||||
|
||||
set_userenv( $library_2 );
|
||||
$do_transfer = 0;
|
||||
AddReturn( $item->{barcode}, $library_2->{branchcode} );
|
||||
ModReserveAffect( $item->{itemnumber}, undef, $do_transfer, $reserve_id );
|
||||
AddReturn( $item->barcode, $library_2->{branchcode} );
|
||||
ModReserveAffect( $item->itemnumber, undef, $do_transfer, $reserve_id );
|
||||
$hold = Koha::Holds->find( $reserve_id );
|
||||
is( $hold->found, 'W', 'Hold is waiting' );
|
||||
( $status ) = CheckReserves($item->{itemnumber});
|
||||
( $status ) = CheckReserves($item->itemnumber);
|
||||
is( $status, 'Waiting', 'Now the hold is waiting');
|
||||
|
||||
#Bug 21944 - Waiting transfer checked in at branch other than pickup location
|
||||
set_userenv( $library_1 );
|
||||
(undef, my $messages, undef, undef ) = AddReturn ( $item->{barcode}, $library_1->{branchcode} );
|
||||
(undef, my $messages, undef, undef ) = AddReturn ( $item->barcode, $library_1->{branchcode} );
|
||||
$hold = Koha::Holds->find( $reserve_id );
|
||||
is( $hold->found, undef, 'Hold is no longer marked waiting' );
|
||||
is( $hold->priority, 1, "Hold is now priority one again");
|
||||
is( $hold->waitingdate, undef, "Hold no longer has a waiting date");
|
||||
is( $hold->itemnumber, $item->{itemnumber}, "Hold has retained its' itemnumber");
|
||||
is( $hold->itemnumber, $item->itemnumber, "Hold has retained its' itemnumber");
|
||||
is( $messages->{ResFound}->{ResFound}, "Reserved", "Hold is still returned");
|
||||
is( $messages->{ResFound}->{found}, undef, "Hold is no longer marked found in return message");
|
||||
is( $messages->{ResFound}->{priority}, 1, "Hold is priority 1 in return message");
|
||||
|
|
@ -2898,12 +2888,12 @@ subtest 'CanBookBeIssued | is_overdue' => sub {
|
|||
{
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
)->unblessed;
|
||||
);
|
||||
|
||||
my $issue = AddIssue( $patron->unblessed, $item->{barcode}, $five_days_go ); # date due was 10d ago
|
||||
my $actualissue = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } );
|
||||
my $issue = AddIssue( $patron->unblessed, $item->barcode, $five_days_go ); # date due was 10d ago
|
||||
my $actualissue = Koha::Checkouts->find( { itemnumber => $item->itemnumber } );
|
||||
is( output_pref({ str => $actualissue->date_due, dateonly => 1}), $five_days_go, "First issue works");
|
||||
my ($issuingimpossible, $needsconfirmation) = CanBookBeIssued($patron,$item->{barcode},$ten_days_go, undef, undef, undef);
|
||||
my ($issuingimpossible, $needsconfirmation) = CanBookBeIssued($patron,$item->barcode,$ten_days_go, undef, undef, undef);
|
||||
is( $needsconfirmation->{RENEW_ISSUE}, 1, "This is a renewal");
|
||||
is( $needsconfirmation->{TOO_MANY}, undef, "Not too many, is a renewal");
|
||||
};
|
||||
|
|
@ -3524,20 +3514,13 @@ subtest 'CanBookBeIssued & RentalFeesCheckoutConfirmation' => sub {
|
|||
}
|
||||
);
|
||||
|
||||
my $biblioitem = $builder->build( { source => 'Biblioitem' } );
|
||||
my $item = $builder->build_object(
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
class => 'Koha::Items',
|
||||
value => {
|
||||
homebranch => $library->id,
|
||||
holdingbranch => $library->id,
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
itype => $itemtype->id,
|
||||
biblionumber => $biblioitem->{biblionumber},
|
||||
biblioitemnumber => $biblioitem->{biblioitemnumber},
|
||||
}
|
||||
library => $library->id,
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
itype => $itemtype->id,
|
||||
}
|
||||
)->store;
|
||||
|
||||
|
|
|
|||
|
|
@ -44,15 +44,6 @@ my $patron = $builder->build(
|
|||
}
|
||||
);
|
||||
|
||||
my $biblio = $builder->build(
|
||||
{
|
||||
source => 'Biblio',
|
||||
value => {
|
||||
branchcode => $branch->{branchcode},
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
my $itemtype = $builder->build(
|
||||
{
|
||||
source => 'Itemtype',
|
||||
|
|
@ -62,16 +53,11 @@ my $itemtype = $builder->build(
|
|||
}
|
||||
);
|
||||
|
||||
my $item = $builder->build(
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
homebranch => $branch->{branchcode},
|
||||
holdingbranch => $branch->{branchcode},
|
||||
replacementprice => '5.00',
|
||||
itype => $itemtype->{itemtype},
|
||||
},
|
||||
library => $branch->{branchcode},
|
||||
replacementprice => '5.00',
|
||||
itype => $itemtype->{itemtype},
|
||||
}
|
||||
);
|
||||
|
||||
|
|
@ -107,7 +93,7 @@ subtest 'Test basic functionality' => sub {
|
|||
day => 30,
|
||||
);
|
||||
|
||||
my ($amount) = CalcFine( $item, $patron->{categorycode}, $branch->{branchcode}, $start_dt, $end_dt );
|
||||
my ($amount) = CalcFine( $item->unblessed, $patron->{categorycode}, $branch->{branchcode}, $start_dt, $end_dt );
|
||||
|
||||
is( $amount, 29, 'Amount is calculated correctly' );
|
||||
|
||||
|
|
@ -147,15 +133,21 @@ subtest 'Test cap_fine_to_replacement_price' => sub {
|
|||
day => 30,
|
||||
);
|
||||
|
||||
my ($amount) = CalcFine( $item, $patron->{categorycode}, $branch->{branchcode}, $start_dt, $end_dt );
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
library => $branch->{branchcode},
|
||||
replacementprice => 5,
|
||||
itype => $itemtype->{itemtype},
|
||||
}
|
||||
);
|
||||
|
||||
my ($amount) = CalcFine( $item->unblessed, $patron->{categorycode}, $branch->{branchcode}, $start_dt, $end_dt );
|
||||
|
||||
is( int($amount), 5, 'Amount is calculated correctly' );
|
||||
|
||||
|
||||
# Use default replacement cost (useDefaultReplacementCost) is item's replacement price is 0
|
||||
my $item_obj = Koha::Items->find($item->{itemnumber});
|
||||
$item_obj->replacementprice(0)->store;
|
||||
($amount) = CalcFine( $item_obj->unblessed, $patron->{categorycode}, $branch->{branchcode}, $start_dt, $end_dt );
|
||||
$item->replacementprice(0)->store;
|
||||
($amount) = CalcFine( $item->unblessed, $patron->{categorycode}, $branch->{branchcode}, $start_dt, $end_dt );
|
||||
is( int($amount), 6, 'Amount is calculated correctly' );
|
||||
|
||||
teardown();
|
||||
|
|
@ -194,11 +186,11 @@ subtest 'Test cap_fine_to_replacement_pricew with overduefinescap' => sub {
|
|||
day => 30,
|
||||
);
|
||||
|
||||
my ($amount) = CalcFine( $item, $patron->{categorycode}, $branch->{branchcode}, $start_dt, $end_dt );
|
||||
my ($amount) = CalcFine( $item->unblessed, $patron->{categorycode}, $branch->{branchcode}, $start_dt, $end_dt );
|
||||
is( int($amount), 3, 'Got the lesser of overduefinescap and replacement price where overduefinescap < replacement price' );
|
||||
|
||||
Koha::CirculationRules->set_rule({ rule_name => 'overduefinescap', rule_value => 6, branchcode => undef, categorycode => undef, itemtype => undef });
|
||||
($amount) = CalcFine( $item, $patron->{categorycode}, $branch->{branchcode}, $start_dt, $end_dt );
|
||||
($amount) = CalcFine( $item->unblessed, $patron->{categorycode}, $branch->{branchcode}, $start_dt, $end_dt );
|
||||
is( int($amount), 5, 'Get the lesser of overduefinescap and replacement price where overduefinescap > replacement price' );
|
||||
|
||||
teardown();
|
||||
|
|
|
|||
|
|
@ -48,17 +48,9 @@ subtest 'Failure tests' => sub {
|
|||
value => { branchcode => $library->branchcode, categorycode => $category->categorycode }
|
||||
}
|
||||
);
|
||||
my $biblioitem = $builder->build_object( { class => 'Koha::Biblioitems' } );
|
||||
my $item = $builder->build_object(
|
||||
{ class => 'Koha::Items',
|
||||
value => {
|
||||
homebranch => $library->branchcode,
|
||||
holdingbranch => $library->branchcode,
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
biblionumber => $biblioitem->biblionumber,
|
||||
}
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
library => $library->branchcode,
|
||||
}
|
||||
);
|
||||
|
||||
|
|
@ -95,17 +87,9 @@ subtest 'Anonymous patron tests' => sub {
|
|||
value => { branchcode => $library->branchcode, categorycode => $category->categorycode }
|
||||
}
|
||||
);
|
||||
my $biblioitem = $builder->build_object( { class => 'Koha::Biblioitems' } );
|
||||
my $item = $builder->build_object(
|
||||
{ class => 'Koha::Items',
|
||||
value => {
|
||||
homebranch => $library->branchcode,
|
||||
holdingbranch => $library->branchcode,
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
biblionumber => $biblioitem->biblionumber,
|
||||
}
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
library => $library->branchcode,
|
||||
}
|
||||
);
|
||||
|
||||
|
|
@ -149,17 +133,9 @@ subtest 'Manually pass a return date' => sub {
|
|||
value => { branchcode => $library->branchcode, categorycode => $category->categorycode }
|
||||
}
|
||||
);
|
||||
my $biblioitem = $builder->build_object( { class => 'Koha::Biblioitems' } );
|
||||
my $item = $builder->build_object(
|
||||
{ class => 'Koha::Items',
|
||||
value => {
|
||||
homebranch => $library->branchcode,
|
||||
holdingbranch => $library->branchcode,
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
biblionumber => $biblioitem->biblionumber,
|
||||
}
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
library => $library->branchcode,
|
||||
}
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -33,16 +33,7 @@ $schema->storage->txn_begin;
|
|||
|
||||
my $builder = t::lib::TestBuilder->new();
|
||||
|
||||
my $item = $builder->build(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $builder->build( { source => 'Biblioitem' } )->{biblionumber},
|
||||
notforloan => 0,
|
||||
withdrawn => 0
|
||||
}
|
||||
}
|
||||
);
|
||||
my $item = $builder->build_sample_item;
|
||||
|
||||
my $patron_category = $builder->build({ source => 'Category', value => { categorycode => 'NOT_X', category_type => 'P', enrolmentfee => 0 } });
|
||||
my $patron = $builder->build_object(
|
||||
|
|
@ -77,12 +68,12 @@ my $r = $builder->build_object(
|
|||
t::lib::Mocks::mock_preference( 'NoIssuesChargeGuarantees', '5.00' );
|
||||
t::lib::Mocks::mock_preference( 'AllowFineOverride', '' );
|
||||
|
||||
my ( $issuingimpossible, $needsconfirmation ) = CanBookBeIssued( $patron, $item->{barcode} );
|
||||
my ( $issuingimpossible, $needsconfirmation ) = CanBookBeIssued( $patron, $item->barcode );
|
||||
is( $issuingimpossible->{DEBT_GUARANTEES}, undef, "Patron can check out item" );
|
||||
|
||||
my $account = Koha::Account->new( { patron_id => $guarantee->id } );
|
||||
$account->add_debit({ amount => 10.00, type => 'LOST', interface => 'test' });
|
||||
( $issuingimpossible, $needsconfirmation ) = CanBookBeIssued( $patron, $item->{barcode} );
|
||||
( $issuingimpossible, $needsconfirmation ) = CanBookBeIssued( $patron, $item->barcode );
|
||||
is( $issuingimpossible->{DEBT_GUARANTEES} + 0, '10.00' + 0, "Patron cannot check out item due to debt for guarantee" );
|
||||
|
||||
my $accountline = Koha::Account::Lines->search({ borrowernumber => $guarantee->id })->next();
|
||||
|
|
|
|||
|
|
@ -62,18 +62,7 @@ subtest 'Test Koha::Checkout::claim_returned' => sub {
|
|||
plan tests => 6;
|
||||
|
||||
t::lib::Mocks::mock_preference( 'ClaimReturnedLostValue', 1 );
|
||||
my $biblio = $builder->build_object( { class => 'Koha::Biblios' } );
|
||||
my $item = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Items',
|
||||
value => {
|
||||
biblionumber => $biblio->biblionumber,
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
}
|
||||
}
|
||||
);
|
||||
my $item = $builder->build_sample_item;
|
||||
my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
|
||||
my $checkout = AddIssue( $patron->unblessed, $item->barcode );
|
||||
|
||||
|
|
@ -96,18 +85,7 @@ subtest 'Test Koha::Patronn::return_claims' => sub {
|
|||
plan tests => 7;
|
||||
|
||||
t::lib::Mocks::mock_preference( 'ClaimReturnedLostValue', 1 );
|
||||
my $biblio = $builder->build_object( { class => 'Koha::Biblios' } );
|
||||
my $item = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Items',
|
||||
value => {
|
||||
biblionumber => $biblio->biblionumber,
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
}
|
||||
}
|
||||
);
|
||||
my $item = $builder->build_sample_item;
|
||||
my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
|
||||
my $checkout = AddIssue( $patron->unblessed, $item->barcode );
|
||||
|
||||
|
|
|
|||
|
|
@ -104,53 +104,42 @@ subtest "AddReturn logging on statistics table (item-level_itypes=1)" => sub {
|
|||
MARC::Field->new($tagfield,'','', $tagsubfield => $blevel_itemtype )
|
||||
);
|
||||
my ( $biblionumber, $biblioitemnumber ) = AddBiblio( $record, '' );
|
||||
my $item_with_itemtype = $builder->build(
|
||||
my $item_with_itemtype = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
biblioitemnumber => $biblioitemnumber,
|
||||
homebranch => $branch,
|
||||
holdingbranch => $branch,
|
||||
itype => $ilevel_itemtype
|
||||
}
|
||||
biblionumber => $biblionumber,
|
||||
library => $branch,
|
||||
itype => $ilevel_itemtype
|
||||
}
|
||||
);
|
||||
my $item_without_itemtype = $builder->build(
|
||||
my $item_without_itemtype = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
biblioitemnumber => $biblioitemnumber,
|
||||
homebranch => $branch,
|
||||
holdingbranch => $branch,
|
||||
itype => undef
|
||||
}
|
||||
biblionumber => $biblionumber,
|
||||
library => $branch,
|
||||
}
|
||||
);
|
||||
)->_result->update({ itype => undef });
|
||||
|
||||
my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed;
|
||||
AddIssue( $borrower, $item_with_itemtype->{ barcode } );
|
||||
AddReturn( $item_with_itemtype->{ barcode }, $branch );
|
||||
AddIssue( $borrower, $item_with_itemtype->barcode );
|
||||
AddReturn( $item_with_itemtype->barcode, $branch );
|
||||
# Test item-level itemtype was recorded on the 'statistics' table
|
||||
my $stat = $schema->resultset('Statistic')->search({
|
||||
branch => $branch,
|
||||
type => 'return',
|
||||
itemnumber => $item_with_itemtype->{ itemnumber }
|
||||
itemnumber => $item_with_itemtype->itemnumber
|
||||
}, { order_by => { -asc => 'datetime' } })->next();
|
||||
|
||||
is( $stat->itemtype, $ilevel_itemtype,
|
||||
"item-level itype recorded on statistics for return");
|
||||
warning_like { AddIssue( $borrower, $item_without_itemtype->{ barcode } ) }
|
||||
warning_like { AddIssue( $borrower, $item_without_itemtype->barcode ) }
|
||||
[qr/^item-level_itypes set but no itemtype set for item/,
|
||||
qr/^item-level_itypes set but no itemtype set for item/],
|
||||
'Item without itemtype set raises warning on AddIssue';
|
||||
AddReturn( $item_without_itemtype->{ barcode }, $branch );
|
||||
AddReturn( $item_without_itemtype->barcode, $branch );
|
||||
# Test biblio-level itemtype was recorded on the 'statistics' table
|
||||
$stat = $schema->resultset('Statistic')->search({
|
||||
branch => $branch,
|
||||
type => 'return',
|
||||
itemnumber => $item_without_itemtype->{ itemnumber }
|
||||
itemnumber => $item_without_itemtype->itemnumber
|
||||
}, { order_by => { -asc => 'datetime' } })->next();
|
||||
|
||||
is( $stat->itemtype, $blevel_itemtype,
|
||||
|
|
@ -194,48 +183,42 @@ subtest "AddReturn logging on statistics table (item-level_itypes=0)" => sub {
|
|||
MARC::Field->new($tagfield,'','', $tagsubfield => $blevel_itemtype )
|
||||
);
|
||||
my ( $biblionumber, $biblioitemnumber ) = AddBiblio( $record, '' );
|
||||
my $item_with_itemtype = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
biblioitemnumber => $biblioitemnumber,
|
||||
homebranch => $branch,
|
||||
holdingbranch => $branch,
|
||||
itype => $ilevel_itemtype
|
||||
my $item_with_itemtype = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber,
|
||||
library => $branch,
|
||||
itype => $ilevel_itemtype
|
||||
}
|
||||
});
|
||||
my $item_without_itemtype = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
biblioitemnumber => $biblioitemnumber,
|
||||
homebranch => $branch,
|
||||
holdingbranch => $branch,
|
||||
itype => undef
|
||||
);
|
||||
my $item_without_itemtype = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber,
|
||||
library => $branch,
|
||||
itype => undef
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed;
|
||||
|
||||
AddIssue( $borrower, $item_with_itemtype->{ barcode } );
|
||||
AddReturn( $item_with_itemtype->{ barcode }, $branch );
|
||||
AddIssue( $borrower, $item_with_itemtype->barcode );
|
||||
AddReturn( $item_with_itemtype->barcode, $branch );
|
||||
# Test item-level itemtype was recorded on the 'statistics' table
|
||||
my $stat = $schema->resultset('Statistic')->search({
|
||||
branch => $branch,
|
||||
type => 'return',
|
||||
itemnumber => $item_with_itemtype->{ itemnumber }
|
||||
itemnumber => $item_with_itemtype->itemnumber
|
||||
}, { order_by => { -asc => 'datetime' } })->next();
|
||||
|
||||
is( $stat->itemtype, $blevel_itemtype,
|
||||
"biblio-level itype recorded on statistics for return");
|
||||
|
||||
AddIssue( $borrower, $item_without_itemtype->{ barcode } );
|
||||
AddReturn( $item_without_itemtype->{ barcode }, $branch );
|
||||
AddIssue( $borrower, $item_without_itemtype->barcode );
|
||||
AddReturn( $item_without_itemtype->barcode, $branch );
|
||||
# Test biblio-level itemtype was recorded on the 'statistics' table
|
||||
$stat = $schema->resultset('Statistic')->search({
|
||||
branch => $branch,
|
||||
type => 'return',
|
||||
itemnumber => $item_without_itemtype->{ itemnumber }
|
||||
itemnumber => $item_without_itemtype->itemnumber
|
||||
}, { order_by => { -asc => 'datetime' } })->next();
|
||||
|
||||
is( $stat->itemtype, $blevel_itemtype,
|
||||
|
|
@ -261,24 +244,16 @@ subtest 'Handle ids duplication' => sub {
|
|||
}
|
||||
);
|
||||
|
||||
my $biblio = $builder->build( { source => 'Biblio' } );
|
||||
my $itemtype = $builder->build( { source => 'Itemtype', value => { rentalcharge => 5 } } );
|
||||
my $item = $builder->build(
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
itype => $itemtype->{itemtype},
|
||||
}
|
||||
itype => $itemtype->{itemtype},
|
||||
}
|
||||
);
|
||||
my $patron = $builder->build({source => 'Borrower'});
|
||||
$patron = Koha::Patrons->find( $patron->{borrowernumber} );
|
||||
|
||||
my $original_checkout = AddIssue( $patron->unblessed, $item->{barcode}, dt_from_string->subtract( days => 50 ) );
|
||||
my $original_checkout = AddIssue( $patron->unblessed, $item->barcode, dt_from_string->subtract( days => 50 ) );
|
||||
my $issue_id = $original_checkout->issue_id;
|
||||
my $account_lines = Koha::Account::Lines->search({ borrowernumber => $patron->borrowernumber, issue_id => $issue_id });
|
||||
is( $account_lines->count, 1, '1 account line should exist for this issue_id' );
|
||||
|
|
@ -293,7 +268,7 @@ subtest 'Handle ids duplication' => sub {
|
|||
my ($doreturn, $messages, $new_checkout, $borrower);
|
||||
warning_like {
|
||||
( $doreturn, $messages, $new_checkout, $borrower ) =
|
||||
AddReturn( $item->{barcode}, undef, undef, undef, dt_from_string );
|
||||
AddReturn( $item->barcode, undef, undef, undef, dt_from_string );
|
||||
}
|
||||
[
|
||||
qr{.*DBD::mysql::st execute failed: Duplicate entry.*},
|
||||
|
|
@ -313,18 +288,7 @@ subtest 'Handle ids duplication' => sub {
|
|||
|
||||
subtest 'BlockReturnOfLostItems' => sub {
|
||||
plan tests => 4;
|
||||
my $biblio = $builder->build_object( { class => 'Koha::Biblios' } );
|
||||
my $item = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Items',
|
||||
value => {
|
||||
biblionumber => $biblio->biblionumber,
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
}
|
||||
}
|
||||
);
|
||||
my $item = $builder->build_sample_item;
|
||||
my $patron = $builder->build_object({class => 'Koha::Patrons'});
|
||||
my $checkout = AddIssue( $patron->unblessed, $item->barcode );
|
||||
|
||||
|
|
@ -348,18 +312,7 @@ subtest 'Checkin of an item claimed as returned should generate a message' => su
|
|||
plan tests => 1;
|
||||
|
||||
t::lib::Mocks::mock_preference('ClaimReturnedLostValue', 1);
|
||||
my $biblio = $builder->build_object( { class => 'Koha::Biblios' } );
|
||||
my $item = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Items',
|
||||
value => {
|
||||
biblionumber => $biblio->biblionumber,
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
}
|
||||
}
|
||||
);
|
||||
my $item = $builder->build_sample_item;
|
||||
my $patron = $builder->build_object({class => 'Koha::Patrons'});
|
||||
my $checkout = AddIssue( $patron->unblessed, $item->barcode );
|
||||
|
||||
|
|
@ -376,18 +329,7 @@ subtest 'BranchTransferLimitsType' => sub {
|
|||
t::lib::Mocks::mock_preference('UseBranchTransferLimits', 1);
|
||||
t::lib::Mocks::mock_preference('BranchTransferLimitsType', 'ccode');
|
||||
|
||||
my $biblio = $builder->build_object( { class => 'Koha::Biblios' } );
|
||||
my $item = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Items',
|
||||
value => {
|
||||
biblionumber => $biblio->biblionumber,
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
}
|
||||
}
|
||||
);
|
||||
my $item = $builder->build_sample_item;
|
||||
my $patron = $builder->build_object({class => 'Koha::Patrons'});
|
||||
my $checkout = AddIssue( $patron->unblessed, $item->barcode );
|
||||
my ( $doreturn, $messages, $issue ) = AddReturn($item->barcode);
|
||||
|
|
@ -406,17 +348,7 @@ subtest 'Backdated returns should reduce fine if needed' => sub {
|
|||
t::lib::Mocks::mock_preference( "CalculateFinesOnBackdate", 1 );
|
||||
|
||||
my $biblio = $builder->build_object( { class => 'Koha::Biblios' } );
|
||||
my $item = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Items',
|
||||
value => {
|
||||
biblionumber => $biblio->biblionumber,
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
}
|
||||
}
|
||||
);
|
||||
my $item = $builder->build_sample_item;
|
||||
my $patron = $builder->build_object({class => 'Koha::Patrons'});
|
||||
my $checkout = AddIssue( $patron->unblessed, $item->barcode );
|
||||
my $fine = Koha::Account::Line->new({
|
||||
|
|
|
|||
|
|
@ -45,34 +45,26 @@ subtest 'Test StoreLastBorrower' => sub {
|
|||
}
|
||||
);
|
||||
|
||||
my $item = $builder->build(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
},
|
||||
}
|
||||
);
|
||||
my $item = $builder->build_sample_item;
|
||||
|
||||
my $issue = $builder->build(
|
||||
{
|
||||
source => 'Issue',
|
||||
value => {
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
my $item_object = Koha::Items->find( $item->{itemnumber} );
|
||||
my $patron_object = $item_object->last_returned_by();
|
||||
$item = $item->get_from_storage;
|
||||
my $patron_object = $item->last_returned_by();
|
||||
is( $patron_object, undef, 'Koha::Item::last_returned_by returned undef' );
|
||||
|
||||
my ( $returned, undef, undef ) = C4::Circulation::AddReturn( $item->{barcode}, $patron->{branchcode}, undef, dt_from_string('2010-10-10') );
|
||||
my ( $returned, undef, undef ) = C4::Circulation::AddReturn( $item->barcode, $patron->{branchcode}, undef, dt_from_string('2010-10-10') );
|
||||
|
||||
$item_object = Koha::Items->find( $item->{itemnumber} );
|
||||
$patron_object = $item_object->last_returned_by();
|
||||
$item = $item->get_from_storage;
|
||||
$patron_object = $item->last_returned_by();
|
||||
is( ref($patron_object), 'Koha::Patron', 'Koha::Item::last_returned_by returned Koha::Patron' );
|
||||
|
||||
$patron = $builder->build(
|
||||
|
|
@ -87,15 +79,15 @@ subtest 'Test StoreLastBorrower' => sub {
|
|||
source => 'Issue',
|
||||
value => {
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
( $returned, undef, undef ) = C4::Circulation::AddReturn( $item->{barcode}, $patron->{branchcode}, undef, dt_from_string('2010-10-10') );
|
||||
( $returned, undef, undef ) = C4::Circulation::AddReturn( $item->barcode, $patron->{branchcode}, undef, dt_from_string('2010-10-10') );
|
||||
|
||||
$item_object = Koha::Items->find( $item->{itemnumber} );
|
||||
$patron_object = $item_object->last_returned_by();
|
||||
$item = $item->get_from_storage;
|
||||
$patron_object = $item->last_returned_by();
|
||||
is( $patron_object->id, $patron->{borrowernumber}, 'Second patron to return item replaces the first' );
|
||||
|
||||
$patron = $builder->build(
|
||||
|
|
@ -106,15 +98,15 @@ subtest 'Test StoreLastBorrower' => sub {
|
|||
);
|
||||
$patron_object = Koha::Patrons->find( $patron->{borrowernumber} );
|
||||
|
||||
$item_object->last_returned_by($patron_object);
|
||||
$item_object = Koha::Items->find( $item->{itemnumber} );
|
||||
my $patron_object2 = $item_object->last_returned_by();
|
||||
$item->last_returned_by($patron_object);
|
||||
$item = $item->get_from_storage;
|
||||
my $patron_object2 = $item->last_returned_by();
|
||||
is( $patron_object->id, $patron_object2->id,
|
||||
'Calling last_returned_by with Borrower object sets last_returned_by to that borrower' );
|
||||
|
||||
$patron_object->delete;
|
||||
$item_object = Koha::Items->find( $item->{itemnumber} );
|
||||
is( $item_object->last_returned_by, undef, 'last_returned_by should return undef if the last patron to return the item has been deleted' );
|
||||
$item = $item->get_from_storage;
|
||||
is( $item->last_returned_by, undef, 'last_returned_by should return undef if the last patron to return the item has been deleted' );
|
||||
|
||||
t::lib::Mocks::mock_preference( 'StoreLastBorrower', '0' );
|
||||
$patron = $builder->build(
|
||||
|
|
@ -129,14 +121,14 @@ subtest 'Test StoreLastBorrower' => sub {
|
|||
source => 'Issue',
|
||||
value => {
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
},
|
||||
}
|
||||
);
|
||||
( $returned, undef, undef ) = C4::Circulation::AddReturn( $item->{barcode}, $patron->{branchcode}, undef, dt_from_string('2010-10-10') );
|
||||
( $returned, undef, undef ) = C4::Circulation::AddReturn( $item->barcode, $patron->{branchcode}, undef, dt_from_string('2010-10-10') );
|
||||
|
||||
$item_object = Koha::Items->find( $item->{itemnumber} );
|
||||
is( $item_object->last_returned_by, undef, 'Last patron to return item should not be stored if StoreLastBorrower if off' );
|
||||
$item = $item->get_from_storage;
|
||||
is( $item->last_returned_by, undef, 'Last patron to return item should not be stored if StoreLastBorrower if off' );
|
||||
};
|
||||
|
||||
$schema->storage->txn_rollback;
|
||||
|
|
|
|||
|
|
@ -57,29 +57,11 @@ my $patron = $builder->build_object({
|
|||
});
|
||||
my $patron_unblessed = $patron->unblessed;
|
||||
|
||||
my $biblio = $builder->build({
|
||||
source => 'Biblio',
|
||||
value => {
|
||||
branchcode => $branch->{branchcode},
|
||||
},
|
||||
});
|
||||
$builder->build(
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Biblioitem',
|
||||
value => { biblionumber => $biblio->{biblionumber} }
|
||||
library => $branch->{branchcode},
|
||||
}
|
||||
);
|
||||
my $item = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
homebranch => $branch->{branchcode},
|
||||
holdingbranch => $branch->{branchcode},
|
||||
notforloan => 0,
|
||||
withdrawn => 0,
|
||||
lost => 0,
|
||||
},
|
||||
});
|
||||
|
||||
Koha::CirculationRules->search()->delete();
|
||||
Koha::CirculationRules->set_rules(
|
||||
|
|
@ -103,54 +85,45 @@ t::lib::Mocks::mock_userenv({ patron => $patron });
|
|||
t::lib::Mocks::mock_preference('AllowTooManyOverride', 0);
|
||||
|
||||
# Add onsite checkout
|
||||
C4::Circulation::AddIssue( $patron_unblessed, $item->{barcode}, dt_from_string, undef, dt_from_string, undef, { onsite_checkout => 1 } );
|
||||
C4::Circulation::AddIssue( $patron_unblessed, $item->barcode, dt_from_string, undef, dt_from_string, undef, { onsite_checkout => 1 } );
|
||||
|
||||
my ( $impossible, $messages );
|
||||
t::lib::Mocks::mock_preference('SwitchOnSiteCheckouts', 0);
|
||||
( $impossible, undef, undef, $messages ) = C4::Circulation::CanBookBeIssued( $patron, $item->{barcode} );
|
||||
( $impossible, undef, undef, $messages ) = C4::Circulation::CanBookBeIssued( $patron, $item->barcode );
|
||||
is( $impossible->{NO_RENEWAL_FOR_ONSITE_CHECKOUTS}, 1, 'Do not renew on-site checkouts' );
|
||||
|
||||
t::lib::Mocks::mock_preference('SwitchOnSiteCheckouts', 1);
|
||||
( $impossible, undef, undef, $messages ) = C4::Circulation::CanBookBeIssued( $patron, $item->{barcode} );
|
||||
( $impossible, undef, undef, $messages ) = C4::Circulation::CanBookBeIssued( $patron, $item->barcode );
|
||||
is( $messages->{ONSITE_CHECKOUT_WILL_BE_SWITCHED}, 1, 'If SwitchOnSiteCheckouts, switch the on-site checkout' );
|
||||
is( exists $impossible->{TOO_MANY}, '', 'If SwitchOnSiteCheckouts, switch the on-site checkout' );
|
||||
C4::Circulation::AddIssue( $patron_unblessed, $item->{barcode}, undef, undef, undef, undef, { switch_onsite_checkout => 1 } );
|
||||
my $issue = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } );
|
||||
C4::Circulation::AddIssue( $patron_unblessed, $item->barcode, undef, undef, undef, undef, { switch_onsite_checkout => 1 } );
|
||||
my $issue = Koha::Checkouts->find( { itemnumber => $item->itemnumber } );
|
||||
is( $issue->onsite_checkout, 0, 'The issue should have been switched to a regular checkout' );
|
||||
my $five_days_after = dt_from_string->add( days => 5 )->set( hour => 23, minute => 59, second => 0 );
|
||||
is( dt_from_string($issue->date_due, 'sql'), $five_days_after, 'The date_due should have been set depending on the circ rules when the on-site checkout has been switched' );
|
||||
|
||||
# Specific case
|
||||
t::lib::Mocks::mock_preference('ConsiderOnSiteCheckoutsAsNormalCheckouts', 1);
|
||||
my $another_item = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
homebranch => $branch->{branchcode},
|
||||
holdingbranch => $branch->{branchcode},
|
||||
notforloan => 0,
|
||||
withdrawn => 0,
|
||||
lost => 0,
|
||||
},
|
||||
});
|
||||
my $another_item = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $item->biblionumber,
|
||||
library => $branch->{branchcode},
|
||||
}
|
||||
);
|
||||
|
||||
C4::Circulation::AddIssue( $patron_unblessed, $another_item->{barcode}, dt_from_string, undef, dt_from_string, undef, { onsite_checkout => 1 } );
|
||||
( $impossible, undef, undef, $messages ) = C4::Circulation::CanBookBeIssued( $patron, $another_item->{barcode} );
|
||||
C4::Circulation::AddIssue( $patron_unblessed, $another_item->barcode, dt_from_string, undef, dt_from_string, undef, { onsite_checkout => 1 } );
|
||||
( $impossible, undef, undef, $messages ) = C4::Circulation::CanBookBeIssued( $patron, $another_item->barcode );
|
||||
is( $messages->{ONSITE_CHECKOUT_WILL_BE_SWITCHED}, 1, 'Specific case 1 - Switch is allowed' );
|
||||
is( exists $impossible->{TOO_MANY}, '', 'Specific case 1 - Switch is allowed' );
|
||||
|
||||
my $yet_another_item = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
homebranch => $branch->{branchcode},
|
||||
holdingbranch => $branch->{branchcode},
|
||||
notforloan => 0,
|
||||
withdrawn => 0,
|
||||
lost => 0,
|
||||
},
|
||||
});
|
||||
( $impossible, undef, undef, undef ) = C4::Circulation::CanBookBeIssued( $patron, $yet_another_item->{barcode} );
|
||||
my $yet_another_item = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $item->biblionumber,
|
||||
library => $branch->{branchcode},
|
||||
}
|
||||
);
|
||||
|
||||
( $impossible, undef, undef, undef ) = C4::Circulation::CanBookBeIssued( $patron, $yet_another_item->barcode );
|
||||
is( $impossible->{TOO_MANY}, 'TOO_MANY_CHECKOUTS', 'Not a specific case, $delta should not be incremented' );
|
||||
|
||||
Koha::CirculationRules->search()->delete();
|
||||
|
|
@ -165,7 +138,7 @@ Koha::CirculationRules->set_rules(
|
|||
}
|
||||
}
|
||||
);
|
||||
( $impossible, undef, undef, $messages ) = C4::Circulation::CanBookBeIssued( $patron, $another_item->{barcode} );
|
||||
( $impossible, undef, undef, $messages ) = C4::Circulation::CanBookBeIssued( $patron, $another_item->barcode );
|
||||
is( $messages->{ONSITE_CHECKOUT_WILL_BE_SWITCHED}, 1, 'Specific case 2 - Switch is allowed' );
|
||||
is( exists $impossible->{TOO_MANY}, '', 'Specific case 2 - Switch is allowed' );
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ subtest 'Tests for CalcDateDue related to dateexpiry' => sub {
|
|||
};
|
||||
|
||||
sub can_book_be_issued {
|
||||
my $item = $builder->build( { source => 'Item', value => { biblionumber => $builder->build( { source => 'Biblioitem' } )->{biblionumber} } } );
|
||||
my $item = $builder->build_sample_item;
|
||||
my $patron = $builder->build_object(
|
||||
{ class => 'Koha::Patrons',
|
||||
value => {
|
||||
|
|
@ -56,12 +56,12 @@ sub can_book_be_issued {
|
|||
}
|
||||
);
|
||||
my $duration = gettimeofday();
|
||||
my ( $issuingimpossible, $needsconfirmation ) = C4::Circulation::CanBookBeIssued( $patron, $item->{barcode} );
|
||||
my ( $issuingimpossible, $needsconfirmation ) = C4::Circulation::CanBookBeIssued( $patron, $item->barcode );
|
||||
$duration = gettimeofday() - $duration;
|
||||
cmp_ok $duration, '<', 1, "CanBookBeIssued should not be take more than 1s if the patron is expired";
|
||||
is( not( exists $issuingimpossible->{EXPIRED} ), 1, 'The patron should not be considered as expired if dateexpiry is 9999-*' );
|
||||
|
||||
$item = $builder->build( { source => 'Item', value => { biblionumber => $builder->build( { source => 'Biblioitem' } )->{biblionumber} } } );
|
||||
$item = $builder->build_sample_item;
|
||||
$patron = $builder->build_object(
|
||||
{ class => 'Koha::Patrons',
|
||||
value => {
|
||||
|
|
@ -70,11 +70,11 @@ sub can_book_be_issued {
|
|||
}
|
||||
}
|
||||
);
|
||||
( $issuingimpossible, $needsconfirmation ) = C4::Circulation::CanBookBeIssued( $patron, $item->{barcode} );
|
||||
( $issuingimpossible, $needsconfirmation ) = C4::Circulation::CanBookBeIssued( $patron, $item->barcode );
|
||||
is( not( exists $issuingimpossible->{EXPIRED} ), 1, 'The patron should not be considered as expired if dateexpiry is not set' );
|
||||
|
||||
my $tomorrow = dt_from_string->add_duration( DateTime::Duration->new( days => 1 ) );
|
||||
$item = $builder->build( { source => 'Item', value => { biblionumber => $builder->build( { source => 'Biblioitem' } )->{biblionumber} } } );
|
||||
$item = $builder->build_sample_item;
|
||||
$patron = $builder->build_object(
|
||||
{ class => 'Koha::Patrons',
|
||||
value => {
|
||||
|
|
@ -83,7 +83,7 @@ sub can_book_be_issued {
|
|||
},
|
||||
}
|
||||
);
|
||||
( $issuingimpossible, $needsconfirmation ) = C4::Circulation::CanBookBeIssued( $patron, $item->{barcode} );
|
||||
( $issuingimpossible, $needsconfirmation ) = C4::Circulation::CanBookBeIssued( $patron, $item->barcode );
|
||||
is( not( exists $issuingimpossible->{EXPIRED} ), 1, 'The patron should not be considered as expired if dateexpiry is tomorrow' );
|
||||
|
||||
}
|
||||
|
|
@ -99,20 +99,20 @@ sub calc_date_due {
|
|||
categorycode => $patron_category->{categorycode},
|
||||
}
|
||||
});
|
||||
my $item = $builder->build( { source => 'Item' } );
|
||||
my $item = $builder->build_sample_item;
|
||||
my $branch = $builder->build( { source => 'Branch' } );
|
||||
my $today = dt_from_string();
|
||||
|
||||
# first test with empty expiry date
|
||||
# note that this expiry date will never lead to an issue btw !!
|
||||
$patron->{dateexpiry} = '0000-00-00';
|
||||
my $d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron );
|
||||
my $d = C4::Circulation::CalcDateDue( $today, $item->effective_itemtype, $branch->{branchcode}, $patron );
|
||||
is( ref $d eq "DateTime" && $d->mdy() =~ /^\d+/, 1, "CalcDateDue with expiry 0000-00-00" );
|
||||
|
||||
# second test expiry date==today
|
||||
my $d2 = output_pref( { dt => $today, dateonly => 1, dateformat => 'sql' } );
|
||||
$patron->{dateexpiry} = $d2;
|
||||
$d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron );
|
||||
$d = C4::Circulation::CalcDateDue( $today, $item->effective_itemtype, $branch->{branchcode}, $patron );
|
||||
is( ref $d eq "DateTime" && DateTime->compare( $d->truncate( to => 'day' ), $today->truncate( to => 'day' ) ) == 0, 1, "CalcDateDue with expiry today" );
|
||||
|
||||
# third test expiry date tomorrow
|
||||
|
|
@ -120,13 +120,13 @@ sub calc_date_due {
|
|||
my $tomorrow = $today->clone->add_duration($dur);
|
||||
$d2 = output_pref( { dt => $tomorrow, dateonly => 1, dateformat => 'sql' } );
|
||||
$patron->{dateexpiry} = $d2;
|
||||
$d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron );
|
||||
$d = C4::Circulation::CalcDateDue( $today, $item->effective_itemtype, $branch->{branchcode}, $patron );
|
||||
is( ref $d eq "DateTime" && $d->mdy() =~ /^\d+/, 1, "CalcDateDue with expiry tomorrow" );
|
||||
|
||||
# fourth test far future
|
||||
$patron->{dateexpiry} = '9876-12-31';
|
||||
my $t1 = time;
|
||||
$d = C4::Circulation::CalcDateDue( $today, $item->{itype}, $branch->{branchcode}, $patron );
|
||||
$d = C4::Circulation::CalcDateDue( $today, $item->effective_itemtype, $branch->{branchcode}, $patron );
|
||||
my $t2 = time;
|
||||
is( ref $d eq "DateTime" && $t2 - $t1 < 1, 1, "CalcDateDue with expiry in year 9876 in " . sprintf( "%6.4f", $t2 - $t1 ) . " seconds." );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -492,22 +492,13 @@ sub create_dependent_objects {
|
|||
}
|
||||
|
||||
sub create_bib_and_item {
|
||||
my $biblio = $builder->build({
|
||||
source => 'Biblio',
|
||||
value => {
|
||||
title => 'Title',
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
itype => 'CD_foo',
|
||||
ccode => 'CD',
|
||||
location => 'HR',
|
||||
library => 'B1',
|
||||
}
|
||||
});
|
||||
my $item = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
itype => 'CD_foo',
|
||||
ccode => 'CD',
|
||||
location => 'HR',
|
||||
homebranch => 'B1',
|
||||
holdingbranch => 'B1',
|
||||
}
|
||||
});
|
||||
return ($biblio->{biblionumber}, $item->{itemnumber});
|
||||
);
|
||||
return ($item->biblionumber, $item->itemnumber);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,32 +63,25 @@ Koha::Biblio::Metadata->new( { biblionumber => $bad_biblio->id, format => 'marcx
|
|||
my $bad_biblionumber = $bad_biblio->id;
|
||||
|
||||
my $builder = t::lib::TestBuilder->new;
|
||||
my $item_1_1 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
my $item_1_1 = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber_1,
|
||||
more_subfields_xml => '',
|
||||
}
|
||||
});
|
||||
my $item_1_2 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
)->unblessed;
|
||||
my $item_1_2 = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber_1,
|
||||
more_subfields_xml => '',
|
||||
}
|
||||
});
|
||||
my $item_2_1 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
)->unblessed;
|
||||
my $item_2_1 = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber_2,
|
||||
more_subfields_xml => '',
|
||||
}
|
||||
});
|
||||
my $bad_item = $builder->build({
|
||||
)->unblessed;
|
||||
my $bad_item = $builder->build({ # Cannot call build_sample_item, we want inconsistent data on purpose
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $bad_biblionumber,
|
||||
more_subfields_xml => '',
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -223,24 +216,16 @@ subtest '_get_biblio_for_export' => sub {
|
|||
my ( $biblionumber, $biblioitemnumber ) = AddBiblio( $biblio, '' );
|
||||
my $branch_a = $builder->build({source => 'Branch',});
|
||||
my $branch_b = $builder->build({source => 'Branch',});
|
||||
my $item_branch_a = $builder->build(
|
||||
my $item_branch_a = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
homebranch => $branch_a->{branchcode},
|
||||
more_subfields_xml => '',
|
||||
}
|
||||
biblionumber => $biblionumber,
|
||||
library => $branch_a->{branchcode},
|
||||
}
|
||||
);
|
||||
my $item_branch_b = $builder->build(
|
||||
my $item_branch_b = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
homebranch => $branch_b->{branchcode},
|
||||
more_subfields_xml => '',
|
||||
}
|
||||
biblionumber => $biblionumber,
|
||||
library => $branch_b->{branchcode},
|
||||
}
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ my $library2 = $builder->build({
|
|||
my $library3 = $builder->build({
|
||||
source => 'Branch',
|
||||
});
|
||||
my $itemtype = $builder->build({ source => 'Item' })->{itype};
|
||||
my $itemtype = $builder->build_sample_item->itype;
|
||||
|
||||
my $bib_title = "Test Title";
|
||||
|
||||
|
|
|
|||
|
|
@ -59,57 +59,15 @@ my $patron2 = $builder->build({
|
|||
},
|
||||
});
|
||||
|
||||
my $biblio = $builder->build({
|
||||
source => 'Biblio',
|
||||
value => {
|
||||
title => 'Title 1', },
|
||||
});
|
||||
my $biblio = $builder->build_sample_biblio;
|
||||
my $biblio2 = $builder->build_sample_biblio;
|
||||
my $biblio3 = $builder->build_sample_biblio;
|
||||
my $biblio4 = $builder->build_sample_biblio;
|
||||
|
||||
my $biblio2 = $builder->build({
|
||||
source => 'Biblio',
|
||||
value => {
|
||||
title => 'Title 2', },
|
||||
});
|
||||
|
||||
my $biblio3 = $builder->build({
|
||||
source => 'Biblio',
|
||||
value => {
|
||||
title => 'Title 3', },
|
||||
});
|
||||
|
||||
my $biblio4 = $builder->build({
|
||||
source => 'Biblio',
|
||||
value => {
|
||||
title => 'Title 4', },
|
||||
});
|
||||
|
||||
my $item1 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
},
|
||||
});
|
||||
|
||||
my $item2 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio2->{biblionumber},
|
||||
},
|
||||
});
|
||||
|
||||
my $item3 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio3->{biblionumber},
|
||||
},
|
||||
});
|
||||
|
||||
my $item4 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio4->{biblionumber},
|
||||
},
|
||||
});
|
||||
my $item1 = $builder->build_sample_item({biblionumber => $biblio->biblionumber});
|
||||
my $item2 = $builder->build_sample_item({biblionumber => $biblio2->biblionumber});
|
||||
my $item3 = $builder->build_sample_item({biblionumber => $biblio3->biblionumber});
|
||||
my $item4 = $builder->build_sample_item({biblionumber => $biblio4->biblionumber});
|
||||
|
||||
my $today = dt_from_string();
|
||||
|
||||
|
|
@ -125,7 +83,7 @@ my $reserve1 = $builder->build({
|
|||
borrowernumber => $patron1->{borrowernumber},
|
||||
reservedate => $reserve1_reservedate->ymd,
|
||||
expirationdate => undef,
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
biblionumber => $biblio->biblionumber,
|
||||
branchcode => 'LIB1',
|
||||
priority => 1,
|
||||
found => '',
|
||||
|
|
@ -135,14 +93,14 @@ my $reserve1 = $builder->build({
|
|||
t::lib::Mocks::mock_preference('ExpireReservesMaxPickUpDelay', 1);
|
||||
t::lib::Mocks::mock_preference('ReservesMaxPickUpDelay', 6);
|
||||
|
||||
ModReserveAffect( $item1->{itemnumber}, $patron1->{borrowernumber});
|
||||
ModReserveAffect( $item1->itemnumber, $patron1->{borrowernumber});
|
||||
my $r = Koha::Holds->find($reserve1->{reserve_id});
|
||||
|
||||
is($r->waitingdate, $today->ymd, 'Waiting date should be set to today' );
|
||||
is($r->expirationdate, $reserve1_expirationdate->ymd, 'Expiration date should be set to today + 6' );
|
||||
is($r->found, 'W', 'Reserve status is now "waiting"' );
|
||||
is($r->priority, 0, 'Priority should be 0' );
|
||||
is($r->itemnumber, $item1->{itemnumber}, 'Item number should be set correctly' );
|
||||
is($r->itemnumber, $item1->itemnumber, 'Item number should be set correctly' );
|
||||
|
||||
my $reserve2 = $builder->build({
|
||||
source => 'Reserve',
|
||||
|
|
@ -150,19 +108,19 @@ my $reserve2 = $builder->build({
|
|||
borrowernumber => $patron2->{borrowernumber},
|
||||
reservedate => $reserve1_reservedate->ymd,
|
||||
expirationdate => undef,
|
||||
biblionumber => $biblio2->{biblionumber},
|
||||
biblionumber => $biblio2->biblionumber,
|
||||
branchcode => 'LIB1',
|
||||
priority => 1,
|
||||
found => '',
|
||||
},
|
||||
});
|
||||
|
||||
ModReserveAffect( $item2->{itemnumber}, $patron2->{borrowernumber}, 1);
|
||||
ModReserveAffect( $item2->itemnumber, $patron2->{borrowernumber}, 1);
|
||||
my $r2 = Koha::Holds->find($reserve2->{reserve_id});
|
||||
|
||||
is($r2->found, 'T', '2nd reserve - Reserve status is now "To transfer"' );
|
||||
is($r2->priority, 0, '2nd reserve - Priority should be 0' );
|
||||
is($r2->itemnumber, $item2->{itemnumber}, '2nd reserve - Item number should be set correctly' );
|
||||
is($r2->itemnumber, $item2->itemnumber, '2nd reserve - Item number should be set correctly' );
|
||||
|
||||
my $reserve3 = $builder->build({
|
||||
source => 'Reserve',
|
||||
|
|
@ -170,7 +128,7 @@ my $reserve3 = $builder->build({
|
|||
borrowernumber => $patron2->{borrowernumber},
|
||||
reservedate => $reserve1_reservedate->ymd,
|
||||
expirationdate => undef,
|
||||
biblionumber => $biblio3->{biblionumber},
|
||||
biblionumber => $biblio3->biblionumber,
|
||||
branchcode => 'LIB1',
|
||||
priority => 1,
|
||||
found => '',
|
||||
|
|
@ -210,7 +168,7 @@ my $holiday2 = $builder->build({
|
|||
Koha::Caches->get_instance->flush_all;
|
||||
|
||||
t::lib::Mocks::mock_preference('ExcludeHolidaysFromMaxPickUpDelay', 1);
|
||||
ModReserveAffect( $item3->{itemnumber}, $patron2->{borrowernumber});
|
||||
ModReserveAffect( $item3->itemnumber, $patron2->{borrowernumber});
|
||||
|
||||
# Add 6 days of pickup delay + 1 day of holiday.
|
||||
my $expected_expiration = $today->clone;
|
||||
|
|
@ -228,7 +186,7 @@ my $reserve4 = $builder->build({
|
|||
borrowernumber => $patron2->{borrowernumber},
|
||||
reservedate => $reserve4_reservedate->ymd,
|
||||
expirationdate => $requested_expiredate->ymd,
|
||||
biblionumber => $biblio4->{biblionumber},
|
||||
biblionumber => $biblio4->biblionumber,
|
||||
branchcode => 'LIB1',
|
||||
priority => 1,
|
||||
found => '',
|
||||
|
|
@ -236,7 +194,7 @@ my $reserve4 = $builder->build({
|
|||
});
|
||||
|
||||
t::lib::Mocks::mock_preference('ReservesMaxPickUpDelay', 10);
|
||||
ModReserveAffect( $item4->{itemnumber}, $patron2->{borrowernumber}, 0, $reserve4->{reserve_id});
|
||||
ModReserveAffect( $item4->itemnumber, $patron2->{borrowernumber}, 0, $reserve4->{reserve_id});
|
||||
|
||||
my $r4 = Koha::Holds->find($reserve4->{reserve_id});
|
||||
is($r4->expirationdate, $requested_expiredate->ymd, 'Requested expiration date should be kept' );
|
||||
|
|
|
|||
|
|
@ -310,77 +310,47 @@ subtest 'Holds test' => sub {
|
|||
source => 'Borrower',
|
||||
});
|
||||
|
||||
my $biblio = $builder->build({
|
||||
source => 'Biblio',
|
||||
});
|
||||
|
||||
my $biblioitems = $builder->build({
|
||||
source => 'Biblioitem',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
}
|
||||
});
|
||||
|
||||
my $item = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
damaged => 1
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
my $query = new CGI;
|
||||
$query->param( 'patron_id', $patron->{borrowernumber});
|
||||
$query->param( 'bib_id', $biblio->{biblionumber});
|
||||
$query->param( 'bib_id', $item->biblionumber);
|
||||
|
||||
my $reply = C4::ILSDI::Services::HoldTitle( $query );
|
||||
is( $reply->{code}, 'damaged', "Item damaged" );
|
||||
|
||||
my $item_o = Koha::Items->find($item->{itemnumber});
|
||||
$item_o->damaged(0)->store;
|
||||
$item->damaged(0)->store;
|
||||
|
||||
my $hold = $builder->build({
|
||||
source => 'Reserve',
|
||||
value => {
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
itemnumber => $item->{itemnumber}
|
||||
biblionumber => $item->biblionumber,
|
||||
itemnumber => $item->itemnumber
|
||||
}
|
||||
});
|
||||
|
||||
$reply = C4::ILSDI::Services::HoldTitle( $query );
|
||||
is( $reply->{code}, 'itemAlreadyOnHold', "Item already on hold" );
|
||||
|
||||
my $biblio_with_no_item = $builder->build({
|
||||
source => 'Biblio',
|
||||
});
|
||||
my $biblio_with_no_item = $builder->build_sample_biblio;
|
||||
|
||||
$query = new CGI;
|
||||
$query->param( 'patron_id', $patron->{borrowernumber});
|
||||
$query->param( 'bib_id', $biblio_with_no_item->{biblionumber});
|
||||
$query->param( 'bib_id', $biblio_with_no_item->biblionumber);
|
||||
|
||||
$reply = C4::ILSDI::Services::HoldTitle( $query );
|
||||
is( $reply->{code}, 'NoItems', 'Biblio has no item' );
|
||||
|
||||
my $biblio2 = $builder->build({
|
||||
source => 'Biblio',
|
||||
});
|
||||
|
||||
my $biblioitems2 = $builder->build({
|
||||
source => 'Biblioitem',
|
||||
value => {
|
||||
biblionumber => $biblio2->{biblionumber},
|
||||
}
|
||||
});
|
||||
|
||||
my $item2 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio2->{biblionumber},
|
||||
my $item2 = $builder->build_sample_item(
|
||||
{
|
||||
damaged => 0,
|
||||
itype => $builder->build_object({ class => 'Koha::ItemTypes' })->itemtype,
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
t::lib::Mocks::mock_preference( 'ReservesControlBranch', 'PatronLibrary' );
|
||||
Koha::CirculationRules->set_rule(
|
||||
|
|
@ -395,41 +365,25 @@ subtest 'Holds test' => sub {
|
|||
|
||||
$query = new CGI;
|
||||
$query->param( 'patron_id', $patron->{borrowernumber});
|
||||
$query->param( 'bib_id', $biblio2->{biblionumber});
|
||||
$query->param( 'item_id', $item2->{itemnumber});
|
||||
$query->param( 'bib_id', $item2->biblionumber);
|
||||
$query->param( 'item_id', $item2->itemnumber);
|
||||
|
||||
$reply = C4::ILSDI::Services::HoldItem( $query );
|
||||
is( $reply->{code}, 'tooManyReserves', "Too many reserves" );
|
||||
|
||||
my $biblio3 = $builder->build({
|
||||
source => 'Biblio',
|
||||
});
|
||||
|
||||
my $biblioitems3 = $builder->build({
|
||||
source => 'Biblioitem',
|
||||
value => {
|
||||
biblionumber => $biblio3->{biblionumber},
|
||||
}
|
||||
});
|
||||
|
||||
# Adding a holdable item to biblio 3.
|
||||
my $item3 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio3->{biblionumber},
|
||||
my $item3 = $builder->build_sample_item(
|
||||
{
|
||||
damaged => 0,
|
||||
itype => $builder->build_object({ class => 'Koha::ItemTypes' })->itemtype,
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
my $item4 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio3->{biblionumber},
|
||||
damaged => 1,
|
||||
itype => $builder->build_object({ class => 'Koha::ItemTypes' })->itemtype,
|
||||
my $item4 = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $item3->biblionumber,
|
||||
damaged => 1,
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
Koha::CirculationRules->set_rule(
|
||||
{
|
||||
|
|
@ -443,8 +397,8 @@ subtest 'Holds test' => sub {
|
|||
|
||||
$query = new CGI;
|
||||
$query->param( 'patron_id', $patron->{borrowernumber});
|
||||
$query->param( 'bib_id', $biblio3->{biblionumber});
|
||||
$query->param( 'item_id', $item4->{itemnumber});
|
||||
$query->param( 'bib_id', $item3->biblionumber);
|
||||
$query->param( 'item_id', $item4->itemnumber);
|
||||
|
||||
$reply = C4::ILSDI::Services::HoldItem( $query );
|
||||
is( $reply->{code}, 'damaged', "Item is damaged" );
|
||||
|
|
@ -483,26 +437,11 @@ subtest 'Holds test for branch transfer limits' => sub {
|
|||
}
|
||||
);
|
||||
|
||||
my $biblio = $builder->build({
|
||||
source => 'Biblio',
|
||||
});
|
||||
my $biblioitem = $builder->build({
|
||||
source => 'Biblioitem',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
library => $origin_branch->{branchcode},
|
||||
}
|
||||
});
|
||||
my $item = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
homebranch => $origin_branch->{branchcode},
|
||||
holdingbranch => $origin_branch->{branchcode},
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
damaged => 0,
|
||||
itemlost => 0,
|
||||
itype => $builder->build_object({ class => 'Koha::ItemTypes' })->itemtype,
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
Koha::CirculationRules->set_rule(
|
||||
{
|
||||
|
|
@ -516,15 +455,15 @@ subtest 'Holds test for branch transfer limits' => sub {
|
|||
|
||||
my $limit = Koha::Item::Transfer::Limit->new({
|
||||
toBranch => $pickup_branch->{branchcode},
|
||||
fromBranch => $item->{holdingbranch},
|
||||
itemtype => $item->{itype},
|
||||
fromBranch => $item->holdingbranch,
|
||||
itemtype => $item->effective_itemtype,
|
||||
})->store();
|
||||
|
||||
my $query = new CGI;
|
||||
$query->param( 'pickup_location', $pickup_branch->{branchcode} );
|
||||
$query->param( 'patron_id', $patron->{borrowernumber});
|
||||
$query->param( 'bib_id', $biblio->{biblionumber});
|
||||
$query->param( 'item_id', $item->{itemnumber});
|
||||
$query->param( 'bib_id', $item->biblionumber);
|
||||
$query->param( 'item_id', $item->itemnumber);
|
||||
|
||||
my $reply = C4::ILSDI::Services::HoldItem( $query );
|
||||
is( $reply->{code}, 'cannotBeTransferred', "Item hold, Item cannot be transferred" );
|
||||
|
|
@ -536,14 +475,14 @@ subtest 'Holds test for branch transfer limits' => sub {
|
|||
|
||||
$reply = C4::ILSDI::Services::HoldItem( $query );
|
||||
is( $reply->{code}, undef, "Item hold, Item can be transferred" );
|
||||
my $hold = Koha::Holds->search({ itemnumber => $item->{itemnumber}, borrowernumber => $patron->{borrowernumber} })->next;
|
||||
my $hold = Koha::Holds->search({ itemnumber => $item->itemnumber, borrowernumber => $patron->{borrowernumber} })->next;
|
||||
is( $hold->branchcode, $pickup_branch->{branchcode}, 'The library id is correctly set' );
|
||||
|
||||
Koha::Holds->search()->delete();
|
||||
|
||||
$reply = C4::ILSDI::Services::HoldTitle( $query );
|
||||
is( $reply->{code}, undef, "Record hold, Item con be transferred" );
|
||||
$hold = Koha::Holds->search({ biblionumber => $biblio->{biblionumber}, borrowernumber => $patron->{borrowernumber} })->next;
|
||||
$hold = Koha::Holds->search({ biblionumber => $item->biblionumber, borrowernumber => $patron->{borrowernumber} })->next;
|
||||
is( $hold->branchcode, $pickup_branch->{branchcode}, 'The library id is correctly set' );
|
||||
|
||||
$schema->storage->txn_rollback;
|
||||
|
|
@ -622,30 +561,17 @@ subtest 'GetRecords' => sub {
|
|||
source => 'Branch',
|
||||
});
|
||||
|
||||
my $biblio = $builder->build({
|
||||
source => 'Biblio',
|
||||
});
|
||||
my $biblioitem = $builder->build({
|
||||
source => 'Biblioitem',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
},
|
||||
});
|
||||
my $item = $builder->build_object({
|
||||
class => 'Koha::Items',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
biblioitemnumber => $biblioitem->{biblioitemnumber},
|
||||
homebranch => $branch1->{branchcode},
|
||||
holdingbranch => $branch1->{branchcode},
|
||||
},
|
||||
});
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
library => $branch1->{branchcode},
|
||||
}
|
||||
);
|
||||
|
||||
ModItemTransfer($item->itemnumber, $branch1->{branchcode}, $branch2->{branchcode});
|
||||
|
||||
my $cgi = new CGI;
|
||||
$cgi->param(service => 'GetRecords');
|
||||
$cgi->param(id => $biblio->{biblionumber});
|
||||
$cgi->param(id => $item->biblionumber);
|
||||
|
||||
my $reply = C4::ILSDI::Services::GetRecords($cgi);
|
||||
|
||||
|
|
@ -668,7 +594,7 @@ subtest 'RenewHold' => sub {
|
|||
|
||||
my $cgi = new CGI;
|
||||
my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
|
||||
my $item = $builder->build_object( { class => 'Koha::Items' } );
|
||||
my $item = $builder->build_sample_item;
|
||||
$cgi->param( patron_id => $patron->borrowernumber );
|
||||
$cgi->param( item_id => $item->itemnumber );
|
||||
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ is_deeply( $record_from_import_biblio_without_items, $original_record, 'GetRecor
|
|||
# Add a few tests for GetItemNumbersFromImportBatch
|
||||
my @a = GetItemNumbersFromImportBatch( $id_import_batch1 );
|
||||
is( @a, 0, 'No item numbers expected since we did not commit' );
|
||||
my $itemno = $builder->build({ source => 'Item' })->{itemnumber};
|
||||
my $itemno = $builder->build_sample_item->itemnumber;
|
||||
# Link this item to the import item to fool GetItemNumbersFromImportBatch
|
||||
my $sql = "UPDATE import_items SET itemnumber=? WHERE import_record_id=?";
|
||||
$dbh->do( $sql, undef, $itemno, $import_record_id );
|
||||
|
|
|
|||
|
|
@ -870,14 +870,14 @@ subtest 'Check stockrotationitem relationship' => sub {
|
|||
$schema->storage->txn_begin();
|
||||
|
||||
my $builder = t::lib::TestBuilder->new;
|
||||
my $item = $builder->build({ source => 'Item' });
|
||||
my $item = $builder->build_sample_item;
|
||||
|
||||
$builder->build({
|
||||
source => 'Stockrotationitem',
|
||||
value => { itemnumber_id => $item->{itemnumber} }
|
||||
value => { itemnumber_id => $item->itemnumber }
|
||||
});
|
||||
|
||||
my $sritem = Koha::Items->find($item->{itemnumber})->stockrotationitem;
|
||||
my $sritem = Koha::Items->find($item->itemnumber)->stockrotationitem;
|
||||
isa_ok( $sritem, 'Koha::StockRotationItem', "Relationship works and correctly creates Koha::Object." );
|
||||
|
||||
$schema->storage->txn_rollback;
|
||||
|
|
@ -889,7 +889,7 @@ subtest 'Check add_to_rota method' => sub {
|
|||
$schema->storage->txn_begin();
|
||||
|
||||
my $builder = t::lib::TestBuilder->new;
|
||||
my $item = $builder->build({ source => 'Item' });
|
||||
my $item = $builder->build_sample_item;
|
||||
my $rota = $builder->build({ source => 'Stockrotationrota' });
|
||||
my $srrota = Koha::StockRotationRotas->find($rota->{rota_id});
|
||||
|
||||
|
|
@ -898,11 +898,11 @@ subtest 'Check add_to_rota method' => sub {
|
|||
value => { rota_id => $rota->{rota_id} },
|
||||
});
|
||||
|
||||
my $sritem = Koha::Items->find($item->{itemnumber});
|
||||
my $sritem = Koha::Items->find($item->itemnumber);
|
||||
$sritem->add_to_rota($rota->{rota_id});
|
||||
|
||||
is(
|
||||
Koha::StockRotationItems->find($item->{itemnumber})->stage_id,
|
||||
Koha::StockRotationItems->find($item->itemnumber)->stage_id,
|
||||
$srrota->stockrotationstages->next->stage_id,
|
||||
"Adding to a rota a new sritem item being assigned to its first stage."
|
||||
);
|
||||
|
|
@ -919,7 +919,7 @@ subtest 'Check add_to_rota method' => sub {
|
|||
$sritem->add_to_rota($newrota->{rota_id});
|
||||
|
||||
is(
|
||||
Koha::StockRotationItems->find($item->{itemnumber})->stage_id,
|
||||
Koha::StockRotationItems->find($item->itemnumber)->stage_id,
|
||||
$srnewrota->stockrotationstages->next->stage_id,
|
||||
"Moving an item results in that sritem being assigned to the new first stage."
|
||||
);
|
||||
|
|
@ -932,8 +932,7 @@ subtest 'Split subfields in Item2Marc (Bug 21774)' => sub {
|
|||
$schema->storage->txn_begin;
|
||||
|
||||
my $builder = t::lib::TestBuilder->new;
|
||||
my $biblio = $builder->build({ source => 'Biblio', value => { frameworkcode => q{} } });
|
||||
my $item = $builder->build({ source => 'Item', value => { biblionumber => $biblio->{biblionumber}, ccode => 'A|B' } });
|
||||
my $item = $builder->build_sample_item({ ccode => 'A|B' });
|
||||
|
||||
Koha::MarcSubfieldStructures->search({ tagfield => '952', tagsubfield => '8' })->delete; # theoretical precaution
|
||||
Koha::MarcSubfieldStructures->search({ kohafield => 'items.ccode' })->delete;
|
||||
|
|
@ -949,7 +948,7 @@ subtest 'Split subfields in Item2Marc (Bug 21774)' => sub {
|
|||
Koha::Caches->get_instance->clear_from_cache( "MarcSubfieldStructure-" );
|
||||
|
||||
# Start testing
|
||||
my $marc = C4::Items::Item2Marc( $item, $biblio->{biblionumber} );
|
||||
my $marc = C4::Items::Item2Marc( $item->unblessed, $item->biblionumber );
|
||||
my @subs = $marc->subfield( $mapping->tagfield, $mapping->tagsubfield );
|
||||
is( @subs, 2, 'Expect two subfields' );
|
||||
is( $subs[0], 'A', 'First subfield matches' );
|
||||
|
|
|
|||
|
|
@ -14,14 +14,14 @@ subtest 'GetHostItemsInfo' => sub {
|
|||
plan tests => 3;
|
||||
|
||||
my $builder = t::lib::TestBuilder->new;
|
||||
my $bib1 = $builder->build({ source => 'Biblio' });
|
||||
my $itm1 = $builder->build({ source => 'Item', value => { biblionumber => $bib1->{biblionumber} }});
|
||||
my $itm2 = $builder->build({ source => 'Item', value => { biblionumber => $bib1->{biblionumber} }});
|
||||
my $bib1 = $builder->build_sample_biblio;
|
||||
my $itm1 = $builder->build_sample_item({ biblionumber => $bib1->biblionumber });
|
||||
my $itm2 = $builder->build_sample_item({ biblionumber => $bib1->biblionumber });
|
||||
my $marc = MARC::Record->new;
|
||||
$marc->append_fields(
|
||||
MARC::Field->new( '461', '', '', 0 => $bib1->{biblionumber}, 9 => $itm1->{itemnumber} ),
|
||||
MARC::Field->new( '773', '', '', 0 => $bib1->{biblionumber}, 9 => $itm1->{itemnumber} ),
|
||||
MARC::Field->new( '773', '', '', 0 => $bib1->{biblionumber}, 9 => $itm2->{itemnumber} ),
|
||||
MARC::Field->new( '461', '', '', 0 => $bib1->biblionumber, 9 => $itm1->itemnumber ),
|
||||
MARC::Field->new( '773', '', '', 0 => $bib1->biblionumber, 9 => $itm1->itemnumber ),
|
||||
MARC::Field->new( '773', '', '', 0 => $bib1->biblionumber, 9 => $itm2->itemnumber ),
|
||||
);
|
||||
|
||||
t::lib::Mocks::mock_preference('marcflavour', 'MARC21');
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ subtest 'Use cn_sort rather than callnumber to determine correct location' => su
|
|||
class_source => $class_source->{cn_source},
|
||||
});
|
||||
|
||||
my $item_1 = $builder->build({
|
||||
my $item_1 = $builder->build({ # Cannot call build_sample_item or cn_sort will be replaced by Koha::Item->store
|
||||
source => 'Item',
|
||||
value => {
|
||||
itemcallnumber => 'GT95',
|
||||
|
|
|
|||
|
|
@ -31,69 +31,55 @@ my $schema = Koha::Database->new->schema;
|
|||
$schema->storage->txn_begin;
|
||||
my $builder = t::lib::TestBuilder->new;
|
||||
|
||||
# NOTE This is a trick, if we want to populate the biblioitems table, we should not create a Biblio but a Biblioitem
|
||||
my $param = { source => 'Biblioitem' };
|
||||
my $from_biblio = {
|
||||
biblionumber => $builder->build($param)->{biblionumber},
|
||||
};
|
||||
my $to_biblio = {
|
||||
biblionumber => $builder->build($param)->{biblionumber},
|
||||
};
|
||||
my $from_biblio = $builder->build_sample_biblio;
|
||||
my $to_biblio = $builder->build_sample_biblio;
|
||||
|
||||
my $item1 = $builder->build_sample_item(
|
||||
{ biblionumber => $from_biblio->biblionumber, } );
|
||||
my $item2 = $builder->build_sample_item(
|
||||
{ biblionumber => $from_biblio->biblionumber, } );
|
||||
my $item3 = $builder->build_sample_item(
|
||||
{ biblionumber => $to_biblio->biblionumber, } );
|
||||
|
||||
my $item1 = $builder->build(
|
||||
{ source => 'Item',
|
||||
value => { biblionumber => $from_biblio->{biblionumber}, },
|
||||
}
|
||||
);
|
||||
my $item2 = $builder->build(
|
||||
{ source => 'Item',
|
||||
value => { biblionumber => $from_biblio->{biblionumber}, },
|
||||
}
|
||||
);
|
||||
my $item3 = $builder->build(
|
||||
{ source => 'Item',
|
||||
value => { biblionumber => $to_biblio->{biblionumber}, },
|
||||
}
|
||||
);
|
||||
|
||||
my $bib_level_hold_not_to_move = $builder->build(
|
||||
{ source => 'Reserve',
|
||||
value => { biblionumber => $from_biblio->{biblionumber}, },
|
||||
value => { biblionumber => $from_biblio->biblionumber, },
|
||||
}
|
||||
);
|
||||
my $item_level_hold_not_to_move = $builder->build(
|
||||
{ source => 'Reserve',
|
||||
value => { biblionumber => $from_biblio->{biblionumber}, itemnumber => $item1->{itemnumber} },
|
||||
value => { biblionumber => $from_biblio->biblionumber, itemnumber => $item1->itemnumber },
|
||||
}
|
||||
);
|
||||
my $item_level_hold_to_move = $builder->build(
|
||||
{ source => 'Reserve',
|
||||
value => { biblionumber => $from_biblio->{biblionumber}, itemnumber => $item2->{itemnumber} },
|
||||
value => { biblionumber => $from_biblio->biblionumber, itemnumber => $item2->itemnumber },
|
||||
}
|
||||
);
|
||||
|
||||
my $to_biblionumber_after_moved = C4::Items::MoveItemFromBiblio( $item2->{itemnumber}, $from_biblio->{biblionumber}, $to_biblio->{biblionumber} );
|
||||
my $to_biblionumber_after_moved = C4::Items::MoveItemFromBiblio( $item2->itemnumber, $from_biblio->biblionumber, $to_biblio->biblionumber );
|
||||
|
||||
is( $to_biblionumber_after_moved, $to_biblio->{biblionumber}, 'MoveItemFromBiblio should return the to_biblionumber if success' );
|
||||
is( $to_biblionumber_after_moved, $to_biblio->biblionumber, 'MoveItemFromBiblio should return the to_biblionumber if success' );
|
||||
|
||||
$to_biblionumber_after_moved = C4::Items::MoveItemFromBiblio( $item2->{itemnumber}, $from_biblio->{biblionumber}, $to_biblio->{biblionumber} );
|
||||
$to_biblionumber_after_moved = C4::Items::MoveItemFromBiblio( $item2->itemnumber, $from_biblio->biblionumber, $to_biblio->biblionumber );
|
||||
|
||||
is( $to_biblionumber_after_moved, undef, 'MoveItemFromBiblio should return undef if the move has failed. If called twice, the item is not attached to the first biblio anymore' );
|
||||
|
||||
my $get_item1 = Koha::Items->find( $item1->{itemnumber} );
|
||||
is( $get_item1->biblionumber, $from_biblio->{biblionumber}, 'The item1 should not have been moved' );
|
||||
my $get_item2 = Koha::Items->find( $item2->{itemnumber} );
|
||||
is( $get_item2->biblionumber, $to_biblio->{biblionumber}, 'The item2 should have been moved' );
|
||||
my $get_item3 = Koha::Items->find( $item3->{itemnumber} );
|
||||
is( $get_item3->biblionumber, $to_biblio->{biblionumber}, 'The item3 should not have been moved' );
|
||||
my $get_item1 = Koha::Items->find( $item1->itemnumber );
|
||||
is( $get_item1->biblionumber, $from_biblio->biblionumber, 'The item1 should not have been moved' );
|
||||
my $get_item2 = Koha::Items->find( $item2->itemnumber );
|
||||
is( $get_item2->biblionumber, $to_biblio->biblionumber, 'The item2 should have been moved' );
|
||||
my $get_item3 = Koha::Items->find( $item3->itemnumber );
|
||||
is( $get_item3->biblionumber, $to_biblio->biblionumber, 'The item3 should not have been moved' );
|
||||
|
||||
my $get_bib_level_hold = Koha::Holds->find( $bib_level_hold_not_to_move->{reserve_id} );
|
||||
my $get_item_level_hold_1 = Koha::Holds->find( $item_level_hold_not_to_move->{reserve_id} );
|
||||
my $get_item_level_hold_2 = Koha::Holds->find( $item_level_hold_to_move->{reserve_id} );
|
||||
|
||||
is( $get_bib_level_hold->biblionumber, $from_biblio->{biblionumber}, 'MoveItemFromBiblio should not have moved the biblio-level hold' );
|
||||
is( $get_item_level_hold_1->biblionumber, $from_biblio->{biblionumber}, 'MoveItemFromBiblio should not have moved the item-level hold placed on item 1' );
|
||||
is( $get_item_level_hold_2->biblionumber, $to_biblio->{biblionumber}, 'MoveItemFromBiblio should have moved the item-level hold placed on item 2' );
|
||||
is( $get_bib_level_hold->biblionumber, $from_biblio->biblionumber, 'MoveItemFromBiblio should not have moved the biblio-level hold' );
|
||||
is( $get_item_level_hold_1->biblionumber, $from_biblio->biblionumber, 'MoveItemFromBiblio should not have moved the item-level hold placed on item 1' );
|
||||
is( $get_item_level_hold_2->biblionumber, $to_biblio->biblionumber, 'MoveItemFromBiblio should have moved the item-level hold placed on item 2' );
|
||||
|
||||
$schema->storage->txn_rollback;
|
||||
|
||||
|
|
|
|||
|
|
@ -73,17 +73,14 @@ subtest 'item() tests' => sub {
|
|||
$schema->storage->txn_begin;
|
||||
|
||||
my $library = $builder->build( { source => 'Branch' } );
|
||||
my $biblioitem = $builder->build( { source => 'Biblioitem' } );
|
||||
my $patron = $builder->build( { source => 'Borrower' } );
|
||||
my $item = Koha::Item->new(
|
||||
{
|
||||
biblionumber => $biblioitem->{biblionumber},
|
||||
biblioitemnumber => $biblioitem->{biblioitemnumber},
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
barcode => 'some_barcode_12',
|
||||
itype => 'BK',
|
||||
})->store;
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
library => $library->{branchcode},
|
||||
barcode => 'some_barcode_12',
|
||||
itype => 'BK',
|
||||
}
|
||||
);
|
||||
|
||||
my $line = Koha::Account::Line->new(
|
||||
{
|
||||
|
|
@ -347,7 +344,7 @@ subtest 'Keep account info when related patron, staff, item or cash_register is
|
|||
|
||||
my $patron = $builder->build_object( { class => 'Koha::Patrons' } );
|
||||
my $staff = $builder->build_object( { class => 'Koha::Patrons' } );
|
||||
my $item = $builder->build_object({ class => 'Koha::Items' });
|
||||
my $item = $builder->build_sample_item;
|
||||
my $issue = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Checkouts',
|
||||
|
|
|
|||
|
|
@ -96,23 +96,17 @@ subtest 'holds + current_holds' => sub {
|
|||
|
||||
subtest 'waiting_or_in_transit' => sub {
|
||||
plan tests => 4;
|
||||
my $biblio = $builder->build( { source => 'Biblio' } );
|
||||
my $item = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber}
|
||||
}
|
||||
});
|
||||
my $item = $builder->build_sample_item;
|
||||
my $reserve = $builder->build({
|
||||
source => 'Reserve',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
biblionumber => $item->biblionumber,
|
||||
found => undef
|
||||
}
|
||||
});
|
||||
|
||||
$reserve = Koha::Holds->find($reserve->{reserve_id});
|
||||
$biblio = Koha::Biblios->find($biblio->{biblionumber});
|
||||
$biblio = $item->biblio;
|
||||
|
||||
is($biblio->has_items_waiting_or_intransit, 0, 'Item is neither waiting nor in transit');
|
||||
|
||||
|
|
@ -125,7 +119,7 @@ subtest 'waiting_or_in_transit' => sub {
|
|||
my $transfer = $builder->build({
|
||||
source => 'Branchtransfer',
|
||||
value => {
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
datearrived => undef
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -34,18 +34,18 @@ $schema->storage->txn_begin;
|
|||
my $builder = t::lib::TestBuilder->new;
|
||||
my $library = $builder->build( { source => 'Branch' } );
|
||||
my $patron = $builder->build( { source => 'Borrower', value => { branchcode => $library->{branchcode} } } );
|
||||
my $item_1 = $builder->build( { source => 'Item' } );
|
||||
my $item_2 = $builder->build( { source => 'Item' } );
|
||||
my $item_1 = $builder->build_sample_item;
|
||||
my $item_2 = $builder->build_sample_item;
|
||||
my $nb_of_checkouts = Koha::Checkouts->search->count;
|
||||
my $new_checkout_1 = Koha::Checkout->new(
|
||||
{ borrowernumber => $patron->{borrowernumber},
|
||||
itemnumber => $item_1->{itemnumber},
|
||||
itemnumber => $item_1->itemnumber,
|
||||
branchcode => $library->{branchcode},
|
||||
}
|
||||
)->store;
|
||||
my $new_checkout_2 = Koha::Checkout->new(
|
||||
{ borrowernumber => $patron->{borrowernumber},
|
||||
itemnumber => $item_2->{itemnumber},
|
||||
itemnumber => $item_2->itemnumber,
|
||||
branchcode => $library->{branchcode},
|
||||
}
|
||||
)->store;
|
||||
|
|
@ -91,14 +91,14 @@ subtest 'item' => sub {
|
|||
plan tests => 2;
|
||||
my $item = $retrieved_checkout_1->item;
|
||||
is( ref( $item ), 'Koha::Item', 'Koha::Checkout->item should return a Koha::Item' );
|
||||
is( $item->itemnumber, $item_1->{itemnumber}, 'Koha::Checkout->item should return the correct item' );
|
||||
is( $item->itemnumber, $item_1->itemnumber, 'Koha::Checkout->item should return the correct item' );
|
||||
};
|
||||
|
||||
subtest 'patron' => sub {
|
||||
plan tests => 3;
|
||||
my $patron = $builder->build_object({class=>'Koha::Patrons', value => {branchcode => $library->{branchcode}}});
|
||||
|
||||
my $item = $builder->build_object( { class=> 'Koha::Items' } );
|
||||
my $item = $builder->build_sample_item;
|
||||
my $checkout = Koha::Checkout->new(
|
||||
{ borrowernumber => $patron->borrowernumber,
|
||||
itemnumber => $item->itemnumber,
|
||||
|
|
|
|||
|
|
@ -62,31 +62,22 @@ subtest 'EmbedItemsAvailability tests' => sub {
|
|||
my ( $biblionumber, $biblioitemnumber ) = AddBiblio(MARC::Record->new(), '');
|
||||
|
||||
# Add some items with different onloan values
|
||||
$builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
biblioitemnumber => $biblioitemnumber,
|
||||
onloan => '2017-01-01'
|
||||
}
|
||||
$builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber,
|
||||
onloan => '2017-01-01'
|
||||
}
|
||||
);
|
||||
$builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
biblioitemnumber => $biblioitemnumber,
|
||||
onloan => undef
|
||||
}
|
||||
$builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber,
|
||||
onloan => undef
|
||||
}
|
||||
);
|
||||
$builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
biblioitemnumber => $biblioitemnumber,
|
||||
onloan => '2017-01-02'
|
||||
}
|
||||
$builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber,
|
||||
onloan => '2017-01-02'
|
||||
}
|
||||
);
|
||||
|
||||
|
|
@ -110,31 +101,22 @@ subtest 'EmbedItemsAvailability tests' => sub {
|
|||
( $biblionumber, $biblioitemnumber ) = AddBiblio(MARC::Record->new(), '');
|
||||
|
||||
# Add some items with different onloan values
|
||||
$builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
biblioitemnumber => $biblioitemnumber,
|
||||
onloan => '2017-01-01'
|
||||
}
|
||||
$builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber,
|
||||
onloan => '2017-01-01'
|
||||
}
|
||||
);
|
||||
$builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
biblioitemnumber => $biblioitemnumber,
|
||||
onloan => undef
|
||||
}
|
||||
$builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber,
|
||||
onloan => undef
|
||||
}
|
||||
);
|
||||
$builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
biblioitemnumber => $biblioitemnumber,
|
||||
onloan => '2017-01-02'
|
||||
}
|
||||
$builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblionumber,
|
||||
onloan => '2017-01-02'
|
||||
}
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -192,25 +192,23 @@ subtest 'pickup_locations' => sub {
|
|||
my $group2_1 = $builder->build_object( { class => 'Koha::Library::Groups', value => { parent_id => $root2->id, branchcode => $library3->branchcode } } );
|
||||
my $group2_2 = $builder->build_object( { class => 'Koha::Library::Groups', value => { parent_id => $root2->id, branchcode => $library4->branchcode } } );
|
||||
|
||||
my $biblioitem = $builder->build( { source => 'Biblioitem' } );
|
||||
my $item1 = $builder->build_sample_item(
|
||||
{
|
||||
homebranch => $library1->branchcode,
|
||||
holdingbranch => $library2->branchcode,
|
||||
barcode => '1',
|
||||
itype => 'test',
|
||||
}
|
||||
)->store;
|
||||
|
||||
my $item1 = Koha::Item->new({
|
||||
biblionumber => $biblioitem->{biblionumber},
|
||||
biblioitemnumber => $biblioitem->{biblioitemnumber},
|
||||
homebranch => $library1->branchcode,
|
||||
holdingbranch => $library2->branchcode,
|
||||
barcode => '1',
|
||||
itype => 'test',
|
||||
})->store;
|
||||
|
||||
my $item3 = Koha::Item->new({
|
||||
biblionumber => $biblioitem->{biblionumber},
|
||||
biblioitemnumber => $biblioitem->{biblioitemnumber},
|
||||
homebranch => $library3->branchcode,
|
||||
holdingbranch => $library4->branchcode,
|
||||
barcode => '3',
|
||||
itype => 'test',
|
||||
})->store;
|
||||
my $item3 = $builder->build_sample_item(
|
||||
{
|
||||
homebranch => $library3->branchcode,
|
||||
holdingbranch => $library4->branchcode,
|
||||
barcode => '3',
|
||||
itype => 'test',
|
||||
}
|
||||
)->store;
|
||||
|
||||
my $patron1 = $builder->build_object( { class => 'Koha::Patrons', value => { branchcode => $library1->branchcode, firstname => '1' } } );
|
||||
my $patron4 = $builder->build_object( { class => 'Koha::Patrons', value => { branchcode => $library4->branchcode, firstname => '4' } } );
|
||||
|
|
|
|||
|
|
@ -35,11 +35,16 @@ $schema->storage->txn_begin;
|
|||
my $builder = t::lib::TestBuilder->new;
|
||||
my $library_from = $builder->build( { source => 'Branch' } );
|
||||
my $library_to = $builder->build( { source => 'Branch' } );
|
||||
my $item = $builder->build( { source => 'Item', value => { holding_branch => $library_from->{branchcode}, homebranch => $library_to->{branchcode} } } );
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
holdingbranch => $library_from->{branchcode},
|
||||
homebranch => $library_to->{branchcode}
|
||||
}
|
||||
);
|
||||
|
||||
my $nb_of_transfers = Koha::Item::Transfers->search->count;
|
||||
my $new_transfer_1 = Koha::Item::Transfer->new(
|
||||
{ itemnumber => $item->{itemnumber},
|
||||
{ itemnumber => $item->itemnumber,
|
||||
frombranch => $library_from->{branchcode},
|
||||
tobranch => $library_to->{branchcode},
|
||||
datearrived => dt_from_string,
|
||||
|
|
@ -47,7 +52,7 @@ my $new_transfer_1 = Koha::Item::Transfer->new(
|
|||
}
|
||||
)->store;
|
||||
my $new_transfer_2 = Koha::Item::Transfer->new(
|
||||
{ itemnumber => $item->{itemnumber},
|
||||
{ itemnumber => $item->itemnumber,
|
||||
frombranch => $library_from->{branchcode},
|
||||
tobranch => $library_to->{branchcode},
|
||||
datearrived => undef,
|
||||
|
|
@ -74,20 +79,17 @@ subtest 'daterequested tests' => sub {
|
|||
$schema->storage->txn_begin;
|
||||
my $library_from = $builder->build( { source => 'Branch' } );
|
||||
my $library_to = $builder->build( { source => 'Branch' } );
|
||||
my $item = $builder->build(
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
holding_branch => $library_from->{branchcode},
|
||||
homebranch => $library_to->{branchcode}
|
||||
}
|
||||
holdingbranch => $library_from->{branchcode},
|
||||
homebranch => $library_to->{branchcode}
|
||||
}
|
||||
);
|
||||
|
||||
my $now = dt_from_string;
|
||||
my $transfer = Koha::Item::Transfer->new(
|
||||
{
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
frombranch => $library_from->{branchcode},
|
||||
tobranch => $library_to->{branchcode}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -271,28 +271,16 @@ subtest 'siblings' => sub {
|
|||
subtest 'has_overdues' => sub {
|
||||
plan tests => 3;
|
||||
|
||||
my $biblioitem_1 = $builder->build( { source => 'Biblioitem' } );
|
||||
my $item_1 = $builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
biblionumber => $biblioitem_1->{biblionumber}
|
||||
}
|
||||
}
|
||||
);
|
||||
my $item_1 = $builder->build_sample_item;
|
||||
my $retrieved_patron = Koha::Patrons->find( $new_patron_1->borrowernumber );
|
||||
is( $retrieved_patron->has_overdues, 0, );
|
||||
|
||||
my $tomorrow = DateTime->today( time_zone => C4::Context->tz() )->add( days => 1 );
|
||||
my $issue = Koha::Checkout->new({ borrowernumber => $new_patron_1->id, itemnumber => $item_1->{itemnumber}, date_due => $tomorrow, branchcode => $library->{branchcode} })->store();
|
||||
my $issue = Koha::Checkout->new({ borrowernumber => $new_patron_1->id, itemnumber => $item_1->itemnumber, date_due => $tomorrow, branchcode => $library->{branchcode} })->store();
|
||||
is( $retrieved_patron->has_overdues, 0, );
|
||||
$issue->delete();
|
||||
my $yesterday = DateTime->today(time_zone => C4::Context->tz())->add( days => -1 );
|
||||
$issue = Koha::Checkout->new({ borrowernumber => $new_patron_1->id, itemnumber => $item_1->{itemnumber}, date_due => $yesterday, branchcode => $library->{branchcode} })->store();
|
||||
$issue = Koha::Checkout->new({ borrowernumber => $new_patron_1->id, itemnumber => $item_1->itemnumber, date_due => $yesterday, branchcode => $library->{branchcode} })->store();
|
||||
$retrieved_patron = Koha::Patrons->find( $new_patron_1->borrowernumber );
|
||||
is( $retrieved_patron->has_overdues, 1, );
|
||||
$issue->delete();
|
||||
|
|
@ -579,41 +567,23 @@ subtest 'checkouts + pending_checkouts + get_overdues + old_checkouts' => sub {
|
|||
|
||||
my $library = $builder->build( { source => 'Branch' } );
|
||||
my ($biblionumber_1) = AddBiblio( MARC::Record->new, '' );
|
||||
my $item_1 = $builder->build(
|
||||
my $item_1 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
biblionumber => $biblionumber_1,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
}
|
||||
library => $library->{branchcode},
|
||||
biblionumber => $biblionumber_1,
|
||||
}
|
||||
);
|
||||
my $item_2 = $builder->build(
|
||||
my $item_2 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
biblionumber => $biblionumber_1,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
}
|
||||
library => $library->{branchcode},
|
||||
biblionumber => $biblionumber_1,
|
||||
}
|
||||
);
|
||||
my ($biblionumber_2) = AddBiblio( MARC::Record->new, '' );
|
||||
my $item_3 = $builder->build(
|
||||
my $item_3 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
biblionumber => $biblionumber_2,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
}
|
||||
library => $library->{branchcode},
|
||||
biblionumber => $biblionumber_2,
|
||||
}
|
||||
);
|
||||
my $patron = $builder->build(
|
||||
|
|
@ -639,9 +609,9 @@ subtest 'checkouts + pending_checkouts + get_overdues + old_checkouts' => sub {
|
|||
|
||||
t::lib::Mocks::mock_userenv({ branchcode => $library->{branchcode} });
|
||||
|
||||
AddIssue( $patron, $item_1->{barcode}, DateTime->now->subtract( days => 1 ) );
|
||||
AddIssue( $patron, $item_2->{barcode}, DateTime->now->subtract( days => 5 ) );
|
||||
AddIssue( $patron, $item_3->{barcode} );
|
||||
AddIssue( $patron, $item_1->barcode, DateTime->now->subtract( days => 1 ) );
|
||||
AddIssue( $patron, $item_2->barcode, DateTime->now->subtract( days => 5 ) );
|
||||
AddIssue( $patron, $item_3->barcode );
|
||||
|
||||
$patron = Koha::Patrons->find( $patron->{borrowernumber} );
|
||||
$checkouts = $patron->checkouts;
|
||||
|
|
@ -652,17 +622,17 @@ subtest 'checkouts + pending_checkouts + get_overdues + old_checkouts' => sub {
|
|||
is( ref($pending_checkouts), 'Koha::Checkouts', 'pending_checkouts should return a Koha::Checkouts object' );
|
||||
|
||||
my $first_checkout = $pending_checkouts->next;
|
||||
is( $first_checkout->unblessed_all_relateds->{biblionumber}, $item_3->{biblionumber}, 'pending_checkouts should prefetch values from other tables (here biblio)' );
|
||||
is( $first_checkout->unblessed_all_relateds->{biblionumber}, $item_3->biblionumber, 'pending_checkouts should prefetch values from other tables (here biblio)' );
|
||||
|
||||
my $overdues = $patron->get_overdues;
|
||||
is( $overdues->count, 2, 'Patron should have 2 overdues');
|
||||
is( ref($overdues), 'Koha::Checkouts', 'Koha::Patron->get_overdues should return Koha::Checkouts' );
|
||||
is( $overdues->next->itemnumber, $item_1->{itemnumber}, 'The issue should be returned in the same order as they have been done, first is correct' );
|
||||
is( $overdues->next->itemnumber, $item_2->{itemnumber}, 'The issue should be returned in the same order as they have been done, second is correct' );
|
||||
is( $overdues->next->itemnumber, $item_1->itemnumber, 'The issue should be returned in the same order as they have been done, first is correct' );
|
||||
is( $overdues->next->itemnumber, $item_2->itemnumber, 'The issue should be returned in the same order as they have been done, second is correct' );
|
||||
|
||||
|
||||
C4::Circulation::AddReturn( $item_1->{barcode} );
|
||||
C4::Circulation::AddReturn( $item_2->{barcode} );
|
||||
C4::Circulation::AddReturn( $item_1->barcode );
|
||||
C4::Circulation::AddReturn( $item_2->barcode );
|
||||
$old_checkouts = $patron->old_checkouts;
|
||||
is( $old_checkouts->count, 2, 'old_checkouts should return 2 old checkouts that patron' );
|
||||
is( ref($old_checkouts), 'Koha::Old::Checkouts', 'old_checkouts should return a Koha::Old::Checkouts object' );
|
||||
|
|
@ -968,37 +938,26 @@ subtest 'holds and old_holds' => sub {
|
|||
|
||||
my $library = $builder->build( { source => 'Branch' } );
|
||||
my ($biblionumber_1) = AddBiblio( MARC::Record->new, '' );
|
||||
my $item_1 = $builder->build(
|
||||
my $item_1 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
biblionumber => $biblionumber_1
|
||||
}
|
||||
library => $library->{branchcode},
|
||||
biblionumber => $biblionumber_1,
|
||||
}
|
||||
);
|
||||
my $item_2 = $builder->build(
|
||||
my $item_2 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
biblionumber => $biblionumber_1
|
||||
}
|
||||
library => $library->{branchcode},
|
||||
biblionumber => $biblionumber_1,
|
||||
}
|
||||
);
|
||||
my ($biblionumber_2) = AddBiblio( MARC::Record->new, '' );
|
||||
my $item_3 = $builder->build(
|
||||
my $item_3 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
biblionumber => $biblionumber_2
|
||||
}
|
||||
library => $library->{branchcode},
|
||||
biblionumber => $biblionumber_2,
|
||||
}
|
||||
);
|
||||
|
||||
my $patron = $builder->build(
|
||||
{
|
||||
source => 'Borrower',
|
||||
|
|
@ -1086,41 +1045,27 @@ subtest 'search_patrons_to_anonymise & anonymise_issue_history' => sub {
|
|||
value => { privacy => 1, }
|
||||
}
|
||||
);
|
||||
my $item_1 = $builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
},
|
||||
}
|
||||
);
|
||||
my $item_1 = $builder->build_sample_item;
|
||||
my $issue_1 = $builder->build(
|
||||
{ source => 'Issue',
|
||||
value => {
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
itemnumber => $item_1->{itemnumber},
|
||||
},
|
||||
}
|
||||
);
|
||||
my $item_2 = $builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
itemnumber => $item_1->itemnumber,
|
||||
},
|
||||
}
|
||||
);
|
||||
my $item_2 = $builder->build_sample_item;
|
||||
my $issue_2 = $builder->build(
|
||||
{ source => 'Issue',
|
||||
value => {
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
itemnumber => $item_2->{itemnumber},
|
||||
itemnumber => $item_2->itemnumber,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
my ( $returned_1, undef, undef ) = C4::Circulation::AddReturn( $item_1->{barcode}, undef, undef, dt_from_string('2010-10-10') );
|
||||
my ( $returned_2, undef, undef ) = C4::Circulation::AddReturn( $item_2->{barcode}, undef, undef, dt_from_string('2011-11-11') );
|
||||
my ( $returned_1, undef, undef ) = C4::Circulation::AddReturn( $item_1->barcode, undef, undef, dt_from_string('2010-10-10') );
|
||||
my ( $returned_2, undef, undef ) = C4::Circulation::AddReturn( $item_2->barcode, undef, undef, dt_from_string('2011-11-11') );
|
||||
is( $returned_1 && $returned_2, 1, 'The items should have been returned' );
|
||||
|
||||
my $patrons_to_anonymise = Koha::Patrons->search_patrons_to_anonymise( { before => '2010-10-11' } )->search( { 'me.borrowernumber' => $patron->{borrowernumber} } );
|
||||
|
|
@ -1134,26 +1079,26 @@ subtest 'search_patrons_to_anonymise & anonymise_issue_history' => sub {
|
|||
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $sth = $dbh->prepare(q|SELECT borrowernumber FROM old_issues where itemnumber = ?|);
|
||||
$sth->execute($item_1->{itemnumber});
|
||||
$sth->execute($item_1->itemnumber);
|
||||
my ($borrowernumber_used_to_anonymised) = $sth->fetchrow_array;
|
||||
is( $borrowernumber_used_to_anonymised, $anonymous->{borrowernumber}, 'With privacy=1, the issue should have been anonymised' );
|
||||
$sth->execute($item_2->{itemnumber});
|
||||
$sth->execute($item_2->itemnumber);
|
||||
($borrowernumber_used_to_anonymised) = $sth->fetchrow_array;
|
||||
is( $borrowernumber_used_to_anonymised, $patron->{borrowernumber}, 'The issue should not have been anonymised, the returned date is later' );
|
||||
|
||||
$rows_affected = Koha::Patrons->search_patrons_to_anonymise( { before => '2011-11-12' } )->anonymise_issue_history;
|
||||
$sth->execute($item_2->{itemnumber});
|
||||
$sth->execute($item_2->itemnumber);
|
||||
($borrowernumber_used_to_anonymised) = $sth->fetchrow_array;
|
||||
is( $borrowernumber_used_to_anonymised, $anonymous->{borrowernumber}, 'The issue should have been anonymised, the returned date is before' );
|
||||
|
||||
my $sth_reset = $dbh->prepare(q|UPDATE old_issues SET borrowernumber = ? WHERE itemnumber = ?|);
|
||||
$sth_reset->execute( $patron->{borrowernumber}, $item_1->{itemnumber} );
|
||||
$sth_reset->execute( $patron->{borrowernumber}, $item_2->{itemnumber} );
|
||||
$sth_reset->execute( $patron->{borrowernumber}, $item_1->itemnumber );
|
||||
$sth_reset->execute( $patron->{borrowernumber}, $item_2->itemnumber );
|
||||
$rows_affected = Koha::Patrons->search_patrons_to_anonymise->anonymise_issue_history;
|
||||
$sth->execute($item_1->{itemnumber});
|
||||
$sth->execute($item_1->itemnumber);
|
||||
($borrowernumber_used_to_anonymised) = $sth->fetchrow_array;
|
||||
is( $borrowernumber_used_to_anonymised, $anonymous->{borrowernumber}, 'The issue 1 should have been anonymised, before parameter was not passed' );
|
||||
$sth->execute($item_2->{itemnumber});
|
||||
$sth->execute($item_2->itemnumber);
|
||||
($borrowernumber_used_to_anonymised) = $sth->fetchrow_array;
|
||||
is( $borrowernumber_used_to_anonymised, $anonymous->{borrowernumber}, 'The issue 2 should have been anonymised, before parameter was not passed' );
|
||||
|
||||
|
|
@ -1169,30 +1114,23 @@ subtest 'search_patrons_to_anonymise & anonymise_issue_history' => sub {
|
|||
value => { privacy => 0, }
|
||||
}
|
||||
);
|
||||
my $item = $builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
},
|
||||
}
|
||||
);
|
||||
my $item = $builder->build_sample_item;
|
||||
my $issue = $builder->build(
|
||||
{ source => 'Issue',
|
||||
value => {
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
my ( $returned, undef, undef ) = C4::Circulation::AddReturn( $item->{barcode}, undef, undef, dt_from_string('2010-10-10') );
|
||||
my ( $returned, undef, undef ) = C4::Circulation::AddReturn( $item->barcode, undef, undef, dt_from_string('2010-10-10') );
|
||||
is( $returned, 1, 'The item should have been returned' );
|
||||
|
||||
my $dbh = C4::Context->dbh;
|
||||
my ($borrowernumber_used_to_anonymised) = $dbh->selectrow_array(q|
|
||||
SELECT borrowernumber FROM old_issues where itemnumber = ?
|
||||
|, undef, $item->{itemnumber});
|
||||
|, undef, $item->itemnumber);
|
||||
is( $borrowernumber_used_to_anonymised, $patron->{borrowernumber}, 'With privacy=0, the issue should not be anonymised' );
|
||||
Koha::Patrons->find( $patron->{borrowernumber})->delete;
|
||||
};
|
||||
|
|
@ -1208,24 +1146,17 @@ subtest 'search_patrons_to_anonymise & anonymise_issue_history' => sub {
|
|||
value => { privacy => 1, }
|
||||
}
|
||||
);
|
||||
my $item = $builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
},
|
||||
}
|
||||
);
|
||||
my $item = $builder->build_sample_item;
|
||||
my $issue = $builder->build(
|
||||
{ source => 'Issue',
|
||||
value => {
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
my ( $returned, undef, undef ) = C4::Circulation::AddReturn( $item->{barcode}, undef, undef, dt_from_string('2010-10-10') );
|
||||
my ( $returned, undef, undef ) = C4::Circulation::AddReturn( $item->barcode, undef, undef, dt_from_string('2010-10-10') );
|
||||
is( $returned, 1, 'The item should have been returned' );
|
||||
my $rows_affected = Koha::Patrons->search_patrons_to_anonymise( { before => '2010-10-11' } )->anonymise_issue_history( { before => '2010-10-11' } );
|
||||
ok( $rows_affected > 0, 'AnonymiseIssueHistory should affect at least 1 row' );
|
||||
|
|
@ -1233,7 +1164,7 @@ subtest 'search_patrons_to_anonymise & anonymise_issue_history' => sub {
|
|||
my $dbh = C4::Context->dbh;
|
||||
my ($borrowernumber_used_to_anonymised) = $dbh->selectrow_array(q|
|
||||
SELECT borrowernumber FROM old_issues where itemnumber = ?
|
||||
|, undef, $item->{itemnumber});
|
||||
|, undef, $item->itemnumber);
|
||||
is( $borrowernumber_used_to_anonymised, undef, 'With AnonymousPatron is not defined, the issue should have been anonymised anyway' );
|
||||
Koha::Patrons->find( $patron->{borrowernumber})->delete;
|
||||
};
|
||||
|
|
@ -1246,24 +1177,17 @@ subtest 'search_patrons_to_anonymise & anonymise_issue_history' => sub {
|
|||
value => { privacy => 1 } # Another branchcode than the logged in librarian
|
||||
}
|
||||
);
|
||||
my $item = $builder->build(
|
||||
{ source => 'Item',
|
||||
value => {
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
},
|
||||
}
|
||||
);
|
||||
my $item = $builder->build_sample_item;
|
||||
my $issue = $builder->build(
|
||||
{ source => 'Issue',
|
||||
value => {
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
itemnumber => $item->{itemnumber},
|
||||
itemnumber => $item->itemnumber,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
my ( $returned, undef, undef ) = C4::Circulation::AddReturn( $item->{barcode}, undef, undef, dt_from_string('2010-10-10') );
|
||||
my ( $returned, undef, undef ) = C4::Circulation::AddReturn( $item->barcode, undef, undef, dt_from_string('2010-10-10') );
|
||||
is( Koha::Patrons->search_patrons_to_anonymise( { before => '2010-10-11' } )->count, 0 );
|
||||
Koha::Patrons->find( $patron->{borrowernumber})->delete;
|
||||
};
|
||||
|
|
@ -1471,37 +1395,26 @@ subtest 'get_overdues' => sub {
|
|||
|
||||
my $library = $builder->build( { source => 'Branch' } );
|
||||
my ($biblionumber_1) = AddBiblio( MARC::Record->new, '' );
|
||||
my $item_1 = $builder->build(
|
||||
my $item_1 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
biblionumber => $biblionumber_1
|
||||
}
|
||||
library => $library->{branchcode},
|
||||
biblionumber => $biblionumber_1,
|
||||
}
|
||||
);
|
||||
my $item_2 = $builder->build(
|
||||
my $item_2 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
biblionumber => $biblionumber_1
|
||||
}
|
||||
library => $library->{branchcode},
|
||||
biblionumber => $biblionumber_1,
|
||||
}
|
||||
);
|
||||
my ($biblionumber_2) = AddBiblio( MARC::Record->new, '' );
|
||||
my $item_3 = $builder->build(
|
||||
my $item_3 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
biblionumber => $biblionumber_2
|
||||
}
|
||||
library => $library->{branchcode},
|
||||
biblionumber => $biblionumber_2,
|
||||
}
|
||||
);
|
||||
|
||||
my $patron = $builder->build(
|
||||
{
|
||||
source => 'Borrower',
|
||||
|
|
@ -1511,15 +1424,15 @@ subtest 'get_overdues' => sub {
|
|||
|
||||
t::lib::Mocks::mock_preference({ branchcode => $library->{branchcode} });
|
||||
|
||||
AddIssue( $patron, $item_1->{barcode}, DateTime->now->subtract( days => 1 ) );
|
||||
AddIssue( $patron, $item_2->{barcode}, DateTime->now->subtract( days => 5 ) );
|
||||
AddIssue( $patron, $item_3->{barcode} );
|
||||
AddIssue( $patron, $item_1->barcode, DateTime->now->subtract( days => 1 ) );
|
||||
AddIssue( $patron, $item_2->barcode, DateTime->now->subtract( days => 5 ) );
|
||||
AddIssue( $patron, $item_3->barcode );
|
||||
|
||||
$patron = Koha::Patrons->find( $patron->{borrowernumber} );
|
||||
my $overdues = $patron->get_overdues;
|
||||
is( $overdues->count, 2, 'Patron should have 2 overdues');
|
||||
is( $overdues->next->itemnumber, $item_1->{itemnumber}, 'The issue should be returned in the same order as they have been done, first is correct' );
|
||||
is( $overdues->next->itemnumber, $item_2->{itemnumber}, 'The issue should be returned in the same order as they have been done, second is correct' );
|
||||
is( $overdues->next->itemnumber, $item_1->itemnumber, 'The issue should be returned in the same order as they have been done, first is correct' );
|
||||
is( $overdues->next->itemnumber, $item_2->itemnumber, 'The issue should be returned in the same order as they have been done, second is correct' );
|
||||
|
||||
my $o = $overdues->reset->next;
|
||||
my $unblessed_overdue = $o->unblessed_all_relateds;
|
||||
|
|
|
|||
|
|
@ -31,8 +31,8 @@ my $builder = t::lib::TestBuilder->new;
|
|||
|
||||
my $patron_1 = $builder->build( { source => 'Borrower', } );
|
||||
my $patron_2 = $builder->build( { source => 'Borrower', } );
|
||||
my $biblio_1 = $builder->build( { source => 'Biblio', } );
|
||||
my $biblionumber = $biblio_1->{biblionumber};
|
||||
my $biblio_1 = $builder->build_sample_biblio;
|
||||
my $biblionumber = $biblio_1->biblionumber;
|
||||
|
||||
my $rating_1 = Koha::Rating->new( { biblionumber => $biblionumber, borrowernumber => $patron_1->{borrowernumber}, rating_value => 3 } )->store;
|
||||
my $rating_2 = Koha::Rating->new( { biblionumber => $biblionumber, borrowernumber => $patron_2->{borrowernumber}, rating_value => 4 } )->store;
|
||||
|
|
|
|||
|
|
@ -36,23 +36,23 @@ my $patron_1 = $builder->build({ source => 'Borrower', value => { flags => undef
|
|||
my $patron_2 = $builder->build({ source => 'Borrower' });
|
||||
$patron_1 = Koha::Patrons->find( $patron_1->{borrowernumber} );
|
||||
$patron_2 = Koha::Patrons->find( $patron_2->{borrowernumber} );
|
||||
my $biblio_1 = $builder->build({ source => 'Biblio' });
|
||||
my $biblio_2 = $builder->build({ source => 'Biblio' });
|
||||
my $biblio_1 = $builder->build_sample_biblio;
|
||||
my $biblio_2 = $builder->build_sample_biblio;
|
||||
my $nb_of_reviews = Koha::Reviews->search->count;
|
||||
my $nb_of_approved_reviews = Koha::Reviews->search({ approved => 1 })->count;
|
||||
my $new_review_1_1 = Koha::Review->new({
|
||||
borrowernumber => $patron_1->borrowernumber,
|
||||
biblionumber => $biblio_1->{biblionumber},
|
||||
biblionumber => $biblio_1->biblionumber,
|
||||
review => 'a kind review',
|
||||
})->store;
|
||||
my $new_review_1_2 = Koha::Review->new({
|
||||
borrowernumber => $patron_1->borrowernumber,
|
||||
biblionumber => $biblio_2->{biblionumber},
|
||||
biblionumber => $biblio_2->biblionumber,
|
||||
review => 'anoter kind review',
|
||||
})->store;
|
||||
my $new_review_2_1 = Koha::Review->new({
|
||||
borrowernumber => $patron_2->borrowernumber,
|
||||
biblionumber => $biblio_1->{biblionumber},
|
||||
biblionumber => $biblio_1->biblionumber,
|
||||
review => 'just anoter review',
|
||||
})->store;
|
||||
|
||||
|
|
|
|||
|
|
@ -125,16 +125,7 @@ my $loggedinuser = $builder->build_object({
|
|||
}
|
||||
});
|
||||
|
||||
my $biblio = $builder->build({
|
||||
source => 'Biblio',
|
||||
});
|
||||
|
||||
my $biblioitem = $builder->build({
|
||||
source => 'Biblioitem',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber}
|
||||
}
|
||||
});
|
||||
my $biblio = $builder->build_sample_biblio;
|
||||
|
||||
my $subscriptionFrequency = $builder->build({
|
||||
source => 'SubscriptionFrequency'
|
||||
|
|
@ -147,7 +138,7 @@ my $subscriptionNumberpattern = $builder->build({
|
|||
my $subscription = $builder->build({
|
||||
source => 'Subscription',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
biblionumber => $biblio->biblionumber,
|
||||
periodicity => $subscriptionFrequency->{id},
|
||||
numberpattern => $subscriptionNumberpattern->{id},
|
||||
mana_id => undef
|
||||
|
|
@ -178,7 +169,7 @@ my $data = Koha::SharedContent::prepare_entity_data(
|
|||
|
||||
is($data->{language}, 'en', 'Language is set to default');
|
||||
is($data->{exportemail}, $library->branchemail, 'Email is set with the userenv branch one');
|
||||
is($data->{title}, $biblio->{title}, 'Shared title');
|
||||
is($data->{title}, $biblio->title, 'Shared title');
|
||||
is($data->{sfdescription}, $subscriptionFrequency->{description}, 'Shared sfdescription');
|
||||
is($data->{unit}, $subscriptionFrequency->{unit}, 'Shared unit');
|
||||
is($data->{unitsperissue}, $subscriptionFrequency->{unitsperissue}, 'Shared unitsperissue');
|
||||
|
|
@ -193,9 +184,10 @@ is($data->{every1}, $subscriptionNumberpattern->{every1}, 'Shared every1');
|
|||
is($data->{whenmorethan1}, $subscriptionNumberpattern->{whenmorethan1}, 'Shared whenmorethan1');
|
||||
is($data->{setto1}, $subscriptionNumberpattern->{setto1}, 'Shared setto1');
|
||||
is($data->{numbering1}, $subscriptionNumberpattern->{numbering1}, 'Shared numbering1');
|
||||
is($data->{issn}, $biblioitem->{issn}, 'Shared ISSN');
|
||||
is($data->{ean}, $biblioitem->{ean}, 'Shared EAN');
|
||||
is($data->{publishercode}, $biblioitem->{publishercode}, 'Shared publishercode');
|
||||
my $biblioitem = $biblio->biblioitem;
|
||||
is($data->{issn}, $biblioitem->issn, 'Shared ISSN');
|
||||
is($data->{ean}, $biblioitem->ean, 'Shared EAN');
|
||||
is($data->{publishercode}, $biblioitem->publishercode, 'Shared publishercode');
|
||||
|
||||
sub mock_response {
|
||||
my $response = Test::MockObject->new();
|
||||
|
|
|
|||
|
|
@ -107,22 +107,15 @@ subtest 'Koha::Subscription->frequency' => sub {
|
|||
};
|
||||
|
||||
my $nb_of_subs = Koha::Subscriptions->search->count;
|
||||
my $biblio_1 = $builder->build( { source => 'Biblio' } );
|
||||
my $bi_1 = $builder->build(
|
||||
{
|
||||
source => 'Biblioitem',
|
||||
value => {
|
||||
biblionumber => $biblio_1->{biblionumber}
|
||||
}
|
||||
}
|
||||
);
|
||||
my $biblio_1 = $builder->build_sample_biblio;
|
||||
my $bi_1 = $biblio_1->biblioitem;
|
||||
my $sub_freq_1 = $builder->build( { source => 'SubscriptionFrequency' } );
|
||||
my $sub_np_1 = $builder->build( { source => 'SubscriptionNumberpattern' } );
|
||||
my $sub_1 = $builder->build(
|
||||
{
|
||||
source => 'Subscription',
|
||||
value => {
|
||||
biblionumber => $biblio_1->{biblionumber},
|
||||
biblionumber => $biblio_1->biblionumber,
|
||||
periodicity => $sub_freq_1->{id},
|
||||
numberpattern => $sub_np_1->{id}
|
||||
}
|
||||
|
|
@ -136,7 +129,7 @@ is(
|
|||
);
|
||||
is(
|
||||
$sub_1->{biblionumber},
|
||||
$biblio_1->{biblionumber},
|
||||
$biblio_1->biblionumber,
|
||||
'The link between sub and biblio is well done'
|
||||
);
|
||||
is( $sub_1->{periodicity}, $sub_freq_1->{id},
|
||||
|
|
@ -146,7 +139,7 @@ is( $sub_1->{numberpattern},
|
|||
'The link between sub and sub_numberpattern is well done' );
|
||||
|
||||
my $ref = {
|
||||
'title' => $biblio_1->{title},
|
||||
'title' => $biblio_1->title,
|
||||
'sfdescription' => $sub_freq_1->{description},
|
||||
'unit' => $sub_freq_1->{unit},
|
||||
'unitsperissue' => $sub_freq_1->{unitsperissue},
|
||||
|
|
@ -173,9 +166,9 @@ my $ref = {
|
|||
'whenmorethan3' => $sub_np_1->{whenmorethan3},
|
||||
'setto3' => $sub_np_1->{setto3},
|
||||
'numbering3' => $sub_np_1->{numbering3},
|
||||
'issn' => $bi_1->{issn},
|
||||
'ean' => $bi_1->{ean},
|
||||
'publishercode' => $bi_1->{publishercode}
|
||||
'issn' => $bi_1->issn,
|
||||
'ean' => $bi_1->ean,
|
||||
'publishercode' => $bi_1->publishercode,
|
||||
};
|
||||
|
||||
is_deeply( Koha::Subscription->get_sharable_info( $sub_1->{subscriptionid} ),
|
||||
|
|
|
|||
|
|
@ -33,18 +33,18 @@ my $schema = Koha::Database->new->schema;
|
|||
$schema->storage->txn_begin;
|
||||
|
||||
my $builder = t::lib::TestBuilder->new;
|
||||
my $biblio_1 = $builder->build( { source => 'Biblio' } );
|
||||
my $biblio_2 = $builder->build( { source => 'Biblio' } );
|
||||
my $biblio_1 = $builder->build_sample_biblio;
|
||||
my $biblio_2 = $builder->build_sample_biblio;
|
||||
my $patron = $builder->build( { source => 'Borrower' } );
|
||||
my $nb_of_suggestions = Koha::Suggestions->search->count;
|
||||
my $new_suggestion_1 = Koha::Suggestion->new(
|
||||
{ suggestedby => $patron->{borrowernumber},
|
||||
biblionumber => $biblio_1->{biblionumber},
|
||||
biblionumber => $biblio_1->biblionumber,
|
||||
}
|
||||
)->store;
|
||||
my $new_suggestion_2 = Koha::Suggestion->new(
|
||||
{ suggestedby => $patron->{borrowernumber},
|
||||
biblionumber => $biblio_2->{biblionumber},
|
||||
biblionumber => $biblio_2->biblionumber,
|
||||
}
|
||||
)->store;
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ subtest 'store' => sub {
|
|||
plan tests => 3;
|
||||
my $suggestion = Koha::Suggestion->new(
|
||||
{ suggestedby => $patron->{borrowernumber},
|
||||
biblionumber => $biblio_1->{biblionumber},
|
||||
biblionumber => $biblio_1->biblionumber,
|
||||
}
|
||||
)->store;
|
||||
|
||||
|
|
|
|||
|
|
@ -20,34 +20,24 @@ subtest 'add_item_status' => sub {
|
|||
plan tests => 2;
|
||||
|
||||
## FIRST ITEM HAS ALL THE STATUSES ##
|
||||
my $item_1 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
onloan => '2017-07-07',
|
||||
itemlost => 1,
|
||||
my $item_1 = $builder->build_sample_item(
|
||||
{
|
||||
onloan => '2017-07-07',
|
||||
itemlost => 1,
|
||||
notforloan => 1,
|
||||
damaged => 1,
|
||||
withdrawn => 1,
|
||||
damaged => 1,
|
||||
withdrawn => 1,
|
||||
}
|
||||
});
|
||||
my $item_marc_1 = C4::Items::GetMarcItem( $item_1->{biblionumber}, $item_1->{itemnumber} );
|
||||
);
|
||||
my $item_marc_1 = C4::Items::GetMarcItem( $item_1->biblionumber, $item_1->itemnumber );
|
||||
my $item_field_1 = scalar $item_marc_1->field('952');
|
||||
$builder->build({ source => 'Reserve', value=> { itemnumber => $item_1->{itemnumber} } });
|
||||
$builder->build({ source => 'Branchtransfer', value=> { itemnumber => $item_1->{itemnumber}, datearrived => undef } });
|
||||
$builder->build({ source => 'Reserve', value=> { itemnumber => $item_1->itemnumber } });
|
||||
$builder->build({ source => 'Branchtransfer', value=> { itemnumber => $item_1->itemnumber, datearrived => undef } });
|
||||
## END FIRST ITEM ##
|
||||
|
||||
## SECOND ITEM HAS NO STATUSES ##
|
||||
my $item_2 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
onloan => undef,
|
||||
itemlost => 0,
|
||||
notforloan => 0,
|
||||
damaged => 0,
|
||||
withdrawn => 0,
|
||||
}
|
||||
});
|
||||
my $item_marc_2 = C4::Items::GetMarcItem( $item_2->{biblionumber}, $item_2->{itemnumber} );
|
||||
my $item_2 = $builder->build_sample_item;
|
||||
my $item_marc_2 = C4::Items::GetMarcItem( $item_2->biblionumber, $item_2->itemnumber );
|
||||
my $item_field_2 = scalar $item_marc_2->field('952');
|
||||
## END SECOND ITEM ##
|
||||
|
||||
|
|
|
|||
|
|
@ -44,34 +44,24 @@ subtest 'add_item_status' => sub {
|
|||
});
|
||||
|
||||
## FIRST ITEM HAS ALL THE STATUSES ##
|
||||
my $item_1 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
onloan => '2017-07-07',
|
||||
itemlost => 1,
|
||||
my $item_1 = $builder->build_sample_item(
|
||||
{
|
||||
onloan => '2017-07-07',
|
||||
itemlost => 1,
|
||||
notforloan => 1,
|
||||
damaged => 1,
|
||||
withdrawn => 1,
|
||||
damaged => 1,
|
||||
withdrawn => 1,
|
||||
}
|
||||
});
|
||||
my $item_marc_1 = C4::Items::GetMarcItem( $item_1->{biblionumber}, $item_1->{itemnumber} );
|
||||
);
|
||||
my $item_marc_1 = C4::Items::GetMarcItem( $item_1->biblionumber, $item_1->itemnumber );
|
||||
my $item_field_1 = scalar $item_marc_1->field('952');
|
||||
$builder->build({ source => 'Reserve', value=> { itemnumber => $item_1->{itemnumber} } });
|
||||
$builder->build({ source => 'Branchtransfer', value=> { itemnumber => $item_1->{itemnumber}, datearrived => undef } });
|
||||
$builder->build({ source => 'Reserve', value=> { itemnumber => $item_1->itemnumber } });
|
||||
$builder->build({ source => 'Branchtransfer', value=> { itemnumber => $item_1->itemnumber, datearrived => undef } });
|
||||
## END FIRST ITEM ##
|
||||
|
||||
## SECOND ITEM HAS NO STATUSES ##
|
||||
my $item_2 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
onloan => undef,
|
||||
itemlost => 0,
|
||||
notforloan => 0,
|
||||
damaged => 0,
|
||||
withdrawn => 0,
|
||||
}
|
||||
});
|
||||
my $item_marc_2 = C4::Items::GetMarcItem( $item_2->{biblionumber}, $item_2->{itemnumber} );
|
||||
my $item_2 = $builder->build_sample_item;
|
||||
my $item_marc_2 = C4::Items::GetMarcItem( $item_2->biblionumber, $item_2->itemnumber );
|
||||
my $item_field_2 = scalar $item_marc_2->field('952');
|
||||
## END SECOND ITEM ##
|
||||
|
||||
|
|
|
|||
|
|
@ -292,45 +292,36 @@ subtest 'regression tests' => sub {
|
|||
|
||||
my $library = $builder->build( { source => 'Branch' } );
|
||||
my $patron = $builder->build( { source => 'Borrower' } );
|
||||
my $biblio1 = Koha::Biblio->new({title => 'Test Biblio 1', author => 'An author', })->store->unblessed;
|
||||
my $biblioitem1 = Koha::Biblioitem->new({biblionumber => $biblio1->{biblionumber}})->store()->unblessed;
|
||||
my $item1 = Koha::Item->new(
|
||||
my $item1 = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblio1->{biblionumber},
|
||||
biblioitemnumber => $biblioitem1->{biblioitemnumber},
|
||||
barcode => 'a_t_barcode',
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
itype => 'BK',
|
||||
itemcallnumber => 'itemcallnumber1',
|
||||
barcode => 'a_t_barcode',
|
||||
library => $library->{branchcode},
|
||||
itype => 'BK',
|
||||
itemcallnumber => 'itemcallnumber1',
|
||||
}
|
||||
)->store->unblessed;
|
||||
my $biblio2 = Koha::Biblio->new({title => 'Test Biblio 2'})->store->unblessed;
|
||||
my $biblioitem2 = Koha::Biblioitem->new({biblionumber => $biblio2->{biblionumber}})->store()->unblessed;
|
||||
my $item2 = Koha::Item->new(
|
||||
);
|
||||
my $biblio1 = $item1->biblio->unblessed;
|
||||
$item1 = $item1->unblessed;
|
||||
my $item2 = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblio2->{biblionumber},
|
||||
biblioitemnumber => $biblioitem2->{biblioitemnumber},
|
||||
barcode => 'another_t_barcode',
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
itype => 'BK',
|
||||
itemcallnumber => 'itemcallnumber2',
|
||||
barcode => 'another_t_barcode',
|
||||
library => $library->{branchcode},
|
||||
itype => 'BK',
|
||||
itemcallnumber => 'itemcallnumber2',
|
||||
}
|
||||
)->store->unblessed;
|
||||
my $biblio3 = Koha::Biblio->new({title => 'Test Biblio 3'})->store->unblessed;
|
||||
my $biblioitem3 = Koha::Biblioitem->new({biblionumber => $biblio3->{biblionumber}})->store()->unblessed;
|
||||
my $item3 = Koha::Item->new(
|
||||
);
|
||||
my $biblio2 = $item2->biblio->unblessed;
|
||||
$item2 = $item2->unblessed;
|
||||
my $item3 = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblio3->{biblionumber},
|
||||
biblioitemnumber => $biblioitem3->{biblioitemnumber},
|
||||
barcode => 'another_t_barcode_3',
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
itype => 'BK',
|
||||
itemcallnumber => 'itemcallnumber3',
|
||||
barcode => 'another_t_barcode_3',
|
||||
library => $library->{branchcode},
|
||||
itype => 'BK',
|
||||
itemcallnumber => 'itemcallnumber3',
|
||||
}
|
||||
)->store->unblessed;
|
||||
);
|
||||
my $biblio3 = $item3->biblio->unblessed;
|
||||
$item3 = $item3->unblessed;
|
||||
|
||||
t::lib::Mocks::mock_userenv({ branchcode => $library->{branchcode} });
|
||||
|
||||
|
|
|
|||
|
|
@ -87,10 +87,7 @@ my $bibnum = $builder->build_sample_biblio({frameworkcode => $frameworkcode})->b
|
|||
# Create a helper item instance for testing
|
||||
my $item = $builder->build_sample_item({ biblionumber => $bibnum, library => $branch_1, itype => $itemtype });
|
||||
|
||||
my $biblio_with_no_item = $builder->build({
|
||||
source => 'Biblio'
|
||||
});
|
||||
|
||||
my $biblio_with_no_item = $builder->build_sample_biblio;
|
||||
|
||||
# Modify item; setting barcode.
|
||||
my $testbarcode = '97531';
|
||||
|
|
@ -601,7 +598,7 @@ Koha::Patrons->find( $borrowernumber )->set({ dateofbirth => $borrower->{dateofb
|
|||
|
||||
is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblionumber)->{status} , 'OK', "Reserving a 'PEGI 16' Biblio by a 30 year old borrower succeeds");
|
||||
|
||||
is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblio_with_no_item->{biblionumber})->{status} , '', "Biblio with no item. Status is empty");
|
||||
is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblio_with_no_item->biblionumber)->{status} , '', "Biblio with no item. Status is empty");
|
||||
####
|
||||
####### EO Bug 13113 <<<
|
||||
####
|
||||
|
|
|
|||
|
|
@ -111,10 +111,8 @@ subtest 'Test handling of waiting reserves by CancelExpiredReserves' => sub {
|
|||
my $builder = t::lib::TestBuilder->new();
|
||||
my $category = $builder->build({ source => 'Category' });
|
||||
my $branchcode = $builder->build({ source => 'Branch' })->{ branchcode };
|
||||
my $biblio = $builder->build({ source => 'Biblio' });
|
||||
my $bibnum = $biblio->{biblionumber};
|
||||
my $item = $builder->build({ source => 'Item', value => { biblionumber => $bibnum }});
|
||||
my $itemnumber = $item->{itemnumber};
|
||||
my $item = $builder->build_sample_item;
|
||||
my $itemnumber = $item->itemnumber;
|
||||
my $borrowernumber = $builder->build({ source => 'Borrower', value => { categorycode => $category->{categorycode}, branchcode => $branchcode }})->{borrowernumber};
|
||||
|
||||
my $resdate = dt_from_string->add( days => -20 );
|
||||
|
|
@ -124,7 +122,7 @@ subtest 'Test handling of waiting reserves by CancelExpiredReserves' => sub {
|
|||
my $hold1 = Koha::Hold->new({
|
||||
branchcode => $branchcode,
|
||||
borrowernumber => $borrowernumber,
|
||||
biblionumber => $bibnum,
|
||||
biblionumber => $item->biblionumber,
|
||||
priority => 1,
|
||||
reservedate => $resdate,
|
||||
expirationdate => $notexpdate,
|
||||
|
|
@ -134,7 +132,7 @@ subtest 'Test handling of waiting reserves by CancelExpiredReserves' => sub {
|
|||
my $hold2 = Koha::Hold->new({
|
||||
branchcode => $branchcode,
|
||||
borrowernumber => $borrowernumber,
|
||||
biblionumber => $bibnum,
|
||||
biblionumber => $item->biblionumber,
|
||||
priority => 2,
|
||||
reservedate => $resdate,
|
||||
expirationdate => $expdate,
|
||||
|
|
@ -144,7 +142,7 @@ subtest 'Test handling of waiting reserves by CancelExpiredReserves' => sub {
|
|||
my $hold3 = Koha::Hold->new({
|
||||
branchcode => $branchcode,
|
||||
borrowernumber => $borrowernumber,
|
||||
biblionumber => $bibnum,
|
||||
biblionumber => $item->biblionumber,
|
||||
itemnumber => $itemnumber,
|
||||
priority => 0,
|
||||
reservedate => $resdate,
|
||||
|
|
|
|||
|
|
@ -69,51 +69,44 @@ my $patron3 = $builder->build({
|
|||
});
|
||||
|
||||
# One biblio and two items
|
||||
my $biblio = $builder->build({
|
||||
source => 'Biblio',
|
||||
value => {
|
||||
title => 'Title 1',
|
||||
},
|
||||
});
|
||||
my $item1 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
notforloan => 0,
|
||||
},
|
||||
});
|
||||
my $item2 = $builder->build({
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
notforloan => 0,
|
||||
},
|
||||
});
|
||||
my $biblio = $builder->build_sample_biblio;
|
||||
my $item1 = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblio->biblionumber,
|
||||
notforloan => 0,
|
||||
}
|
||||
);
|
||||
my $item2 = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblio->biblionumber,
|
||||
notforloan => 0,
|
||||
}
|
||||
);
|
||||
|
||||
subtest 'GetReserveFee' => sub {
|
||||
plan tests => 5;
|
||||
|
||||
C4::Circulation::AddIssue( $patron1, $item1->{barcode}, '2015-12-31', 0, undef, 0, {} ); # the date does not really matter
|
||||
C4::Circulation::AddIssue( $patron1, $item1->barcode, '2015-12-31', 0, undef, 0, {} ); # the date does not really matter
|
||||
my $acc2 = acctlines( $patron2->{borrowernumber} );
|
||||
my $res1 = addreserve( $patron1->{borrowernumber} );
|
||||
|
||||
t::lib::Mocks::mock_preference('HoldFeeMode', 'not_always');
|
||||
my $fee = C4::Reserves::GetReserveFee( $patron2->{borrowernumber}, $biblio->{biblionumber} );
|
||||
my $fee = C4::Reserves::GetReserveFee( $patron2->{borrowernumber}, $biblio->biblionumber );
|
||||
is( $fee > 0, 1, 'Patron 2 should be charged cf GetReserveFee' );
|
||||
C4::Reserves::ChargeReserveFee( $patron2->{borrowernumber}, $fee, $biblio->{title} );
|
||||
C4::Reserves::ChargeReserveFee( $patron2->{borrowernumber}, $fee, $biblio->title );
|
||||
is( acctlines( $patron2->{borrowernumber} ), $acc2 + 1, 'Patron 2 has been charged by ChargeReserveFee' );
|
||||
|
||||
# If we delete the reserve, there should be no charge
|
||||
$dbh->do( "DELETE FROM reserves WHERE borrowernumber = ?", undef, ( $patron1->{borrowernumber}) );
|
||||
$fee = C4::Reserves::GetReserveFee( $patron2->{borrowernumber}, $biblio->{biblionumber} );
|
||||
$fee = C4::Reserves::GetReserveFee( $patron2->{borrowernumber}, $biblio->biblionumber );
|
||||
is( $fee, 0, 'HoldFeeMode=not_always, Patron 2 should not be charged' );
|
||||
|
||||
t::lib::Mocks::mock_preference('HoldFeeMode', 'any_time_is_placed');
|
||||
$fee = C4::Reserves::GetReserveFee( $patron2->{borrowernumber}, $biblio->{biblionumber} );
|
||||
$fee = C4::Reserves::GetReserveFee( $patron2->{borrowernumber}, $biblio->biblionumber );
|
||||
is( int($fee), 2, 'HoldFeeMode=any_time_is_placed, Patron 2 should be charged' );
|
||||
|
||||
t::lib::Mocks::mock_preference('HoldFeeMode', 'any_time_is_collected');
|
||||
$fee = C4::Reserves::GetReserveFee( $patron2->{borrowernumber}, $biblio->{biblionumber} );
|
||||
$fee = C4::Reserves::GetReserveFee( $patron2->{borrowernumber}, $biblio->biblionumber );
|
||||
is( int($fee), 2, 'HoldFeeMode=any_time_is_collected, Patron 2 should be charged' );
|
||||
};
|
||||
|
||||
|
|
@ -126,19 +119,19 @@ subtest 'Integration with AddReserve' => sub {
|
|||
plan tests => 3;
|
||||
|
||||
t::lib::Mocks::mock_preference('HoldFeeMode', 'not_always');
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->{biblionumber} );
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->biblionumber );
|
||||
$dbh->do( "DELETE FROM accountlines WHERE borrowernumber=?", undef, $patron1->{borrowernumber} );
|
||||
addreserve( $patron1->{borrowernumber} );
|
||||
is( acctlines( $patron1->{borrowernumber} ), 0, 'not_always - No fee charged for patron 1 if not issued' );
|
||||
|
||||
t::lib::Mocks::mock_preference('HoldFeeMode', 'any_time_is_placed');
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->{biblionumber} );
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->biblionumber );
|
||||
$dbh->do( "DELETE FROM accountlines WHERE borrowernumber=?", undef, $patron1->{borrowernumber} );
|
||||
addreserve( $patron1->{borrowernumber} );
|
||||
is( acctlines( $patron1->{borrowernumber} ), 1, 'any_time_is_placed - Patron should be always charged' );
|
||||
|
||||
t::lib::Mocks::mock_preference('HoldFeeMode', 'any_time_is_collected');
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->{biblionumber} );
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->biblionumber );
|
||||
$dbh->do( "DELETE FROM accountlines WHERE borrowernumber=?", undef, $patron1->{borrowernumber} );
|
||||
addreserve( $patron1->{borrowernumber} );
|
||||
is( acctlines( $patron1->{borrowernumber} ), 0, 'any_time_is_collected - Patron should not be charged when placing a hold' );
|
||||
|
|
@ -147,23 +140,23 @@ subtest 'Integration with AddReserve' => sub {
|
|||
subtest 'Items are issued' => sub {
|
||||
plan tests => 3;
|
||||
|
||||
C4::Circulation::AddIssue( $patron2, $item1->{barcode}, '2015-12-31', 0, undef, 0, {} );
|
||||
C4::Circulation::AddIssue( $patron2, $item1->barcode, '2015-12-31', 0, undef, 0, {} );
|
||||
|
||||
t::lib::Mocks::mock_preference('HoldFeeMode', 'not_always');
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->{biblionumber} );
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->biblionumber );
|
||||
$dbh->do( "DELETE FROM accountlines WHERE borrowernumber=?", undef, $patron1->{borrowernumber} );
|
||||
addreserve( $patron1->{borrowernumber} );
|
||||
is( acctlines( $patron1->{borrowernumber} ), 0, 'not_always - Patron should not be charged if items are not all checked out' );
|
||||
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->{biblionumber} );
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->biblionumber );
|
||||
$dbh->do( "DELETE FROM accountlines WHERE borrowernumber=?", undef, $patron1->{borrowernumber} );
|
||||
addreserve( $patron3->{borrowernumber} );
|
||||
addreserve( $patron1->{borrowernumber} );
|
||||
# FIXME Are we sure it's the expected behavior?
|
||||
is( acctlines( $patron1->{borrowernumber} ), 1, 'not_always - Patron should be charged if all the items are not checked out and at least 1 hold is already placed' );
|
||||
|
||||
C4::Circulation::AddIssue( $patron3, $item2->{barcode}, '2015-12-31', 0, undef, 0, {} );
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->{biblionumber} );
|
||||
C4::Circulation::AddIssue( $patron3, $item2->barcode, '2015-12-31', 0, undef, 0, {} );
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->biblionumber );
|
||||
$dbh->do( "DELETE FROM accountlines WHERE borrowernumber=?", undef, $patron1->{borrowernumber} );
|
||||
addreserve( $patron1->{borrowernumber} );
|
||||
is( acctlines( $patron1->{borrowernumber} ), 1, 'not_always - Patron should be charged if all items are checked out' );
|
||||
|
|
@ -174,27 +167,27 @@ subtest 'Integration with AddIssue' => sub {
|
|||
plan tests => 5;
|
||||
|
||||
$dbh->do( "DELETE FROM issues WHERE borrowernumber = ?", undef, $patron1->{borrowernumber} );
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->{biblionumber} );
|
||||
$dbh->do( "DELETE FROM reserves WHERE biblionumber=?", undef, $biblio->biblionumber );
|
||||
$dbh->do( "DELETE FROM accountlines WHERE borrowernumber=?", undef, $patron1->{borrowernumber} );
|
||||
|
||||
t::lib::Mocks::mock_preference('HoldFeeMode', 'not_always');
|
||||
C4::Circulation::AddIssue( $patron1, $item1->{barcode}, '2015-12-31', 0, undef, 0, {} );
|
||||
C4::Circulation::AddIssue( $patron1, $item1->barcode, '2015-12-31', 0, undef, 0, {} );
|
||||
is( acctlines( $patron1->{borrowernumber} ), 0, 'not_always - Patron should not be charged' );
|
||||
|
||||
t::lib::Mocks::mock_preference('HoldFeeMode', 'any_time_is_placed');
|
||||
$dbh->do( "DELETE FROM issues WHERE borrowernumber = ?", undef, $patron1->{borrowernumber} );
|
||||
C4::Circulation::AddIssue( $patron1, $item1->{barcode}, '2015-12-31', 0, undef, 0, {} );
|
||||
C4::Circulation::AddIssue( $patron1, $item1->barcode, '2015-12-31', 0, undef, 0, {} );
|
||||
is( acctlines( $patron1->{borrowernumber} ), 0, 'not_always - Patron should not be charged' );
|
||||
|
||||
t::lib::Mocks::mock_preference('HoldFeeMode', 'any_time_is_collected');
|
||||
$dbh->do( "DELETE FROM issues WHERE borrowernumber = ?", undef, $patron1->{borrowernumber} );
|
||||
C4::Circulation::AddIssue( $patron1, $item1->{barcode}, '2015-12-31', 0, undef, 0, {} );
|
||||
C4::Circulation::AddIssue( $patron1, $item1->barcode, '2015-12-31', 0, undef, 0, {} );
|
||||
is( acctlines( $patron1->{borrowernumber} ), 0, 'any_time_is_collected - Patron should not be charged when checking out an item which was not placed hold for him' );
|
||||
|
||||
$dbh->do( "DELETE FROM issues WHERE borrowernumber = ?", undef, $patron1->{borrowernumber} );
|
||||
my $id = addreserve( $patron1->{borrowernumber} );
|
||||
is( acctlines( $patron1->{borrowernumber} ), 0, 'any_time_is_collected - Patron should not be charged yet (just checking to make sure)');
|
||||
C4::Circulation::AddIssue( $patron1, $item1->{barcode}, '2015-12-31', 0, undef, 0, {} );
|
||||
C4::Circulation::AddIssue( $patron1, $item1->barcode, '2015-12-31', 0, undef, 0, {} );
|
||||
is( acctlines( $patron1->{borrowernumber} ), 1, 'any_time_is_collected - Patron should not be charged when checking out an item which was not placed hold for him' );
|
||||
};
|
||||
|
||||
|
|
@ -208,9 +201,9 @@ sub addreserve {
|
|||
{
|
||||
branchcode => $library->{branchcode},
|
||||
borrowernumber => $_[0],
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
biblionumber => $biblio->biblionumber,
|
||||
priority => '1',
|
||||
title => $biblio->{title},
|
||||
title => $biblio->title,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -64,54 +64,26 @@ my $itemtype2 = $builder->build(
|
|||
}
|
||||
);
|
||||
|
||||
my $biblio = $builder->build(
|
||||
my $biblio = $builder->build_sample_biblio;
|
||||
my $item1 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Biblio',
|
||||
value => {
|
||||
title => 'Title 1',
|
||||
},
|
||||
biblionumber => $biblio->biblionumber,
|
||||
itype => $itemtype1->{itemtype},
|
||||
library => $library->{branchcode},
|
||||
},
|
||||
);
|
||||
my $item2 = $builder->build_sample_item(
|
||||
{
|
||||
biblionumber => $biblio->biblionumber,
|
||||
itype => $itemtype2->{itemtype},
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
);
|
||||
my $biblioitem = $builder->build(
|
||||
my $item3 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Biblioitem',
|
||||
value => { biblionumber => $biblio->{biblionumber} }
|
||||
}
|
||||
);
|
||||
my $item1 = $builder->build(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
itype => $itemtype1->{itemtype},
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
damaged => 0,
|
||||
},
|
||||
}
|
||||
);
|
||||
my $item2 = $builder->build(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
itype => $itemtype2->{itemtype},
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
damaged => 0,
|
||||
},
|
||||
}
|
||||
);
|
||||
my $item3 = $builder->build(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
itype => $itemtype2->{itemtype},
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
damaged => 0,
|
||||
},
|
||||
biblionumber => $biblio->biblionumber,
|
||||
itype => $itemtype2->{itemtype},
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
);
|
||||
|
||||
|
|
@ -132,7 +104,7 @@ Koha::CirculationRules->set_rules(
|
|||
|
||||
t::lib::Mocks::mock_preference('item-level_itypes', 1); # Assuming the item type is defined at item level
|
||||
|
||||
my $max = GetMaxPatronHoldsForRecord( $patron->{borrowernumber}, $biblio->{biblionumber} );
|
||||
my $max = GetMaxPatronHoldsForRecord( $patron->{borrowernumber}, $biblio->biblionumber );
|
||||
is( $max, 1, 'GetMaxPatronHoldsForRecord returns max of 1' );
|
||||
my $rule = C4::Reserves::GetHoldRule(
|
||||
$category->{categorycode},
|
||||
|
|
@ -157,7 +129,7 @@ Koha::CirculationRules->set_rules(
|
|||
}
|
||||
);
|
||||
|
||||
$max = GetMaxPatronHoldsForRecord( $patron->{borrowernumber}, $biblio->{biblionumber} );
|
||||
$max = GetMaxPatronHoldsForRecord( $patron->{borrowernumber}, $biblio->biblionumber );
|
||||
is( $max, 2, 'GetMaxPatronHoldsForRecord returns max of 2' );
|
||||
$rule = C4::Reserves::GetHoldRule(
|
||||
$category->{categorycode},
|
||||
|
|
@ -182,7 +154,7 @@ Koha::CirculationRules->set_rules(
|
|||
}
|
||||
);
|
||||
|
||||
$max = GetMaxPatronHoldsForRecord( $patron->{borrowernumber}, $biblio->{biblionumber} );
|
||||
$max = GetMaxPatronHoldsForRecord( $patron->{borrowernumber}, $biblio->biblionumber );
|
||||
is( $max, 3, 'GetMaxPatronHoldsForRecord returns max of 3' );
|
||||
$rule = C4::Reserves::GetHoldRule(
|
||||
$category->{categorycode},
|
||||
|
|
@ -207,7 +179,7 @@ Koha::CirculationRules->set_rules(
|
|||
}
|
||||
);
|
||||
|
||||
$max = GetMaxPatronHoldsForRecord( $patron->{borrowernumber}, $biblio->{biblionumber} );
|
||||
$max = GetMaxPatronHoldsForRecord( $patron->{borrowernumber}, $biblio->biblionumber );
|
||||
is( $max, 4, 'GetMaxPatronHoldsForRecord returns max of 4' );
|
||||
$rule = C4::Reserves::GetHoldRule(
|
||||
$category->{categorycode},
|
||||
|
|
@ -232,7 +204,7 @@ Koha::CirculationRules->set_rules(
|
|||
}
|
||||
);
|
||||
|
||||
$max = GetMaxPatronHoldsForRecord( $patron->{borrowernumber}, $biblio->{biblionumber} );
|
||||
$max = GetMaxPatronHoldsForRecord( $patron->{borrowernumber}, $biblio->biblionumber );
|
||||
is( $max, 5, 'GetMaxPatronHoldsForRecord returns max of 1' );
|
||||
$rule = C4::Reserves::GetHoldRule(
|
||||
$category->{categorycode},
|
||||
|
|
@ -254,7 +226,7 @@ is( $holds->forced_hold_level, undef, "No holds does not force an item or record
|
|||
my $hold = Koha::Hold->new({
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
reservedate => '1981-06-10',
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
biblionumber => $biblio->biblionumber,
|
||||
branchcode => $library->{branchcode},
|
||||
priority => 1,
|
||||
})->store();
|
||||
|
|
@ -262,7 +234,7 @@ my $hold = Koha::Hold->new({
|
|||
$holds = Koha::Holds->search( { borrowernumber => $patron->{borrowernumber} } );
|
||||
is( $holds->forced_hold_level, 'record', "Record level hold forces record level holds" );
|
||||
|
||||
$hold->itemnumber( $item1->{itemnumber} );
|
||||
$hold->itemnumber( $item1->itemnumber );
|
||||
$hold->store();
|
||||
|
||||
$holds = Koha::Holds->search( { borrowernumber => $patron->{borrowernumber} } );
|
||||
|
|
@ -283,38 +255,38 @@ Koha::CirculationRules->set_rules(
|
|||
}
|
||||
);
|
||||
|
||||
my $can = CanBookBeReserved($patron->{borrowernumber}, $biblio->{biblionumber});
|
||||
my $can = CanBookBeReserved($patron->{borrowernumber}, $biblio->biblionumber);
|
||||
is( $can->{status}, 'OK', 'Hold can be placed with 0 holds' );
|
||||
my $hold_id = AddReserve(
|
||||
{
|
||||
branchcode => $library->{branchcode},
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
biblionumber => $biblio->biblionumber,
|
||||
priority => 1
|
||||
}
|
||||
);
|
||||
ok( $hold_id, 'First hold was placed' );
|
||||
|
||||
$can = CanBookBeReserved($patron->{borrowernumber}, $biblio->{biblionumber});
|
||||
$can = CanBookBeReserved($patron->{borrowernumber}, $biblio->biblionumber);
|
||||
is( $can->{status}, 'OK', 'Hold can be placed with 1 hold' );
|
||||
$hold_id = AddReserve(
|
||||
{
|
||||
branchcode => $library->{branchcode},
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
biblionumber => $biblio->biblionumber,
|
||||
priority => 1
|
||||
}
|
||||
);
|
||||
ok( $hold_id, 'Second hold was placed' );
|
||||
|
||||
$can = CanBookBeReserved($patron->{borrowernumber}, $biblio->{biblionumber});
|
||||
$can = CanBookBeReserved($patron->{borrowernumber}, $biblio->biblionumber);
|
||||
is( $can->{status}, 'tooManyHoldsForThisRecord', 'Third hold exceeds limit of holds per record' );
|
||||
|
||||
Koha::Holds->find($hold_id)->found("W")->store;
|
||||
$can = CanBookBeReserved($patron->{borrowernumber}, $biblio->{biblionumber});
|
||||
$can = CanBookBeReserved($patron->{borrowernumber}, $biblio->biblionumber);
|
||||
is( $can->{status}, 'tooManyHoldsForThisRecord', 'Third hold exceeds limit of holds per record' );
|
||||
|
||||
$can = CanBookBeReserved($patron->{borrowernumber}, $biblio->{biblionumber}, undef, { ignore_found_holds => 1 });
|
||||
$can = CanBookBeReserved($patron->{borrowernumber}, $biblio->biblionumber, undef, { ignore_found_holds => 1 });
|
||||
is( $can->{status}, 'OK', 'Third hold is allowed when ignoring waiting holds' );
|
||||
|
||||
$schema->storage->txn_rollback;
|
||||
|
|
|
|||
|
|
@ -50,41 +50,24 @@ my $patron = $builder->build(
|
|||
);
|
||||
|
||||
|
||||
my $biblio = $builder->build(
|
||||
my $biblio = $builder->build_sample_biblio;
|
||||
my $item1 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Biblio',
|
||||
value => {
|
||||
title => 'Title 1',
|
||||
},
|
||||
biblionumber => $biblio->biblionumber,
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
);
|
||||
|
||||
my $item1 = $builder->build(
|
||||
my $item2 = $builder->build_sample_item(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
my $item2 = $builder->build(
|
||||
{
|
||||
source => 'Item',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
homebranch => $library->{branchcode},
|
||||
holdingbranch => $library->{branchcode},
|
||||
},
|
||||
biblionumber => $biblio->biblionumber,
|
||||
library => $library->{branchcode},
|
||||
}
|
||||
);
|
||||
|
||||
my $hold1 = Koha::Hold->new(
|
||||
{
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
itemnumber => $item1->{itemnumber},
|
||||
biblionumber => $biblio->biblionumber,
|
||||
itemnumber => $item1->itemnumber,
|
||||
waitingdate => '2000-01-01',
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
branchcode => $library->{branchcode},
|
||||
|
|
@ -93,8 +76,8 @@ my $hold1 = Koha::Hold->new(
|
|||
|
||||
my $hold2 = Koha::Hold->new(
|
||||
{
|
||||
biblionumber => $biblio->{biblionumber},
|
||||
itemnumber => $item2->{itemnumber},
|
||||
biblionumber => $biblio->biblionumber,
|
||||
itemnumber => $item2->itemnumber,
|
||||
waitingdate => '2000-01-01',
|
||||
borrowernumber => $patron->{borrowernumber},
|
||||
branchcode => $library->{branchcode},
|
||||
|
|
@ -126,7 +109,7 @@ is (ReserveSlip({
|
|||
branchcode => $library->{branchcode},
|
||||
reserve_id => $hold1->reserve_id,
|
||||
})->{content},
|
||||
"Hold found for $patron->{firstname}: Please pick up $biblio->{title} with barcode $item1->{barcode} at $library->{branchcode}.", "Hold slip contains correctly parsed content");
|
||||
sprintf( "Hold found for %s: Please pick up %s with barcode %s at %s.", $patron->{firstname}, $biblio->title, $item1->barcode, $library->{branchcode}),"Hold slip contains correctly parsed content");
|
||||
|
||||
$schema->storage->txn_rollback;
|
||||
|
||||
|
|
|
|||
|
|
@ -176,14 +176,14 @@ subtest "Test build_additional_item_fields_string" => sub {
|
|||
|
||||
my $builder = t::lib::TestBuilder->new();
|
||||
|
||||
my $item = $builder->build( { source => 'Item' } );
|
||||
my $ils_item = C4::SIP::ILS::Item->new( $item->{barcode} );
|
||||
my $item = $builder->build_sample_item;
|
||||
my $ils_item = C4::SIP::ILS::Item->new( $item->barcode );
|
||||
|
||||
my $server = {};
|
||||
$server->{account}->{item_field}->{code} = 'itemnumber';
|
||||
$server->{account}->{item_field}->{field} = 'XY';
|
||||
my $attribute_string = $ils_item->build_additional_item_fields_string( $server );
|
||||
is( $attribute_string, "XY$item->{itemnumber}|", 'Attribute field generated correctly with single param' );
|
||||
is( $attribute_string, "XY".$item->itemnumber."|", 'Attribute field generated correctly with single param' );
|
||||
|
||||
$server = {};
|
||||
$server->{account}->{item_field}->[0]->{code} = 'itemnumber';
|
||||
|
|
@ -191,7 +191,7 @@ subtest "Test build_additional_item_fields_string" => sub {
|
|||
$server->{account}->{item_field}->[1]->{code} = 'biblionumber';
|
||||
$server->{account}->{item_field}->[1]->{field} = 'YZ';
|
||||
$attribute_string = $ils_item->build_additional_item_fields_string( $server );
|
||||
is( $attribute_string, "XY$item->{itemnumber}|YZ$item->{biblionumber}|", 'Attribute field generated correctly with multiple params' );
|
||||
is( $attribute_string, sprintf("XY%s|YZ%s|", $item->itemnumber, $item->biblionumber), 'Attribute field generated correctly with multiple params' );
|
||||
|
||||
$schema->storage->txn_rollback;
|
||||
};
|
||||
|
|
@ -604,14 +604,14 @@ sub test_hold_patron_bcode {
|
|||
my ( $response, $findpatron );
|
||||
my $mocks = create_mocks( \$response, \$findpatron, \$branchcode );
|
||||
|
||||
my $item = $builder->build({
|
||||
source => 'Item',
|
||||
value => { damaged => 0, withdrawn => 0, itemlost => 0, restricted => 0, homebranch => $branchcode, holdingbranch => $branchcode },
|
||||
});
|
||||
my $item_object = Koha::Items->find( $item->{itemnumber} );
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
library => $branchcode
|
||||
}
|
||||
);
|
||||
|
||||
my $server = { ils => $mocks->{ils} };
|
||||
my $sip_item = C4::SIP::ILS::Item->new( $item->{barcode} );
|
||||
my $sip_item = C4::SIP::ILS::Item->new( $item->barcode );
|
||||
|
||||
is( $sip_item->hold_patron_bcode, q{}, "SIP item with no hold returns empty string" );
|
||||
|
||||
|
|
|
|||
|
|
@ -66,12 +66,12 @@ subtest 'Basic object tests' => sub {
|
|||
|
||||
#### Test add_item
|
||||
|
||||
my $item = $builder->build({ source => 'Item' });
|
||||
my $item = $builder->build_sample_item;
|
||||
|
||||
$srrota->add_item($item->{itemnumber});
|
||||
$srrota->add_item($item->itemnumber);
|
||||
|
||||
is(
|
||||
Koha::StockRotationItems->find($item->{itemnumber})->stage_id,
|
||||
Koha::StockRotationItems->find($item->itemnumber)->stage_id,
|
||||
$srrota->first_stage->stage_id,
|
||||
"Adding an item results in a new sritem item being assigned to the first stage."
|
||||
);
|
||||
|
|
@ -85,10 +85,10 @@ subtest 'Basic object tests' => sub {
|
|||
value => { rota_id => $newrota->{rota_id} },
|
||||
});
|
||||
|
||||
$srnewrota->add_item($item->{itemnumber});
|
||||
$srnewrota->add_item($item->itemnumber);
|
||||
|
||||
is(
|
||||
Koha::StockRotationItems->find($item->{itemnumber})->stage_id,
|
||||
Koha::StockRotationItems->find($item->itemnumber)->stage_id,
|
||||
$srnewrota->stockrotationstages->next->stage_id,
|
||||
"Moving an item results in that sritem being assigned to the new first stage."
|
||||
);
|
||||
|
|
|
|||
|
|
@ -174,10 +174,10 @@ subtest 'Shelf content' => sub {
|
|||
plan tests => 18;
|
||||
my $patron1 = $builder->build( { source => 'Borrower', } );
|
||||
my $patron2 = $builder->build( { source => 'Borrower', } );
|
||||
my $biblio1 = $builder->build( { source => 'Biblio', } );
|
||||
my $biblio2 = $builder->build( { source => 'Biblio', } );
|
||||
my $biblio3 = $builder->build( { source => 'Biblio', } );
|
||||
my $biblio4 = $builder->build( { source => 'Biblio', } );
|
||||
my $biblio1 = $builder->build_sample_biblio;
|
||||
my $biblio2 = $builder->build_sample_biblio;
|
||||
my $biblio3 = $builder->build_sample_biblio;
|
||||
my $biblio4 = $builder->build_sample_biblio;
|
||||
my $number_of_contents = Koha::Virtualshelfcontents->search->count;
|
||||
|
||||
is( $number_of_contents, 0, 'No content should exist' );
|
||||
|
|
@ -193,15 +193,15 @@ subtest 'Shelf content' => sub {
|
|||
|
||||
$shelf = Koha::Virtualshelves->find( $shelf->shelfnumber );
|
||||
is( t::lib::Dates::compare( $shelf->lastmodified, $dt_yesterday), 0, 'The lastmodified has been set to yesterday, will be useful for another test later' );
|
||||
my $content1 = $shelf->add_biblio( $biblio1->{biblionumber}, $patron1->{borrowernumber} );
|
||||
my $content1 = $shelf->add_biblio( $biblio1->biblionumber, $patron1->{borrowernumber} );
|
||||
is( ref($content1), 'Koha::Virtualshelfcontent', 'add_biblio to a shelf should return a Koha::Virtualshelfcontent object if inserted' );
|
||||
$shelf = Koha::Virtualshelves->find( $shelf->shelfnumber );
|
||||
is( t::lib::Dates::compare( $shelf->lastmodified, dt_from_string), 0, 'Adding a biblio to a shelf should update the lastmodified for the shelf' );
|
||||
my $content2 = $shelf->add_biblio( $biblio2->{biblionumber}, $patron1->{borrowernumber} );
|
||||
my $content2 = $shelf->add_biblio( $biblio2->biblionumber, $patron1->{borrowernumber} );
|
||||
$number_of_contents = Koha::Virtualshelfcontents->search->count;
|
||||
is( $number_of_contents, 2, '2 biblio should have been inserted' );
|
||||
|
||||
my $content1_bis = $shelf->add_biblio( $biblio1->{biblionumber}, $patron1->{borrowernumber} );
|
||||
my $content1_bis = $shelf->add_biblio( $biblio1->biblionumber, $patron1->{borrowernumber} );
|
||||
is( $content1_bis, undef, 'add_biblio should return undef on duplicate' ); # Or an exception ?
|
||||
$number_of_contents = Koha::Virtualshelfcontents->search->count;
|
||||
is( $number_of_contents, 2, 'The biblio should not have been duplicated' );
|
||||
|
|
@ -212,10 +212,10 @@ subtest 'Shelf content' => sub {
|
|||
|
||||
# Patron 2 will try to remove biblios
|
||||
# allow_change_from_owner = 1, allow_change_from_others = 0 (defaults)
|
||||
my $number_of_deleted_biblios = $shelf->remove_biblios( { biblionumbers => [ $biblio1->{biblionumber} ], borrowernumber => $patron2->{borrowernumber} } );
|
||||
my $number_of_deleted_biblios = $shelf->remove_biblios( { biblionumbers => [ $biblio1->biblionumber ], borrowernumber => $patron2->{borrowernumber} } );
|
||||
is( $number_of_deleted_biblios, 0, 'Patron 2 removed nothing' );
|
||||
# Now try with patron 1
|
||||
$number_of_deleted_biblios = $shelf->remove_biblios( { biblionumbers => [ $biblio1->{biblionumber} ], borrowernumber => $patron1->{borrowernumber} } );
|
||||
$number_of_deleted_biblios = $shelf->remove_biblios( { biblionumbers => [ $biblio1->biblionumber ], borrowernumber => $patron1->{borrowernumber} } );
|
||||
is( $number_of_deleted_biblios, 1, 'Patron 1 removed biblio' );
|
||||
$number_of_contents = Koha::Virtualshelfcontents->search->count;
|
||||
is( $number_of_contents, 1, 'To be sure the content has been deleted' );
|
||||
|
|
@ -223,26 +223,26 @@ subtest 'Shelf content' => sub {
|
|||
# allow_change_from_owner == 0 (readonly)
|
||||
$shelf->allow_change_from_owner( 0 );
|
||||
$shelf->store;
|
||||
$number_of_deleted_biblios = $shelf->remove_biblios( { biblionumbers => [ $biblio2->{biblionumber} ], borrowernumber => $patron1->{borrowernumber} } );
|
||||
$number_of_deleted_biblios = $shelf->remove_biblios( { biblionumbers => [ $biblio2->biblionumber ], borrowernumber => $patron1->{borrowernumber} } );
|
||||
is( $number_of_deleted_biblios, 0, 'Owner could not delete' );
|
||||
$number_of_contents = Koha::Virtualshelfcontents->search->count;
|
||||
is( $number_of_contents, 1, 'Number of entries still equal to 1' );
|
||||
$shelf->add_biblio( $biblio2->{biblionumber}, $patron1->{borrowernumber} );
|
||||
$shelf->add_biblio( $biblio2->biblionumber, $patron1->{borrowernumber} );
|
||||
$number_of_contents = Koha::Virtualshelfcontents->search->count;
|
||||
is( $number_of_contents, 1, 'Biblio not added to the list' );
|
||||
# Add back biblio1
|
||||
$shelf->allow_change_from_owner( 1 );
|
||||
$shelf->add_biblio( $biblio1->{biblionumber}, $patron1->{borrowernumber} );
|
||||
$shelf->add_biblio( $biblio1->biblionumber, $patron1->{borrowernumber} );
|
||||
$number_of_contents = Koha::Virtualshelfcontents->search->count;
|
||||
is( $number_of_contents, 2, 'Biblio added to the list' );
|
||||
|
||||
# allow_change_from_others == 1
|
||||
$shelf->allow_change_from_others( 1 );
|
||||
my $content3 = $shelf->add_biblio( $biblio3->{biblionumber}, $patron2->{borrowernumber} );
|
||||
my $content4 = $shelf->add_biblio( $biblio4->{biblionumber}, $patron2->{borrowernumber} );
|
||||
my $content3 = $shelf->add_biblio( $biblio3->biblionumber, $patron2->{borrowernumber} );
|
||||
my $content4 = $shelf->add_biblio( $biblio4->biblionumber, $patron2->{borrowernumber} );
|
||||
$number_of_contents = Koha::Virtualshelfcontents->search->count;
|
||||
is( $number_of_contents, 4, 'The biblio should have been added to the shelf by the patron 2' );
|
||||
$number_of_deleted_biblios = $shelf->remove_biblios( { biblionumbers => [ $biblio3->{biblionumber} ], borrowernumber => $patron2->{borrowernumber} } );
|
||||
$number_of_deleted_biblios = $shelf->remove_biblios( { biblionumbers => [ $biblio3->biblionumber ], borrowernumber => $patron2->{borrowernumber} } );
|
||||
is( $number_of_deleted_biblios, 1, 'Biblio 3 deleted by patron 2' );
|
||||
$number_of_contents = Koha::Virtualshelfcontents->search->count;
|
||||
is( $number_of_contents, 3, 'Back to three entries' );
|
||||
|
|
@ -255,11 +255,10 @@ subtest 'Shelf permissions' => sub {
|
|||
plan tests => 40;
|
||||
my $patron1 = $builder->build( { source => 'Borrower', value => { flags => '2096766' } } ); # 2096766 is everything checked but not superlibrarian
|
||||
my $patron2 = $builder->build( { source => 'Borrower', value => { flags => '1048190' } } ); # 1048190 is everything checked but not superlibrarian and delete_public_lists
|
||||
my $biblio1 = $builder->build( { source => 'Biblio', } );
|
||||
my $biblio2 = $builder->build( { source => 'Biblio', } );
|
||||
my $biblio3 = $builder->build( { source => 'Biblio', } );
|
||||
my $biblio4 = $builder->build( { source => 'Biblio', } );
|
||||
|
||||
my $biblio1 = $builder->build_sample_biblio;
|
||||
my $biblio2 = $builder->build_sample_biblio;
|
||||
my $biblio3 = $builder->build_sample_biblio;
|
||||
my $biblio4 = $builder->build_sample_biblio;
|
||||
|
||||
my $public_shelf = Koha::Virtualshelf->new(
|
||||
{ shelfname => "my first shelf",
|
||||
|
|
@ -412,10 +411,10 @@ subtest 'Get shelves containing biblios' => sub {
|
|||
plan tests => 9;
|
||||
my $patron1 = $builder->build( { source => 'Borrower', } );
|
||||
my $patron2 = $builder->build( { source => 'Borrower', } );
|
||||
my $biblio1 = $builder->build( { source => 'Biblio', } );
|
||||
my $biblio2 = $builder->build( { source => 'Biblio', } );
|
||||
my $biblio3 = $builder->build( { source => 'Biblio', } );
|
||||
my $biblio4 = $builder->build( { source => 'Biblio', } );
|
||||
my $biblio1 = $builder->build_sample_biblio;
|
||||
my $biblio2 = $builder->build_sample_biblio;
|
||||
my $biblio3 = $builder->build_sample_biblio;
|
||||
my $biblio4 = $builder->build_sample_biblio;
|
||||
|
||||
my $shelf1 = Koha::Virtualshelf->new(
|
||||
{ shelfname => "my first shelf",
|
||||
|
|
@ -436,23 +435,23 @@ subtest 'Get shelves containing biblios' => sub {
|
|||
}
|
||||
)->store;
|
||||
|
||||
my $content1 = $shelf1->add_biblio( $biblio1->{biblionumber}, $patron1->{borrowernumber} );
|
||||
my $content2 = $shelf1->add_biblio( $biblio2->{biblionumber}, $patron1->{borrowernumber} );
|
||||
my $content3 = $shelf2->add_biblio( $biblio2->{biblionumber}, $patron2->{borrowernumber} );
|
||||
my $content4 = $shelf2->add_biblio( $biblio3->{biblionumber}, $patron2->{borrowernumber} );
|
||||
my $content5 = $shelf2->add_biblio( $biblio4->{biblionumber}, $patron2->{borrowernumber} );
|
||||
my $content6 = $shelf3->add_biblio( $biblio4->{biblionumber}, $patron1->{borrowernumber} );
|
||||
my $content1 = $shelf1->add_biblio( $biblio1->biblionumber, $patron1->{borrowernumber} );
|
||||
my $content2 = $shelf1->add_biblio( $biblio2->biblionumber, $patron1->{borrowernumber} );
|
||||
my $content3 = $shelf2->add_biblio( $biblio2->biblionumber, $patron2->{borrowernumber} );
|
||||
my $content4 = $shelf2->add_biblio( $biblio3->biblionumber, $patron2->{borrowernumber} );
|
||||
my $content5 = $shelf2->add_biblio( $biblio4->biblionumber, $patron2->{borrowernumber} );
|
||||
my $content6 = $shelf3->add_biblio( $biblio4->biblionumber, $patron1->{borrowernumber} );
|
||||
|
||||
my $shelves_with_biblio1_for_any_patrons = Koha::Virtualshelves->get_shelves_containing_record(
|
||||
{
|
||||
biblionumber => $biblio1->{biblionumber},
|
||||
biblionumber => $biblio1->biblionumber,
|
||||
}
|
||||
);
|
||||
is ( $shelves_with_biblio1_for_any_patrons->count, 0, 'shelf1 is private and should not be displayed if patron is not logged in' );
|
||||
|
||||
my $shelves_with_biblio4_for_any_patrons = Koha::Virtualshelves->get_shelves_containing_record(
|
||||
{
|
||||
biblionumber => $biblio4->{biblionumber},
|
||||
biblionumber => $biblio4->biblionumber,
|
||||
}
|
||||
);
|
||||
is ( $shelves_with_biblio4_for_any_patrons->count, 1, 'shelf3 is public and should be displayed for any patrons' );
|
||||
|
|
@ -460,7 +459,7 @@ subtest 'Get shelves containing biblios' => sub {
|
|||
|
||||
my $shelves_with_biblio1_for_other_patrons = Koha::Virtualshelves->get_shelves_containing_record(
|
||||
{
|
||||
biblionumber => $biblio1->{biblionumber},
|
||||
biblionumber => $biblio1->biblionumber,
|
||||
borrowernumber => $patron2->{borrowernumber},
|
||||
}
|
||||
);
|
||||
|
|
@ -468,7 +467,7 @@ subtest 'Get shelves containing biblios' => sub {
|
|||
|
||||
my $shelves_with_biblio1_for_owner = Koha::Virtualshelves->get_shelves_containing_record(
|
||||
{
|
||||
biblionumber => $biblio1->{biblionumber},
|
||||
biblionumber => $biblio1->biblionumber,
|
||||
borrowernumber => $patron1->{borrowernumber},
|
||||
}
|
||||
);
|
||||
|
|
@ -476,7 +475,7 @@ subtest 'Get shelves containing biblios' => sub {
|
|||
|
||||
my $shelves_with_biblio2_for_patron1 = Koha::Virtualshelves->get_shelves_containing_record(
|
||||
{
|
||||
biblionumber => $biblio2->{biblionumber},
|
||||
biblionumber => $biblio2->biblionumber,
|
||||
borrowernumber => $patron1->{borrowernumber},
|
||||
}
|
||||
);
|
||||
|
|
@ -485,7 +484,7 @@ subtest 'Get shelves containing biblios' => sub {
|
|||
|
||||
my $shelves_with_biblio4_for_patron2 = Koha::Virtualshelves->get_shelves_containing_record(
|
||||
{
|
||||
biblionumber => $biblio4->{biblionumber},
|
||||
biblionumber => $biblio4->biblionumber,
|
||||
borrowernumber => $patron2->{borrowernumber},
|
||||
}
|
||||
);
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ subtest 'list() tests' => sub {
|
|||
|
||||
$schema->storage->txn_begin;
|
||||
|
||||
my $item = $builder->build_object( { class => 'Koha::Items' } );
|
||||
my $item = $builder->build_sample_item;
|
||||
my $patron = $builder->build_object(
|
||||
{
|
||||
class => 'Koha::Patrons',
|
||||
|
|
@ -53,7 +53,7 @@ subtest 'list() tests' => sub {
|
|||
|
||||
# Make sure we have at least 10 items
|
||||
for ( 1..10 ) {
|
||||
$builder->build_object({ class => 'Koha::Items' });
|
||||
$builder->build_sample_item;
|
||||
}
|
||||
|
||||
my $nonprivilegedpatron = $builder->build_object(
|
||||
|
|
@ -105,7 +105,7 @@ subtest 'get() tests' => sub {
|
|||
|
||||
$schema->storage->txn_begin;
|
||||
|
||||
my $item = $builder->build_object( { class => 'Koha::Items' } );
|
||||
my $item = $builder->build_sample_item;
|
||||
my $patron = $builder->build_object({
|
||||
class => 'Koha::Patrons',
|
||||
value => { flags => 4 }
|
||||
|
|
|
|||
|
|
@ -117,24 +117,9 @@ DELETESQL
|
|||
}
|
||||
});
|
||||
|
||||
my $biblio = $builder->build({
|
||||
source => 'Biblio',
|
||||
});
|
||||
my $biblioitem = $builder->build({
|
||||
source => 'Biblioitem',
|
||||
value => {
|
||||
biblionumber => $biblio->{biblionumber}
|
||||
}
|
||||
});
|
||||
my $item1 = $builder->build({
|
||||
source => 'Item'
|
||||
});
|
||||
my $item2 = $builder->build({
|
||||
source => 'Item'
|
||||
});
|
||||
my $item3 = $builder->build({
|
||||
source => 'Item'
|
||||
});
|
||||
my $item1 = $builder->build_sample_item;
|
||||
my $item2 = $builder->build_sample_item;
|
||||
my $item3 = $builder->build_sample_item;
|
||||
my $now = dt_from_string();
|
||||
my $tomorrow = $now->add(days => 1)->strftime('%F');
|
||||
|
||||
|
|
@ -142,7 +127,7 @@ DELETESQL
|
|||
source => 'Issue',
|
||||
value => {
|
||||
date_due => $tomorrow,
|
||||
itemnumber => $item1->{itemnumber},
|
||||
itemnumber => $item1->itemnumber,
|
||||
branchcode => $library2->{branchcode},
|
||||
borrowernumber => $borrower->{borrowernumber},
|
||||
returndate => undef
|
||||
|
|
@ -153,7 +138,7 @@ DELETESQL
|
|||
source => 'Issue',
|
||||
value => {
|
||||
date_due => $tomorrow,
|
||||
itemnumber => $item2->{itemnumber},
|
||||
itemnumber => $item2->itemnumber,
|
||||
branchcode => $library3->{branchcode},
|
||||
borrowernumber => $borrower->{borrowernumber},
|
||||
returndate => undef
|
||||
|
|
@ -163,7 +148,7 @@ DELETESQL
|
|||
source => 'Issue',
|
||||
value => {
|
||||
date_due => $tomorrow,
|
||||
itemnumber => $item3->{itemnumber},
|
||||
itemnumber => $item3->itemnumber,
|
||||
branchcode => $library3->{branchcode},
|
||||
borrowernumber => $borrower->{borrowernumber},
|
||||
returndate => undef
|
||||
|
|
|
|||
|
|
@ -29,27 +29,21 @@ my $test_item_24 = '502326000404';
|
|||
my $test_item_48 = '502326000403';
|
||||
|
||||
my $borrower1 = $builder->build_object({ class => 'Koha::Patrons', value => { cardnumber => $test_patron } });
|
||||
my $item1 = $builder->build_object({
|
||||
class => 'Koha::Items',
|
||||
value => {
|
||||
my $item1 = $builder->build_sample_item(
|
||||
{
|
||||
barcode => $test_item_fic,
|
||||
biblionumber => $builder->build( { source => 'Biblioitem' } )->{biblionumber},
|
||||
}
|
||||
});
|
||||
my $item2 = $builder->build_object({
|
||||
class => 'Koha::Items',
|
||||
value => {
|
||||
);
|
||||
my $item2 = $builder->build_sample_item(
|
||||
{
|
||||
barcode => $test_item_24,
|
||||
biblionumber => $builder->build( { source => 'Biblioitem' } )->{biblionumber},
|
||||
}
|
||||
});
|
||||
my $item3 = $builder->build_object({
|
||||
class => 'Koha::Items',
|
||||
value => {
|
||||
);
|
||||
my $item3 = $builder->build_sample_item(
|
||||
{
|
||||
barcode => $test_item_48,
|
||||
biblionumber => $builder->build( { source => 'Biblioitem' } )->{biblionumber},
|
||||
}
|
||||
});
|
||||
);
|
||||
|
||||
SKIP: {
|
||||
skip 'Missing test borrower or item, skipping tests', 8
|
||||
|
|
|
|||
|
|
@ -139,17 +139,10 @@ subtest 'Display circulation table correctly' => sub {
|
|||
);
|
||||
|
||||
my ( $biblionumber, $biblioitemnumber ) = add_biblio();
|
||||
my $item = $builder->build_object(
|
||||
my $item = $builder->build_sample_item(
|
||||
{
|
||||
class => 'Koha::Items',
|
||||
value => {
|
||||
biblionumber => $biblionumber,
|
||||
homebranch => $library->branchcode,
|
||||
holdingbranch => $library->branchcode,
|
||||
notforloan => 0,
|
||||
itemlost => 0,
|
||||
withdrawn => 0,
|
||||
}
|
||||
biblionumber => $biblionumber,
|
||||
library => $library->branchcode,
|
||||
}
|
||||
);
|
||||
my $context = Test::MockModule->new('C4::Context');
|
||||
|
|
|
|||
Loading…
Reference in New Issue