From 64a02908c530b49ab8df899bdc4a1e883a13ba58 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 6 Dec 2018 19:51:39 -0300 Subject: [PATCH] Bug 21971: TestBuilder::build_sample_item Content-Type: text/plain; charset=utf-8 Signed-off-by: Marcel de Rooy --- t/db_dependent/Circulation.t | 498 +++++++++++++----------------- t/db_dependent/Circulation/IsItemIssued.t | 29 +- t/lib/TestBuilder.pm | 30 ++ 3 files changed, 265 insertions(+), 292 deletions(-) diff --git a/t/db_dependent/Circulation.t b/t/db_dependent/Circulation.t index 4992e24..a643927 100755 --- a/t/db_dependent/Circulation.t +++ b/t/db_dependent/Circulation.t @@ -224,48 +224,42 @@ ok( $new_count == $original_count + 1, 'ProcessOfflinePayment makes payment cor C4::Context->dbh->do("DELETE FROM accountlines WHERE borrowernumber IN ( SELECT borrowernumber FROM borrowers WHERE cardnumber = '99999999999' )"); C4::Context->dbh->do("DELETE FROM borrowers WHERE cardnumber = '99999999999'"); C4::Context->dbh->do("DELETE FROM accountlines"); +my ( $reused_itemnumber_1, $reused_itemnumber_2 ); { # CanBookBeRenewed tests C4::Context->set_preference('ItemsDeniedRenewal',''); # Generate test biblio my $biblio = $builder->build_sample_biblio(); - my $barcode = 'R00000342'; my $branch = $library2->{branchcode}; - my ( $item_bibnum, $item_bibitemnum, $itemnumber ) = AddItem( + my $item_1 = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode, + biblionumber => $biblio->biblionumber, + library => $branch, replacementprice => 12.00, - itype => $itemtype - }, - $biblio->biblionumber + itype => $itemtype, + } ); + $reused_itemnumber_1 = $item_1->itemnumber; - my $barcode2 = 'R00000343'; - my ( $item_bibnum2, $item_bibitemnum2, $itemnumber2 ) = AddItem( + my $item_2 = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode2, + biblionumber => $biblio->biblionumber, + library => $branch, replacementprice => 23.00, - itype => $itemtype - }, - $biblio->biblionumber + itype => $itemtype, + } ); + $reused_itemnumber_2 = $item_2->itemnumber; - my $barcode3 = 'R00000346'; - my ( $item_bibnum3, $item_bibitemnum3, $itemnumber3 ) = AddItem( + my $item_3 = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode3, + biblionumber => $biblio->biblionumber, + library => $branch, replacementprice => 23.00, - itype => $itemtype - }, - $biblio->biblionumber + itype => $itemtype, + } ); # Create borrowers @@ -324,19 +318,19 @@ C4::Context->dbh->do("DELETE FROM accountlines"); my $checkitem = undef; my $found = undef; - my $issue = AddIssue( $renewing_borrower, $barcode); + my $issue = AddIssue( $renewing_borrower, $item_1->barcode); my $datedue = dt_from_string( $issue->date_due() ); is (defined $issue->date_due(), 1, "Item 1 checked out, due date: " . $issue->date_due() ); - my $issue2 = AddIssue( $renewing_borrower, $barcode2); + my $issue2 = AddIssue( $renewing_borrower, $item_2->barcode); $datedue = dt_from_string( $issue->date_due() ); is (defined $issue2, 1, "Item 2 checked out, due date: " . $issue2->date_due()); - my $borrowing_borrowernumber = Koha::Checkouts->find( { itemnumber => $itemnumber } )->borrowernumber; + my $borrowing_borrowernumber = Koha::Checkouts->find( { itemnumber => $item_1->itemnumber } )->borrowernumber; is ($borrowing_borrowernumber, $renewing_borrowernumber, "Item checked out to $renewing_borrower->{firstname} $renewing_borrower->{surname}"); - my ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber, 1); + my ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_1->itemnumber, 1); is( $renewokay, 1, 'Can renew, no holds for this title or item'); @@ -350,9 +344,9 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # Testing of feature to allow the renewal of reserved items if other items on the record can fill all needed holds C4::Context->dbh->do("UPDATE issuingrules SET onshelfholds = 1"); t::lib::Mocks::mock_preference('AllowRenewalIfOtherItemsAvailable', 1 ); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_1->itemnumber); is( $renewokay, 1, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds'); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber2); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_2->itemnumber); is( $renewokay, 1, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds'); # Now let's add an item level hold, we should no longer be able to renew the item @@ -360,12 +354,12 @@ C4::Context->dbh->do("DELETE FROM accountlines"); { borrowernumber => $hold_waiting_borrowernumber, biblionumber => $biblio->biblionumber, - itemnumber => $itemnumber, + itemnumber => $item_1->itemnumber, branchcode => $branch, priority => 3, } ); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_1->itemnumber); is( $renewokay, 0, 'Bug 13919 - Renewal possible with item level hold on item'); $hold->delete(); @@ -375,29 +369,29 @@ C4::Context->dbh->do("DELETE FROM accountlines"); { borrowernumber => $hold_waiting_borrowernumber, biblionumber => $biblio->biblionumber, - itemnumber => $itemnumber3, + itemnumber => $item_3->itemnumber, branchcode => $branch, priority => 0, found => 'W' } ); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_1->itemnumber); is( $renewokay, 0, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds'); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber2); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_2->itemnumber); is( $renewokay, 0, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds'); t::lib::Mocks::mock_preference('AllowRenewalIfOtherItemsAvailable', 0 ); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_1->itemnumber); is( $renewokay, 0, '(Bug 10663) Cannot renew, reserved'); is( $error, 'on_reserve', '(Bug 10663) Cannot renew, reserved (returned error is on_reserve)'); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber2); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_2->itemnumber); is( $renewokay, 0, '(Bug 10663) Cannot renew, reserved'); is( $error, 'on_reserve', '(Bug 10663) Cannot renew, reserved (returned error is on_reserve)'); my $reserveid = Koha::Holds->search({ biblionumber => $biblio->biblionumber, borrowernumber => $reserving_borrowernumber })->next->reserve_id; my $reserving_borrower = Koha::Patrons->find( $reserving_borrowernumber )->unblessed; - AddIssue($reserving_borrower, $barcode3); + AddIssue($reserving_borrower, $item_3->barcode); my $reserve = $dbh->selectrow_hashref( 'SELECT * FROM old_reserves WHERE reserve_id = ?', { Slice => {} }, @@ -409,70 +403,62 @@ C4::Context->dbh->do("DELETE FROM accountlines"); AddReserve( $branch, $reserving_borrowernumber, $biblio->biblionumber, $bibitems, $priority, $resdate, $expdate, $notes, - 'a title', $itemnumber, $found + 'a title', $item_1->itemnumber, $found ); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber, 1); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_1->itemnumber, 1); is( $renewokay, 0, '(Bug 10663) Cannot renew, item reserved'); is( $error, 'on_reserve', '(Bug 10663) Cannot renew, item reserved (returned error is on_reserve)'); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber2, 1); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_2->itemnumber, 1); is( $renewokay, 1, 'Can renew item 2, item-level hold is on item 1'); # Items can't fill hold for reasons - ModItem({ notforloan => 1 }, $biblio->biblionumber, $itemnumber); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber, 1); + ModItem({ notforloan => 1 }, $biblio->biblionumber, $item_1->itemnumber); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_1->itemnumber, 1); is( $renewokay, 1, 'Can renew, item is marked not for loan, hold does not block'); - ModItem({ notforloan => 0, itype => $itemtype }, $biblio->biblionumber, $itemnumber); + ModItem({ notforloan => 0, itype => $itemtype }, $biblio->biblionumber, $item_1->itemnumber); # FIXME: Add more for itemtype not for loan etc. # Restricted users cannot renew when RestrictionBlockRenewing is enabled - my $barcode5 = 'R00000347'; - my ( $item_bibnum5, $item_bibitemnum5, $itemnumber5 ) = AddItem( + my $item_5 = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode5, + biblionumber => $biblio->biblionumber, + library => $branch, replacementprice => 23.00, - itype => $itemtype - }, - $biblio->biblionumber + itype => $itemtype, + } ); - my $datedue5 = AddIssue($restricted_borrower, $barcode5); + my $datedue5 = AddIssue($restricted_borrower, $item_5->barcode); is (defined $datedue5, 1, "Item with date due checked out, due date: $datedue5"); t::lib::Mocks::mock_preference('RestrictionBlockRenewing','1'); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber2); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_2->itemnumber); is( $renewokay, 1, '(Bug 8236), Can renew, user is not restricted'); - ( $renewokay, $error ) = CanBookBeRenewed($restricted_borrowernumber, $itemnumber5); + ( $renewokay, $error ) = CanBookBeRenewed($restricted_borrowernumber, $item_5->itemnumber); is( $renewokay, 0, '(Bug 8236), Cannot renew, user is restricted'); # Users cannot renew an overdue item - my $barcode6 = 'R00000348'; - my ( $item_bibnum6, $item_bibitemnum6, $itemnumber6 ) = AddItem( + my $item_6 = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode6, + biblionumber => $biblio->biblionumber, + library => $branch, replacementprice => 23.00, - itype => $itemtype - }, - $biblio->biblionumber + itype => $itemtype, + } ); - my $barcode7 = 'R00000349'; - my ( $item_bibnum7, $item_bibitemnum7, $itemnumber7 ) = AddItem( + my $item_7 = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode7, + biblionumber => $biblio->biblionumber, + library => $branch, replacementprice => 23.00, - itype => $itemtype - }, - $biblio->biblionumber + itype => $itemtype, + } ); - my $datedue6 = AddIssue( $renewing_borrower, $barcode6); + + my $datedue6 = AddIssue( $renewing_borrower, $item_6->barcode); is (defined $datedue6, 1, "Item 2 checked out, due date: ".$datedue6->date_due); my $now = dt_from_string(); @@ -480,14 +466,14 @@ C4::Context->dbh->do("DELETE FROM accountlines"); my $five_weeks_ago = $now - $five_weeks; t::lib::Mocks::mock_preference('finesMode', 'production'); - my $passeddatedue1 = AddIssue($renewing_borrower, $barcode7, $five_weeks_ago); + my $passeddatedue1 = AddIssue($renewing_borrower, $item_7->barcode, $five_weeks_ago); is (defined $passeddatedue1, 1, "Item with passed date due checked out, due date: " . $passeddatedue1->date_due); - my ( $fine ) = CalcFine( GetItem(undef, $barcode7), $renewing_borrower->{categorycode}, $branch, $five_weeks_ago, $now ); + my ( $fine ) = CalcFine( GetItem(undef, $item_7->barcode), $renewing_borrower->{categorycode}, $branch, $five_weeks_ago, $now ); C4::Overdues::UpdateFine( { issue_id => $passeddatedue1->id(), - itemnumber => $itemnumber7, + itemnumber => $item_7->itemnumber, borrowernumber => $renewing_borrower->{borrowernumber}, amount => $fine, type => 'FU', @@ -498,18 +484,18 @@ C4::Context->dbh->do("DELETE FROM accountlines"); t::lib::Mocks::mock_preference('RenewalLog', 0); my $date = output_pref( { dt => dt_from_string(), datenonly => 1, dateformat => 'iso' } ); my $old_log_size = scalar(@{GetLogs( $date, $date, undef,["CIRCULATION"], ["RENEWAL"]) } ); - AddRenewal( $renewing_borrower->{borrowernumber}, $itemnumber7, $branch ); + AddRenewal( $renewing_borrower->{borrowernumber}, $item_7->itemnumber, $branch ); my $new_log_size = scalar(@{GetLogs( $date, $date, undef,["CIRCULATION"], ["RENEWAL"]) } ); is ($new_log_size, $old_log_size, 'renew log not added because of the syspref RenewalLog'); t::lib::Mocks::mock_preference('RenewalLog', 1); $date = output_pref( { dt => dt_from_string(), datenonly => 1, dateformat => 'iso' } ); $old_log_size = scalar(@{GetLogs( $date, $date, undef,["CIRCULATION"], ["RENEWAL"]) } ); - AddRenewal( $renewing_borrower->{borrowernumber}, $itemnumber7, $branch ); + AddRenewal( $renewing_borrower->{borrowernumber}, $item_7->itemnumber, $branch ); $new_log_size = scalar(@{GetLogs( $date, $date, undef,["CIRCULATION"], ["RENEWAL"]) } ); is ($new_log_size, $old_log_size + 1, 'renew log successfully added'); - my $fines = Koha::Account::Lines->search( { borrowernumber => $renewing_borrower->{borrowernumber}, itemnumber => $itemnumber7 } ); + my $fines = Koha::Account::Lines->search( { borrowernumber => $renewing_borrower->{borrowernumber}, itemnumber => $item_7->itemnumber } ); is( $fines->count, 2 ); is( $fines->next->accounttype, 'F', 'Fine on renewed item is closed out properly' ); is( $fines->next->accounttype, 'F', 'Fine on renewed item is closed out properly' ); @@ -518,19 +504,19 @@ C4::Context->dbh->do("DELETE FROM accountlines"); my $old_issue_log_size = scalar(@{GetLogs( $date, $date, undef,["CIRCULATION"], ["ISSUE"]) } ); my $old_renew_log_size = scalar(@{GetLogs( $date, $date, undef,["CIRCULATION"], ["RENEWAL"]) } ); - AddIssue( $renewing_borrower,$barcode7,Koha::DateUtils::output_pref({str=>$datedue6->date_due, dateformat =>'iso'}),0,$date, 0, undef ); + AddIssue( $renewing_borrower,$item_7->barcode,Koha::DateUtils::output_pref({str=>$datedue6->date_due, dateformat =>'iso'}),0,$date, 0, undef ); $new_log_size = scalar(@{GetLogs( $date, $date, undef,["CIRCULATION"], ["RENEWAL"]) } ); is ($new_log_size, $old_renew_log_size + 1, 'renew log successfully added when renewed via issuing'); $new_log_size = scalar(@{GetLogs( $date, $date, undef,["CIRCULATION"], ["ISSUE"]) } ); is ($new_log_size, $old_issue_log_size, 'renew not logged as issue when renewed via issuing'); - $fines = Koha::Account::Lines->search( { borrowernumber => $renewing_borrower->{borrowernumber}, itemnumber => $itemnumber7 } ); + $fines = Koha::Account::Lines->search( { borrowernumber => $renewing_borrower->{borrowernumber}, itemnumber => $item_7->itemnumber } ); $fines->delete(); t::lib::Mocks::mock_preference('OverduesBlockRenewing','blockitem'); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber6); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_6->itemnumber); is( $renewokay, 1, '(Bug 8236), Can renew, this item is not overdue'); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber7); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_7->itemnumber); is( $renewokay, 0, '(Bug 8236), Cannot renew, this item is overdue'); @@ -540,21 +526,18 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # Bug 14101 # Test automatic renewal before value for "norenewalbefore" in policy is set # In this case automatic renewal is not permitted prior to due date - my $barcode4 = '11235813'; - my ( $item_bibnum4, $item_bibitemnum4, $itemnumber4 ) = AddItem( + my $item_4 = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode4, + biblionumber => $biblio->biblionumber, + library => $branch, replacementprice => 16.00, - itype => $itemtype - }, - $biblio->biblionumber + itype => $itemtype, + } ); - $issue = AddIssue( $renewing_borrower, $barcode4, undef, undef, undef, undef, { auto_renew => 1 } ); + $issue = AddIssue( $renewing_borrower, $item_4->barcode, undef, undef, undef, undef, { auto_renew => 1 } ); ( $renewokay, $error ) = - CanBookBeRenewed( $renewing_borrowernumber, $itemnumber4 ); + CanBookBeRenewed( $renewing_borrowernumber, $item_4->itemnumber ); is( $renewokay, 0, 'Bug 14101: Cannot renew, renewal is automatic and premature' ); is( $error, 'auto_too_soon', 'Bug 14101: Cannot renew, renewal is automatic and premature, "No renewal before" = undef (returned code is auto_too_soon)' ); @@ -563,7 +546,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # Test premature manual renewal $dbh->do('UPDATE issuingrules SET norenewalbefore = 7'); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_1->itemnumber); is( $renewokay, 0, 'Bug 7413: Cannot renew, renewal is premature'); is( $error, 'too_soon', 'Bug 7413: Cannot renew, renewal is premature (returned code is too_soon)'); @@ -571,7 +554,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # Test 'exact time' setting for syspref NoRenewalBeforePrecision t::lib::Mocks::mock_preference( 'NoRenewalBeforePrecision', 'exact_time' ); is( - GetSoonestRenewDate( $renewing_borrowernumber, $itemnumber ), + GetSoonestRenewDate( $renewing_borrowernumber, $item_1->itemnumber ), $datedue->clone->add( days => -7 ), 'Bug 14395: Renewals permitted 7 days before due date, as expected' ); @@ -580,7 +563,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # Test 'date' setting for syspref NoRenewalBeforePrecision t::lib::Mocks::mock_preference( 'NoRenewalBeforePrecision', 'date' ); is( - GetSoonestRenewDate( $renewing_borrowernumber, $itemnumber ), + GetSoonestRenewDate( $renewing_borrowernumber, $item_1->itemnumber ), $datedue->clone->add( days => -7 )->truncate( to => 'day' ), 'Bug 14395: Renewals permitted 7 days before due date, as expected' ); @@ -588,7 +571,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # Bug 14101 # Test premature automatic renewal ( $renewokay, $error ) = - CanBookBeRenewed( $renewing_borrowernumber, $itemnumber4 ); + CanBookBeRenewed( $renewing_borrowernumber, $item_4->itemnumber ); is( $renewokay, 0, 'Bug 14101: Cannot renew, renewal is automatic and premature' ); is( $error, 'auto_too_soon', 'Bug 14101: Cannot renew, renewal is automatic and premature (returned code is auto_too_soon)' @@ -598,7 +581,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # and test automatic renewal again $dbh->do('UPDATE issuingrules SET norenewalbefore = 0'); ( $renewokay, $error ) = - CanBookBeRenewed( $renewing_borrowernumber, $itemnumber4 ); + CanBookBeRenewed( $renewing_borrowernumber, $item_4->itemnumber ); is( $renewokay, 0, 'Bug 14101: Cannot renew, renewal is automatic and premature' ); is( $error, 'auto_too_soon', 'Bug 14101: Cannot renew, renewal is automatic and premature, "No renewal before" = 0 (returned code is auto_too_soon)' @@ -608,7 +591,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # and test automatic renewal again $dbh->do('UPDATE issuingrules SET norenewalbefore = 99'); ( $renewokay, $error ) = - CanBookBeRenewed( $renewing_borrowernumber, $itemnumber4 ); + CanBookBeRenewed( $renewing_borrowernumber, $item_4->itemnumber ); is( $renewokay, 0, 'Bug 14101: Cannot renew, renewal is automatic' ); is( $error, 'auto_renew', 'Bug 14101: Cannot renew, renewal is automatic (returned code is auto_renew)' @@ -818,7 +801,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # set policy to forbid renewals $dbh->do('UPDATE issuingrules SET norenewalbefore = NULL, renewalsallowed = 0'); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_1->itemnumber); is( $renewokay, 0, 'Cannot renew, 0 renewals allowed'); is( $error, 'too_many', 'Cannot renew, 0 renewals allowed (returned code is too_many)'); @@ -829,7 +812,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); C4::Overdues::UpdateFine( { issue_id => $issue->id(), - itemnumber => $itemnumber, + itemnumber => $item_1->itemnumber, borrowernumber => $renewing_borrower->{borrowernumber}, amount => 15.00, type => q{}, @@ -851,14 +834,14 @@ C4::Context->dbh->do("DELETE FROM accountlines"); t::lib::Mocks::mock_preference('WhenLostForgiveFine','0'); t::lib::Mocks::mock_preference('WhenLostChargeReplacementFee','0'); - LostItem( $itemnumber, 'test', 1 ); + LostItem( $item_1->itemnumber, 'test', 1 ); $line = Koha::Account::Lines->find($line->id); is( $line->accounttype, 'F', 'Account type correctly changed from FU to F' ); - my $item = Koha::Database->new()->schema()->resultset('Item')->find($itemnumber); + my $item = Koha::Items->find($item_1->itemnumber); ok( !$item->onloan(), "Lost item marked as returned has false onloan value" ); - my $checkout = Koha::Checkouts->find({ itemnumber => $itemnumber }); + my $checkout = Koha::Checkouts->find({ itemnumber => $item_1->itemnumber }); is( $checkout, undef, 'LostItem called with forced return has checked in the item' ); my $total_due = $dbh->selectrow_array( @@ -873,7 +856,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); C4::Overdues::UpdateFine( { issue_id => $issue2->id(), - itemnumber => $itemnumber2, + itemnumber => $item_2->itemnumber, borrowernumber => $renewing_borrower->{borrowernumber}, amount => 15.00, type => q{}, @@ -881,11 +864,11 @@ C4::Context->dbh->do("DELETE FROM accountlines"); } ); - LostItem( $itemnumber2, 'test', 0 ); + LostItem( $item_2->itemnumber, 'test', 0 ); - my $item2 = Koha::Database->new()->schema()->resultset('Item')->find($itemnumber2); + my $item2 = Koha::Items->find($item_2->itemnumber); ok( $item2->onloan(), "Lost item *not* marked as returned has true onloan value" ); - ok( Koha::Checkouts->find({ itemnumber => $itemnumber2 }), 'LostItem called without forced return has checked in the item' ); + ok( Koha::Checkouts->find({ itemnumber => $item_2->itemnumber }), 'LostItem called without forced return has checked in the item' ); $total_due = $dbh->selectrow_array( 'SELECT SUM( amountoutstanding ) FROM accountlines WHERE borrowernumber = ?', @@ -901,40 +884,37 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # Users cannot renew any item if there is an overdue item t::lib::Mocks::mock_preference('OverduesBlockRenewing','block'); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber6); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_6->itemnumber); is( $renewokay, 0, '(Bug 8236), Cannot renew, one of the items is overdue'); - ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber7); + ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_7->itemnumber); is( $renewokay, 0, '(Bug 8236), Cannot renew, one of the items is overdue'); t::lib::Mocks::mock_preference('WhenLostChargeReplacementFee','1'); - $checkout = Koha::Checkouts->find( { itemnumber => $itemnumber3 } ); - LostItem( $itemnumber3, 'test', 0 ); - my $accountline = Koha::Account::Lines->find( { itemnumber => $itemnumber3 } ); + $checkout = Koha::Checkouts->find( { itemnumber => $item_3->itemnumber } ); + LostItem( $item_3->itemnumber, 'test', 0 ); + my $accountline = Koha::Account::Lines->find( { itemnumber => $item_3->itemnumber } ); is( $accountline->issue_id, $checkout->id, "Issue id added for lost replacement fee charge" ); - } { # GetUpcomingDueIssues tests - my $barcode = 'R00000342'; - my $barcode2 = 'R00000343'; - my $barcode3 = 'R00000344'; my $branch = $library2->{branchcode}; #Create another record my $biblio2 = $builder->build_sample_biblio(); #Create third item - AddItem( + my $item_1 = Koha::Items->find($reused_itemnumber_1); + my $item_2 = Koha::Items->find($reused_itemnumber_2); + my $item_3 = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode3, - itype => $itemtype - }, - $biblio2->biblionumber + biblionumber => $biblio2->biblionumber, + library => $branch, + itype => $itemtype, + } ); + # Create a borrower my %a_borrower_data = ( firstname => 'Fridolyn', @@ -950,9 +930,9 @@ C4::Context->dbh->do("DELETE FROM accountlines"); my $two_days_ahead = DateTime->today(time_zone => C4::Context->tz())->add( days => 2 ); my $today = DateTime->today(time_zone => C4::Context->tz()); - my $issue = AddIssue( $a_borrower, $barcode, $yesterday ); + my $issue = AddIssue( $a_borrower, $item_1->barcode, $yesterday ); my $datedue = dt_from_string( $issue->date_due() ); - my $issue2 = AddIssue( $a_borrower, $barcode2, $two_days_ahead ); + my $issue2 = AddIssue( $a_borrower, $item_2->barcode, $two_days_ahead ); my $datedue2 = dt_from_string( $issue->date_due() ); my $upcoming_dues; @@ -975,7 +955,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); # Bug 11218 - Due notices not generated - GetUpcomingDueIssues needs to select due today items as well - my $issue3 = AddIssue( $a_borrower, $barcode3, $today ); + my $issue3 = AddIssue( $a_borrower, $item_3->barcode, $today ); $upcoming_dues = C4::Circulation::GetUpcomingDueIssues( { days_in_advance => -1 } ); is ( scalar ( @$upcoming_dues), 0, "Overdues can not be selected" ); @@ -998,20 +978,17 @@ C4::Context->dbh->do("DELETE FROM accountlines"); } { - my $barcode = '1234567890'; my $branch = $library2->{branchcode}; my $biblio = $builder->build_sample_biblio(); #Create third item - my ( undef, undef, $itemnumber ) = AddItem( + my $item = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode, - itype => $itemtype - }, - $biblio->biblionumber + biblionumber => $biblio->biblionumber, + library => $branch, + itype => $itemtype, + } ); # Create a borrower @@ -1025,18 +1002,18 @@ C4::Context->dbh->do("DELETE FROM accountlines"); my $borrowernumber = Koha::Patron->new(\%a_borrower_data)->store->borrowernumber; my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; - my $issue = AddIssue( $borrower, $barcode ); + my $issue = AddIssue( $borrower, $item->barcode ); UpdateFine( { issue_id => $issue->id(), - itemnumber => $itemnumber, + itemnumber => $item->itemnumber, borrowernumber => $borrowernumber, amount => 0, type => q{} } ); - my $hr = $dbh->selectrow_hashref(q{SELECT COUNT(*) AS count FROM accountlines WHERE borrowernumber = ? AND itemnumber = ?}, undef, $borrowernumber, $itemnumber ); + my $hr = $dbh->selectrow_hashref(q{SELECT COUNT(*) AS count FROM accountlines WHERE borrowernumber = ? AND itemnumber = ?}, undef, $borrowernumber, $item->itemnumber ); my $count = $hr->{count}; is ( $count, 0, "Calling UpdateFine on non-existant fine with an amount of 0 does not result in an empty fine" ); @@ -1060,25 +1037,20 @@ C4::Context->dbh->do("DELETE FROM accountlines"); ); my $biblio = $builder->build_sample_biblio(); - my $barcode1 = '1234'; - my ( undef, undef, $itemnumber1 ) = AddItem( + my $item_1 = $builder->build_sample_item( { - homebranch => $library2->{branchcode}, - holdingbranch => $library2->{branchcode}, - barcode => $barcode1, - itype => $itemtype - }, - $biblio->biblionumber + biblionumber => $biblio->biblionumber, + library => $library2->{branchcode}, + itype => $itemtype, + } ); - my $barcode2 = '4321'; - my ( undef, undef, $itemnumber2 ) = AddItem( + + my $item_2= $builder->build_sample_item( { - homebranch => $library2->{branchcode}, - holdingbranch => $library2->{branchcode}, - barcode => $barcode2, - itype => $itemtype - }, - $biblio->biblionumber + biblionumber => $biblio->biblionumber, + library => $library2->{branchcode}, + itype => $itemtype, + } ); my $borrowernumber1 = Koha::Patron->new({ @@ -1097,9 +1069,9 @@ C4::Context->dbh->do("DELETE FROM accountlines"); my $borrower1 = Koha::Patrons->find( $borrowernumber1 )->unblessed; my $borrower2 = Koha::Patrons->find( $borrowernumber2 )->unblessed; - my $issue = AddIssue( $borrower1, $barcode1 ); + my $issue = AddIssue( $borrower1, $item_1->barcode ); - my ( $renewokay, $error ) = CanBookBeRenewed( $borrowernumber1, $itemnumber1 ); + my ( $renewokay, $error ) = CanBookBeRenewed( $borrowernumber1, $item_1->itemnumber ); is( $renewokay, 1, 'Bug 14337 - Verify the borrower can renew with no hold on the record' ); AddReserve( @@ -1110,47 +1082,44 @@ C4::Context->dbh->do("DELETE FROM accountlines"); C4::Context->dbh->do("UPDATE issuingrules SET onshelfholds = 0"); t::lib::Mocks::mock_preference( 'AllowRenewalIfOtherItemsAvailable', 0 ); - ( $renewokay, $error ) = CanBookBeRenewed( $borrowernumber1, $itemnumber1 ); + ( $renewokay, $error ) = CanBookBeRenewed( $borrowernumber1, $item_1->itemnumber ); is( $renewokay, 0, 'Bug 14337 - Verify the borrower cannot renew with a hold on the record if AllowRenewalIfOtherItemsAvailable and onshelfholds are disabled' ); C4::Context->dbh->do("UPDATE issuingrules SET onshelfholds = 0"); t::lib::Mocks::mock_preference( 'AllowRenewalIfOtherItemsAvailable', 1 ); - ( $renewokay, $error ) = CanBookBeRenewed( $borrowernumber1, $itemnumber1 ); + ( $renewokay, $error ) = CanBookBeRenewed( $borrowernumber1, $item_1->itemnumber ); is( $renewokay, 0, 'Bug 14337 - Verify the borrower cannot renew with a hold on the record if AllowRenewalIfOtherItemsAvailable is enabled and onshelfholds is disabled' ); C4::Context->dbh->do("UPDATE issuingrules SET onshelfholds = 1"); t::lib::Mocks::mock_preference( 'AllowRenewalIfOtherItemsAvailable', 0 ); - ( $renewokay, $error ) = CanBookBeRenewed( $borrowernumber1, $itemnumber1 ); + ( $renewokay, $error ) = CanBookBeRenewed( $borrowernumber1, $item_1->itemnumber ); is( $renewokay, 0, 'Bug 14337 - Verify the borrower cannot renew with a hold on the record if AllowRenewalIfOtherItemsAvailable is disabled and onshelfhold is enabled' ); C4::Context->dbh->do("UPDATE issuingrules SET onshelfholds = 1"); t::lib::Mocks::mock_preference( 'AllowRenewalIfOtherItemsAvailable', 1 ); - ( $renewokay, $error ) = CanBookBeRenewed( $borrowernumber1, $itemnumber1 ); + ( $renewokay, $error ) = CanBookBeRenewed( $borrowernumber1, $item_1->itemnumber ); is( $renewokay, 1, 'Bug 14337 - Verify the borrower can renew with a hold on the record if AllowRenewalIfOtherItemsAvailable and onshelfhold are enabled' ); # Setting item not checked out to be not for loan but holdable - ModItem({ notforloan => -1 }, $biblio->biblionumber, $itemnumber2); + ModItem({ notforloan => -1 }, $biblio->biblionumber, $item_2->itemnumber); - ( $renewokay, $error ) = CanBookBeRenewed( $borrowernumber1, $itemnumber1 ); + ( $renewokay, $error ) = CanBookBeRenewed( $borrowernumber1, $item_1->itemnumber ); is( $renewokay, 0, 'Bug 14337 - Verify the borrower can not renew with a hold on the record if AllowRenewalIfOtherItemsAvailable is enabled but the only available item is notforloan' ); } { # Don't allow renewing onsite checkout - my $barcode = 'R00000XXX'; my $branch = $library->{branchcode}; #Create another record my $biblio = $builder->build_sample_biblio(); - my (undef, undef, $itemnumber) = AddItem( + my $item = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode, - itype => $itemtype - }, - $biblio->biblionumber + biblionumber => $biblio->biblionumber, + library => $branch, + itype => $itemtype, + } ); my $borrowernumber = Koha::Patron->new({ @@ -1162,8 +1131,8 @@ C4::Context->dbh->do("DELETE FROM accountlines"); my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; - my $issue = AddIssue( $borrower, $barcode, undef, undef, undef, undef, { onsite_checkout => 1 } ); - my ( $renewed, $error ) = CanBookBeRenewed( $borrowernumber, $itemnumber ); + my $issue = AddIssue( $borrower, $item->barcode, undef, undef, undef, undef, { onsite_checkout => 1 } ); + my ( $renewed, $error ) = CanBookBeRenewed( $borrowernumber, $item->itemnumber ); is( $renewed, 0, 'CanBookBeRenewed should not allow to renew on-site checkout' ); is( $error, 'onsite_checkout', 'A correct error code should be returned by CanBookBeRenewed for on-site checkout' ); } @@ -1173,24 +1142,21 @@ C4::Context->dbh->do("DELETE FROM accountlines"); my $biblio = $builder->build_sample_biblio(); - my $barcode = 'just a barcode'; - my ( undef, undef, $itemnumber ) = AddItem( + my $item = $builder->build_sample_item( { - homebranch => $library->{branchcode}, - holdingbranch => $library->{branchcode}, - barcode => $barcode, - itype => $itemtype - }, - $biblio->biblionumber, + biblionumber => $biblio->biblionumber, + library => $library->{branchcode}, + itype => $itemtype, + } ); my $patron = $builder->build({ source => 'Borrower', value => { branchcode => $library->{branchcode}, categorycode => $patron_category->{categorycode} } } ); - my $issue = AddIssue( $patron, $barcode ); + my $issue = AddIssue( $patron, $item->barcode ); UpdateFine( { issue_id => $issue->id(), - itemnumber => $itemnumber, + itemnumber => $item->itemnumber, borrowernumber => $patron->{borrowernumber}, amount => 1, type => q{} @@ -1199,7 +1165,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); UpdateFine( { issue_id => $issue->id(), - itemnumber => $itemnumber, + itemnumber => $item->itemnumber, borrowernumber => $patron->{borrowernumber}, amount => 2, type => q{} @@ -1475,28 +1441,22 @@ subtest 'MultipleReserves' => sub { my $branch = $library2->{branchcode}; - my $barcode1 = 'R00110001'; - my ( $item_bibnum1, $item_bibitemnum1, $itemnumber1 ) = AddItem( + my $item_1 = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode1, + biblionumber => $biblio->biblionumber, + library => $branch, replacementprice => 12.00, - itype => $itemtype - }, - $biblio->biblionumber + itype => $itemtype, + } ); - my $barcode2 = 'R00110002'; - my ( $item_bibnum2, $item_bibitemnum2, $itemnumber2 ) = AddItem( + my $item_2 = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode2, + biblionumber => $biblio->biblionumber, + library => $branch, replacementprice => 12.00, - itype => $itemtype - }, - $biblio->biblionumber + itype => $itemtype, + } ); my $bibitems = ''; @@ -1515,10 +1475,10 @@ subtest 'MultipleReserves' => sub { ); my $renewing_borrowernumber = Koha::Patron->new(\%renewing_borrower_data)->store->borrowernumber; my $renewing_borrower = Koha::Patrons->find( $renewing_borrowernumber )->unblessed; - my $issue = AddIssue( $renewing_borrower, $barcode1); + my $issue = AddIssue( $renewing_borrower, $item_1->barcode); my $datedue = dt_from_string( $issue->date_due() ); is (defined $issue->date_due(), 1, "item 1 checked out"); - my $borrowing_borrowernumber = Koha::Checkouts->find({ itemnumber => $itemnumber1 })->borrowernumber; + my $borrowing_borrowernumber = Koha::Checkouts->find({ itemnumber => $item_1->itemnumber })->borrowernumber; my %reserving_borrower_data1 = ( firstname => 'Katrin', @@ -1547,24 +1507,21 @@ subtest 'MultipleReserves' => sub { ); { - my ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber1, 1); + my ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_1->itemnumber, 1); is($renewokay, 0, 'Bug 17941 - should cover the case where 2 books are both reserved, so failing'); } - my $barcode3 = 'R00110003'; - my ( $item_bibnum3, $item_bibitemnum3, $itemnumber3 ) = AddItem( + my $item_3 = $builder->build_sample_item( { - homebranch => $branch, - holdingbranch => $branch, - barcode => $barcode3, + biblionumber => $biblio->biblionumber, + library => $branch, replacementprice => 12.00, - itype => $itemtype - }, - $biblio->biblionumber + itype => $itemtype, + } ); { - my ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber1, 1); + my ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $item_1->itemnumber, 1); is($renewokay, 1, 'Bug 17941 - should cover the case where 2 books are reserved, but a third one is available'); } }; @@ -2015,26 +1972,24 @@ subtest '_FixAccountForLostAndReturned' => sub { plan tests => 10; my $patron = $builder->build_object( { class => 'Koha::Patrons' } ); - my $barcode = 'KD123456789'; - my ( undef, undef, $item_id ) = AddItem( - { homebranch => $library->branchcode, - holdingbranch => $library->branchcode, - barcode => $barcode, + my $item = $builder->build_sample_item( + { + biblionumber => $biblio->biblionumber, + library => $library->branchcode, replacementprice => $replacement_amount, - itype => $item_type->itemtype - }, - $biblio->biblionumber + itype => $item_type->itemtype, + } ); - AddIssue( $patron->unblessed, $barcode ); + AddIssue( $patron->unblessed, $item->barcode ); # Simulate item marked as lost - ModItem( { itemlost => 3 }, $biblio->biblionumber, $item_id ); - LostItem( $item_id, 1 ); + ModItem( { itemlost => 3 }, $biblio->biblionumber, $item->itemnumber ); + LostItem( $item->itemnumber, 1 ); my $processing_fee_lines = Koha::Account::Lines->search( - { borrowernumber => $patron->id, itemnumber => $item_id, accounttype => 'PF' } ); + { borrowernumber => $patron->id, itemnumber => $item->itemnumber, accounttype => 'PF' } ); is( $processing_fee_lines->count, 1, 'Only one processing fee produced' ); my $processing_fee_line = $processing_fee_lines->next; is( $processing_fee_line->amount + 0, @@ -2043,7 +1998,7 @@ subtest '_FixAccountForLostAndReturned' => sub { $processfee_amount, 'The right PF amountoutstanding is generated' ); my $lost_fee_lines = Koha::Account::Lines->search( - { borrowernumber => $patron->id, itemnumber => $item_id, accounttype => 'L' } ); + { borrowernumber => $patron->id, itemnumber => $item->itemnumber, accounttype => 'L' } ); is( $lost_fee_lines->count, 1, 'Only one lost item fee produced' ); my $lost_fee_line = $lost_fee_lines->next; is( $lost_fee_line->amount + 0, $replacement_amount, 'The right L amount is generated' ); @@ -2061,7 +2016,7 @@ subtest '_FixAccountForLostAndReturned' => sub { ); $credit->apply( { debits => $debts, offset_type => 'Writeoff' } ); - my $credit_return_id = C4::Circulation::_FixAccountForLostAndReturned( $item_id, $patron->id ); + my $credit_return_id = C4::Circulation::_FixAccountForLostAndReturned( $item->itemnumber, $patron->id ); is( $credit_return_id, undef, 'No CR account line added' ); $lost_fee_line->discard_changes; # reload from DB @@ -2077,26 +2032,24 @@ subtest '_FixAccountForLostAndReturned' => sub { plan tests => 12; my $patron = $builder->build_object( { class => 'Koha::Patrons' } ); - my $barcode = 'KD123456790'; - my ( undef, undef, $item_id ) = AddItem( - { homebranch => $library->branchcode, - holdingbranch => $library->branchcode, - barcode => $barcode, + my $item = $builder->build_sample_item( + { + biblionumber => $biblio->biblionumber, + library => $library->branchcode, replacementprice => $replacement_amount, itype => $item_type->itemtype - }, - $biblio->biblionumber + } ); - AddIssue( $patron->unblessed, $barcode ); + AddIssue( $patron->unblessed, $item->barcode ); # Simulate item marked as lost - ModItem( { itemlost => 1 }, $biblio->biblionumber, $item_id ); - LostItem( $item_id, 1 ); + ModItem( { itemlost => 1 }, $biblio->biblionumber, $item->itemnumber ); + LostItem( $item->itemnumber, 1 ); my $processing_fee_lines = Koha::Account::Lines->search( - { borrowernumber => $patron->id, itemnumber => $item_id, accounttype => 'PF' } ); + { borrowernumber => $patron->id, itemnumber => $item->itemnumber, accounttype => 'PF' } ); is( $processing_fee_lines->count, 1, 'Only one processing fee produced' ); my $processing_fee_line = $processing_fee_lines->next; is( $processing_fee_line->amount + 0, @@ -2105,7 +2058,7 @@ subtest '_FixAccountForLostAndReturned' => sub { $processfee_amount, 'The right PF amountoutstanding is generated' ); my $lost_fee_lines = Koha::Account::Lines->search( - { borrowernumber => $patron->id, itemnumber => $item_id, accounttype => 'L' } ); + { borrowernumber => $patron->id, itemnumber => $item->itemnumber, accounttype => 'L' } ); is( $lost_fee_lines->count, 1, 'Only one lost item fee produced' ); my $lost_fee_line = $lost_fee_lines->next; is( $lost_fee_line->amount + 0, $replacement_amount, 'The right L amount is generated' ); @@ -2123,7 +2076,7 @@ subtest '_FixAccountForLostAndReturned' => sub { ); $credit->apply( { debits => $debts, offset_type => 'Payment' } ); - my $credit_return_id = C4::Circulation::_FixAccountForLostAndReturned( $item_id, $patron->id ); + my $credit_return_id = C4::Circulation::_FixAccountForLostAndReturned( $item->itemnumber, $patron->id ); my $credit_return = Koha::Account::Lines->find($credit_return_id); is( $credit_return->accounttype, 'CR', 'An account line of type CR is added' ); @@ -2146,26 +2099,25 @@ subtest '_FixAccountForLostAndReturned' => sub { plan tests => 12; my $patron = $builder->build_object( { class => 'Koha::Patrons' } ); - my $barcode = 'KD123456791'; - my ( undef, undef, $item_id ) = AddItem( - { homebranch => $library->branchcode, - holdingbranch => $library->branchcode, - barcode => $barcode, + my $item = $builder->build_sample_item( + { + biblionumber => $biblio->biblionumber, + library => $library->branchcode, + replacementprice => 23.00, replacementprice => $replacement_amount, itype => $item_type->itemtype - }, - $biblio->biblionumber + } ); - AddIssue( $patron->unblessed, $barcode ); + AddIssue( $patron->unblessed, $item->barcode ); # Simulate item marked as lost - ModItem( { itemlost => 3 }, $biblio->biblionumber, $item_id ); - LostItem( $item_id, 1 ); + ModItem( { itemlost => 3 }, $biblio->biblionumber, $item->itemnumber ); + LostItem( $item->itemnumber, 1 ); my $processing_fee_lines = Koha::Account::Lines->search( - { borrowernumber => $patron->id, itemnumber => $item_id, accounttype => 'PF' } ); + { borrowernumber => $patron->id, itemnumber => $item->itemnumber, accounttype => 'PF' } ); is( $processing_fee_lines->count, 1, 'Only one processing fee produced' ); my $processing_fee_line = $processing_fee_lines->next; is( $processing_fee_line->amount + 0, @@ -2174,14 +2126,14 @@ subtest '_FixAccountForLostAndReturned' => sub { $processfee_amount, 'The right PF amountoutstanding is generated' ); my $lost_fee_lines = Koha::Account::Lines->search( - { borrowernumber => $patron->id, itemnumber => $item_id, accounttype => 'L' } ); + { borrowernumber => $patron->id, itemnumber => $item->itemnumber, accounttype => 'L' } ); is( $lost_fee_lines->count, 1, 'Only one lost item fee produced' ); my $lost_fee_line = $lost_fee_lines->next; is( $lost_fee_line->amount + 0, $replacement_amount, 'The right L amount is generated' ); is( $lost_fee_line->amountoutstanding + 0, $replacement_amount, 'The right L amountountstanding is generated' ); - my $credit_return_id = C4::Circulation::_FixAccountForLostAndReturned( $item_id, $patron->id ); + my $credit_return_id = C4::Circulation::_FixAccountForLostAndReturned( $item->itemnumber, $patron->id ); my $credit_return = Koha::Account::Lines->find($credit_return_id); is( $credit_return->accounttype, 'CR', 'An account line of type CR is added' ); @@ -2200,26 +2152,23 @@ subtest '_FixAccountForLostAndReturned' => sub { plan tests => 15; my $patron = $builder->build_object( { class => 'Koha::Patrons' } ); - my $barcode = 'KD123456792'; - - my ( undef, undef, $item_id ) = AddItem( - { homebranch => $library->branchcode, - holdingbranch => $library->branchcode, - barcode => $barcode, + my $item = $builder->build_sample_item( + { + biblionumber => $biblio->biblionumber, + library => $library->branchcode, replacementprice => $replacement_amount, itype => $item_type->itemtype - }, - $biblio->biblionumber + } ); - AddIssue( $patron->unblessed, $barcode ); + AddIssue( $patron->unblessed, $item->barcode ); # Simulate item marked as lost - ModItem( { itemlost => 1 }, $biblio->biblionumber, $item_id ); - LostItem( $item_id, 1 ); + ModItem( { itemlost => 1 }, $biblio->biblionumber, $item->itemnumber ); + LostItem( $item->itemnumber, 1 ); my $processing_fee_lines = Koha::Account::Lines->search( - { borrowernumber => $patron->id, itemnumber => $item_id, accounttype => 'PF' } ); + { borrowernumber => $patron->id, itemnumber => $item->itemnumber, accounttype => 'PF' } ); is( $processing_fee_lines->count, 1, 'Only one processing fee produced' ); my $processing_fee_line = $processing_fee_lines->next; is( $processing_fee_line->amount + 0, @@ -2228,7 +2177,7 @@ subtest '_FixAccountForLostAndReturned' => sub { $processfee_amount, 'The right PF amountoutstanding is generated' ); my $lost_fee_lines = Koha::Account::Lines->search( - { borrowernumber => $patron->id, itemnumber => $item_id, accounttype => 'L' } ); + { borrowernumber => $patron->id, itemnumber => $item->itemnumber, accounttype => 'L' } ); is( $lost_fee_lines->count, 1, 'Only one lost item fee produced' ); my $lost_fee_line = $lost_fee_lines->next; is( $lost_fee_line->amount + 0, $replacement_amount, 'The right L amount is generated' ); @@ -2266,7 +2215,7 @@ subtest '_FixAccountForLostAndReturned' => sub { $lost_fee_line->discard_changes; my $outstanding = $lost_fee_line->amountoutstanding; - my $credit_return_id = C4::Circulation::_FixAccountForLostAndReturned( $item_id, $patron->id ); + my $credit_return_id = C4::Circulation::_FixAccountForLostAndReturned( $item->itemnumber, $patron->id ); my $credit_return = Koha::Account::Lines->find($credit_return_id); is( $account->balance, $processfee_amount - $payment_amount, 'Balance is PF - payment (CR)' ); @@ -2298,18 +2247,15 @@ subtest '_FixOverduesOnReturn' => sub { my $biblio = $builder->build_sample_biblio({ author => 'Hall, Kylie' }); - my $barcode = 'KD987654321'; my $branchcode = $library2->{branchcode}; - my ( $item_bibnum, $item_bibitemnum, $itemnumber ) = AddItem( + my $item = $builder->build_sample_item( { - homebranch => $branchcode, - holdingbranch => $branchcode, - barcode => $barcode, + biblionumber => $biblio->biblionumber, + library => $branchcode, replacementprice => 99.00, - itype => $itemtype - }, - $biblio->biblionumber + itype => $itemtype, + } ); my $patron = $builder->build( { source => 'Borrower' } ); @@ -2319,14 +2265,14 @@ subtest '_FixOverduesOnReturn' => sub { { borrowernumber => $patron->{borrowernumber}, accounttype => 'FU', - itemnumber => $itemnumber, + itemnumber => $item->itemnumber, amount => 99.00, amountoutstanding => 99.00, lastincrement => 9.00, } )->store(); - C4::Circulation::_FixOverduesOnReturn( $patron->{borrowernumber}, $itemnumber ); + C4::Circulation::_FixOverduesOnReturn( $patron->{borrowernumber}, $item->itemnumber ); $accountline->_result()->discard_changes(); @@ -2342,7 +2288,7 @@ subtest '_FixOverduesOnReturn' => sub { } )->store(); - C4::Circulation::_FixOverduesOnReturn( $patron->{borrowernumber}, $itemnumber, 1 ); + C4::Circulation::_FixOverduesOnReturn( $patron->{borrowernumber}, $item->itemnumber, 1 ); $accountline->_result()->discard_changes(); my $offset = Koha::Account::Offsets->search({ debit_id => $accountline->id, type => 'Forgiven' })->next(); @@ -2360,7 +2306,7 @@ subtest '_FixOverduesOnReturn' => sub { } )->store(); - C4::Circulation::_FixOverduesOnReturn( $patron->{borrowernumber}, $itemnumber, 0, 1 ); + C4::Circulation::_FixOverduesOnReturn( $patron->{borrowernumber}, $item->itemnumber, 0, 1 ); $accountline->_result()->discard_changes(); $offset = Koha::Account::Offsets->search({ debit_id => $accountline->id, type => 'Dropbox' })->next(); diff --git a/t/db_dependent/Circulation/IsItemIssued.t b/t/db_dependent/Circulation/IsItemIssued.t index ab26f0c..bde42a9 100644 --- a/t/db_dependent/Circulation/IsItemIssued.t +++ b/t/db_dependent/Circulation/IsItemIssued.t @@ -59,33 +59,30 @@ my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; my $record = MARC::Record->new(); my ( $biblionumber, $biblioitemnumber ) = AddBiblio( $record, '' ); -my ( undef, undef, $itemnumber ) = AddItem( - { homebranch => $library->{branchcode}, - holdingbranch => $library->{branchcode}, - barcode => 'i_dont_exist', - itype => $itemtype - }, - $biblionumber +my $item = $builder->build_sample_item( + { + biblionumber => $biblionumber, + library => $library->{branchcode}, + itype => $itemtype + } ); -my $item = GetItem( $itemnumber ); +is ( IsItemIssued( $item->itemnumber ), 0, "item is not on loan at first" ); -is ( IsItemIssued( $item->{itemnumber} ), 0, "item is not on loan at first" ); - -AddIssue($borrower, 'i_dont_exist'); -is ( IsItemIssued( $item->{itemnumber} ), 1, "item is now on loan" ); +AddIssue($borrower, $item->barcode); +is ( IsItemIssued( $item->itemnumber ), 1, "item is now on loan" ); is( - DelItemCheck( $biblionumber, $itemnumber), + DelItemCheck( $biblionumber, $item->itemnumber), 'book_on_loan', 'item that is on loan cannot be deleted', ); -AddReturn('i_dont_exist', $library->{branchcode}); -is ( IsItemIssued( $item->{itemnumber} ), 0, "item has been returned" ); +AddReturn($item->barcode, $library->{branchcode}); +is ( IsItemIssued( $item->itemnumber ), 0, "item has been returned" ); is( - DelItemCheck( $biblionumber, $itemnumber), + DelItemCheck( $biblionumber, $item->itemnumber), 1, 'item that is not on loan can be deleted', ); diff --git a/t/lib/TestBuilder.pm b/t/lib/TestBuilder.pm index c66291c..be2a834 100644 --- a/t/lib/TestBuilder.pm +++ b/t/lib/TestBuilder.pm @@ -4,13 +4,19 @@ use Modern::Perl; use Koha::Database; use C4::Biblio; +use C4::Items; use Koha::Biblios; +use Koha::Items; use Bytes::Random::Secure; use Carp; use Module::Load; use String::Random; +use constant { + SIZE_BARCODE => 20, # Not perfect but avoid to fetch the value when creating a new item +}; + sub new { my ($class) = @_; my $self = {}; @@ -158,6 +164,30 @@ sub build_sample_biblio { return Koha::Biblios->find($biblio_id); } +sub build_sample_item { + my ( $self, $args ) = @_; + + my $biblionumber = + delete $args->{biblionumber} || $self->build_sample_biblio->biblionumber; + my $library = delete $args->{library} + || $self->build_object( { class => 'Koha::Libraries' } )->branchcode; + + my $itype = delete $args->{itype} + || $self->build_object( { class => 'Koha::ItemTypes' } )->itemtype; + + my ( undef, undef, $itemnumber ) = C4::Items::AddItem( + { + homebranch => $library, + holdingbranch => $library, + barcode => $self->_gen_text( { info => { size => SIZE_BARCODE } } ), + itype => $itype, + %$args, + }, + $biblionumber + ); + return Koha::Items->find($itemnumber); +} + # ------------------------------------------------------------------------------ # Internal helper routines -- 2.1.4