Lines 18-23
use Koha::Database;
Link Here
|
18 |
use Koha::DateUtils; |
18 |
use Koha::DateUtils; |
19 |
|
19 |
|
20 |
use t::lib::TestBuilder; |
20 |
use t::lib::TestBuilder; |
|
|
21 |
use t::lib::Mocks; |
21 |
|
22 |
|
22 |
BEGIN { |
23 |
BEGIN { |
23 |
use FindBin; |
24 |
use FindBin; |
Lines 61-68
my $itemtype = $builder->build({ source => 'Itemtype', value => { notforloan =>
Link Here
|
61 |
|
62 |
|
62 |
#Set up the stage |
63 |
#Set up the stage |
63 |
# Sysprefs and cost matrix |
64 |
# Sysprefs and cost matrix |
64 |
C4::Context->set_preference('HoldsQueueSkipClosed', 0); |
65 |
t::lib::Mocks::mock_preference('HoldsQueueSkipClosed', 0); |
65 |
C4::Context->set_preference('LocalHoldsPriority', 0); |
66 |
t::lib::Mocks::mock_preference('LocalHoldsPriority', 0); |
66 |
$dbh->do("UPDATE systempreferences SET value = ? WHERE variable = 'StaticHoldsQueueWeight'", undef, |
67 |
$dbh->do("UPDATE systempreferences SET value = ? WHERE variable = 'StaticHoldsQueueWeight'", undef, |
67 |
join( ',', @other_branches, $borrower_branchcode, $least_cost_branch_code)); |
68 |
join( ',', @other_branches, $borrower_branchcode, $least_cost_branch_code)); |
68 |
$dbh->do("UPDATE systempreferences SET value = '0' WHERE variable = 'RandomizeHoldsQueueWeight'"); |
69 |
$dbh->do("UPDATE systempreferences SET value = '0' WHERE variable = 'RandomizeHoldsQueueWeight'"); |
Lines 118-124
my $test_sth = $dbh->prepare("SELECT * FROM hold_fill_targets
Link Here
|
118 |
WHERE borrowernumber = $borrowernumber"); |
119 |
WHERE borrowernumber = $borrowernumber"); |
119 |
|
120 |
|
120 |
# We have a book available homed in borrower branch, no point fiddling with AutomaticItemReturn |
121 |
# We have a book available homed in borrower branch, no point fiddling with AutomaticItemReturn |
121 |
C4::Context->set_preference('AutomaticItemReturn', 0); |
122 |
t::lib::Mocks::mock_preference('AutomaticItemReturn', 0); |
122 |
test_queue ('take from homebranch', 0, $borrower_branchcode, $borrower_branchcode); |
123 |
test_queue ('take from homebranch', 0, $borrower_branchcode, $borrower_branchcode); |
123 |
test_queue ('take from homebranch', 1, $borrower_branchcode, $borrower_branchcode); |
124 |
test_queue ('take from homebranch', 1, $borrower_branchcode, $borrower_branchcode); |
124 |
|
125 |
|
Lines 127-140
$dbh->do("DELETE FROM hold_fill_targets");
Link Here
|
127 |
$dbh->do("DELETE FROM issues WHERE itemnumber IN (SELECT itemnumber FROM items WHERE homebranch = '$borrower_branchcode' AND holdingbranch = '$borrower_branchcode')"); |
128 |
$dbh->do("DELETE FROM issues WHERE itemnumber IN (SELECT itemnumber FROM items WHERE homebranch = '$borrower_branchcode' AND holdingbranch = '$borrower_branchcode')"); |
128 |
$dbh->do("DELETE FROM items WHERE homebranch = '$borrower_branchcode' AND holdingbranch = '$borrower_branchcode'"); |
129 |
$dbh->do("DELETE FROM items WHERE homebranch = '$borrower_branchcode' AND holdingbranch = '$borrower_branchcode'"); |
129 |
# test_queue will flush |
130 |
# test_queue will flush |
130 |
C4::Context->set_preference('AutomaticItemReturn', 1); |
131 |
t::lib::Mocks::mock_preference('AutomaticItemReturn', 1); |
131 |
# Not sure how to make this test more difficult - holding branch does not matter |
132 |
# Not sure how to make this test more difficult - holding branch does not matter |
132 |
|
133 |
|
133 |
$dbh->do("DELETE FROM tmp_holdsqueue"); |
134 |
$dbh->do("DELETE FROM tmp_holdsqueue"); |
134 |
$dbh->do("DELETE FROM hold_fill_targets"); |
135 |
$dbh->do("DELETE FROM hold_fill_targets"); |
135 |
$dbh->do("DELETE FROM issues WHERE itemnumber IN (SELECT itemnumber FROM items WHERE homebranch = '$borrower_branchcode')"); |
136 |
$dbh->do("DELETE FROM issues WHERE itemnumber IN (SELECT itemnumber FROM items WHERE homebranch = '$borrower_branchcode')"); |
136 |
$dbh->do("DELETE FROM items WHERE homebranch = '$borrower_branchcode'"); |
137 |
$dbh->do("DELETE FROM items WHERE homebranch = '$borrower_branchcode'"); |
137 |
C4::Context->set_preference('AutomaticItemReturn', 0); |
138 |
t::lib::Mocks::mock_preference('AutomaticItemReturn', 0); |
138 |
# We have a book available held in borrower branch |
139 |
# We have a book available held in borrower branch |
139 |
test_queue ('take from holdingbranch', 0, $borrower_branchcode, $borrower_branchcode); |
140 |
test_queue ('take from holdingbranch', 0, $borrower_branchcode, $borrower_branchcode); |
140 |
test_queue ('take from holdingbranch', 1, $borrower_branchcode, $borrower_branchcode); |
141 |
test_queue ('take from holdingbranch', 1, $borrower_branchcode, $borrower_branchcode); |
Lines 173-179
$dbh->do("DELETE FROM default_branch_circ_rules");
Link Here
|
173 |
$dbh->do("DELETE FROM default_branch_item_rules"); |
174 |
$dbh->do("DELETE FROM default_branch_item_rules"); |
174 |
$dbh->do("DELETE FROM default_circ_rules"); |
175 |
$dbh->do("DELETE FROM default_circ_rules"); |
175 |
|
176 |
|
176 |
C4::Context->set_preference('UseTransportCostMatrix', 0); |
177 |
t::lib::Mocks::mock_preference('UseTransportCostMatrix', 0); |
177 |
|
178 |
|
178 |
$itemtype = $builder->build({ source => 'Itemtype', value => { notforloan => 0 } })->{itemtype}; |
179 |
$itemtype = $builder->build({ source => 'Itemtype', value => { notforloan => 0 } })->{itemtype}; |
179 |
|
180 |
|
Lines 299-305
is( $holds_queue->[1]->{cardnumber}, $borrower2->{cardnumber}, "Holds queue fill
Link Here
|
299 |
# 1 of which is coming from MPL. Let's enable HoldsQueueSkipClosed |
300 |
# 1 of which is coming from MPL. Let's enable HoldsQueueSkipClosed |
300 |
# and make today a holiday for MPL. When we run it again we should only |
301 |
# and make today a holiday for MPL. When we run it again we should only |
301 |
# have 1 row in the holds queue |
302 |
# have 1 row in the holds queue |
302 |
C4::Context->set_preference('HoldsQueueSkipClosed', 1); |
303 |
t::lib::Mocks::mock_preference('HoldsQueueSkipClosed', 1); |
303 |
my $today = dt_from_string(); |
304 |
my $today = dt_from_string(); |
304 |
C4::Calendar->new( branchcode => $branchcodes[0] )->insert_single_holiday( |
305 |
C4::Calendar->new( branchcode => $branchcodes[0] )->insert_single_holiday( |
305 |
day => $today->day(), |
306 |
day => $today->day(), |
Lines 314-320
is( Koha::Calendar->new( branchcode => $branchcodes[0] )->is_holiday( $today ),
Link Here
|
314 |
C4::HoldsQueue::CreateQueue(); |
315 |
C4::HoldsQueue::CreateQueue(); |
315 |
$holds_queue = $dbh->selectall_arrayref("SELECT * FROM tmp_holdsqueue", { Slice => {} }); |
316 |
$holds_queue = $dbh->selectall_arrayref("SELECT * FROM tmp_holdsqueue", { Slice => {} }); |
316 |
is( scalar( @$holds_queue ), 1, "Holds not filled with items from closed libraries" ); |
317 |
is( scalar( @$holds_queue ), 1, "Holds not filled with items from closed libraries" ); |
317 |
C4::Context->set_preference('HoldsQueueSkipClosed', 0); |
318 |
t::lib::Mocks::mock_preference('HoldsQueueSkipClosed', 0); |
318 |
|
319 |
|
319 |
$dbh->do("DELETE FROM default_circ_rules"); |
320 |
$dbh->do("DELETE FROM default_circ_rules"); |
320 |
$dbh->do("INSERT INTO default_circ_rules ( holdallowed ) VALUES ( 2 )"); |
321 |
$dbh->do("INSERT INTO default_circ_rules ( holdallowed ) VALUES ( 2 )"); |
Lines 327-348
is( @$holds_queue, 3, "Holds queue filling correct number for holds for default
Link Here
|
327 |
# one of which is coming from MPL. Let's enable HoldsQueueSkipClosed |
328 |
# one of which is coming from MPL. Let's enable HoldsQueueSkipClosed |
328 |
# and use our previously created holiday for MPL |
329 |
# and use our previously created holiday for MPL |
329 |
# When we run it again we should only have 2 rows in the holds queue |
330 |
# When we run it again we should only have 2 rows in the holds queue |
330 |
C4::Context->set_preference( 'HoldsQueueSkipClosed', 1 ); |
331 |
t::lib::Mocks::mock_preference( 'HoldsQueueSkipClosed', 1 ); |
331 |
C4::HoldsQueue::CreateQueue(); |
332 |
C4::HoldsQueue::CreateQueue(); |
332 |
$holds_queue = $dbh->selectall_arrayref("SELECT * FROM tmp_holdsqueue", { Slice => {} }); |
333 |
$holds_queue = $dbh->selectall_arrayref("SELECT * FROM tmp_holdsqueue", { Slice => {} }); |
333 |
is( scalar( @$holds_queue ), 2, "Holds not filled with items from closed libraries" ); |
334 |
is( scalar( @$holds_queue ), 2, "Holds not filled with items from closed libraries" ); |
334 |
C4::Context->set_preference( 'HoldsQueueSkipClosed', 0 ); |
335 |
t::lib::Mocks::mock_preference( 'HoldsQueueSkipClosed', 0 ); |
335 |
|
336 |
|
336 |
## Test LocalHoldsPriority |
337 |
## Test LocalHoldsPriority |
337 |
C4::Context->set_preference('LocalHoldsPriority', 1); |
338 |
t::lib::Mocks::mock_preference('LocalHoldsPriority', 1); |
338 |
|
339 |
|
339 |
$dbh->do("DELETE FROM default_circ_rules"); |
340 |
$dbh->do("DELETE FROM default_circ_rules"); |
340 |
$dbh->do("INSERT INTO default_circ_rules ( holdallowed ) VALUES ( 2 )"); |
341 |
$dbh->do("INSERT INTO default_circ_rules ( holdallowed ) VALUES ( 2 )"); |
341 |
$dbh->do("DELETE FROM issues"); |
342 |
$dbh->do("DELETE FROM issues"); |
342 |
|
343 |
|
343 |
# Test homebranch = patron branch |
344 |
# Test homebranch = patron branch |
344 |
C4::Context->set_preference('LocalHoldsPriorityPatronControl', 'HomeLibrary'); |
345 |
t::lib::Mocks::mock_preference('LocalHoldsPriorityPatronControl', 'HomeLibrary'); |
345 |
C4::Context->set_preference('LocalHoldsPriorityItemControl', 'homebranch'); |
346 |
t::lib::Mocks::mock_preference('LocalHoldsPriorityItemControl', 'homebranch'); |
346 |
C4::Context->clear_syspref_cache(); |
347 |
C4::Context->clear_syspref_cache(); |
347 |
$dbh->do("DELETE FROM reserves"); |
348 |
$dbh->do("DELETE FROM reserves"); |
348 |
$sth->execute( $borrower1->{borrowernumber}, $biblionumber, $branchcodes[0], 1 ); |
349 |
$sth->execute( $borrower1->{borrowernumber}, $biblionumber, $branchcodes[0], 1 ); |
Lines 358-365
$holds_queue = $dbh->selectall_arrayref("SELECT * FROM tmp_holdsqueue", { Slice
Link Here
|
358 |
is( $holds_queue->[0]->{cardnumber}, $borrower3->{cardnumber}, "Holds queue giving priority to patron who's home library matches item's home library"); |
359 |
is( $holds_queue->[0]->{cardnumber}, $borrower3->{cardnumber}, "Holds queue giving priority to patron who's home library matches item's home library"); |
359 |
|
360 |
|
360 |
# Test holdingbranch = patron branch |
361 |
# Test holdingbranch = patron branch |
361 |
C4::Context->set_preference('LocalHoldsPriorityPatronControl', 'HomeLibrary'); |
362 |
t::lib::Mocks::mock_preference('LocalHoldsPriorityPatronControl', 'HomeLibrary'); |
362 |
C4::Context->set_preference('LocalHoldsPriorityItemControl', 'holdingbranch'); |
363 |
t::lib::Mocks::mock_preference('LocalHoldsPriorityItemControl', 'holdingbranch'); |
363 |
C4::Context->clear_syspref_cache(); |
364 |
C4::Context->clear_syspref_cache(); |
364 |
$dbh->do("DELETE FROM reserves"); |
365 |
$dbh->do("DELETE FROM reserves"); |
365 |
$sth->execute( $borrower1->{borrowernumber}, $biblionumber, $branchcodes[0], 1 ); |
366 |
$sth->execute( $borrower1->{borrowernumber}, $biblionumber, $branchcodes[0], 1 ); |
Lines 375-382
$holds_queue = $dbh->selectall_arrayref("SELECT * FROM tmp_holdsqueue", { Slice
Link Here
|
375 |
is( $holds_queue->[0]->{cardnumber}, $borrower3->{cardnumber}, "Holds queue giving priority to patron who's home library matches item's holding library"); |
376 |
is( $holds_queue->[0]->{cardnumber}, $borrower3->{cardnumber}, "Holds queue giving priority to patron who's home library matches item's holding library"); |
376 |
|
377 |
|
377 |
# Test holdingbranch = pickup branch |
378 |
# Test holdingbranch = pickup branch |
378 |
C4::Context->set_preference('LocalHoldsPriorityPatronControl', 'PickupLibrary'); |
379 |
t::lib::Mocks::mock_preference('LocalHoldsPriorityPatronControl', 'PickupLibrary'); |
379 |
C4::Context->set_preference('LocalHoldsPriorityItemControl', 'holdingbranch'); |
380 |
t::lib::Mocks::mock_preference('LocalHoldsPriorityItemControl', 'holdingbranch'); |
380 |
C4::Context->clear_syspref_cache(); |
381 |
C4::Context->clear_syspref_cache(); |
381 |
$dbh->do("DELETE FROM reserves"); |
382 |
$dbh->do("DELETE FROM reserves"); |
382 |
$sth->execute( $borrower1->{borrowernumber}, $biblionumber, $branchcodes[0], 1 ); |
383 |
$sth->execute( $borrower1->{borrowernumber}, $biblionumber, $branchcodes[0], 1 ); |
Lines 392-399
$holds_queue = $dbh->selectall_arrayref("SELECT * FROM tmp_holdsqueue", { Slice
Link Here
|
392 |
is( $holds_queue->[0]->{cardnumber}, $borrower3->{cardnumber}, "Holds queue giving priority to patron who's home library matches item's holding library"); |
393 |
is( $holds_queue->[0]->{cardnumber}, $borrower3->{cardnumber}, "Holds queue giving priority to patron who's home library matches item's holding library"); |
393 |
|
394 |
|
394 |
# Test homebranch = pickup branch |
395 |
# Test homebranch = pickup branch |
395 |
C4::Context->set_preference('LocalHoldsPriorityPatronControl', 'PickupLibrary'); |
396 |
t::lib::Mocks::mock_preference('LocalHoldsPriorityPatronControl', 'PickupLibrary'); |
396 |
C4::Context->set_preference('LocalHoldsPriorityItemControl', 'homebranch'); |
397 |
t::lib::Mocks::mock_preference('LocalHoldsPriorityItemControl', 'homebranch'); |
397 |
C4::Context->clear_syspref_cache(); |
398 |
C4::Context->clear_syspref_cache(); |
398 |
$dbh->do("DELETE FROM reserves"); |
399 |
$dbh->do("DELETE FROM reserves"); |
399 |
$sth->execute( $borrower1->{borrowernumber}, $biblionumber, $branchcodes[0], 1 ); |
400 |
$sth->execute( $borrower1->{borrowernumber}, $biblionumber, $branchcodes[0], 1 ); |
Lines 408-414
C4::HoldsQueue::CreateQueue();
Link Here
|
408 |
$holds_queue = $dbh->selectall_arrayref("SELECT * FROM tmp_holdsqueue", { Slice => {} }); |
409 |
$holds_queue = $dbh->selectall_arrayref("SELECT * FROM tmp_holdsqueue", { Slice => {} }); |
409 |
is( $holds_queue->[0]->{cardnumber}, $borrower3->{cardnumber}, "Holds queue giving priority to patron who's home library matches item's holding library"); |
410 |
is( $holds_queue->[0]->{cardnumber}, $borrower3->{cardnumber}, "Holds queue giving priority to patron who's home library matches item's holding library"); |
410 |
|
411 |
|
411 |
C4::Context->set_preference('LocalHoldsPriority', 0); |
412 |
t::lib::Mocks::mock_preference('LocalHoldsPriority', 0); |
412 |
## End testing of LocalHoldsPriority |
413 |
## End testing of LocalHoldsPriority |
413 |
|
414 |
|
414 |
|
415 |
|
Lines 487-493
$dbh->do("DELETE FROM default_branch_item_rules");
Link Here
|
487 |
$dbh->do("DELETE FROM default_circ_rules"); |
488 |
$dbh->do("DELETE FROM default_circ_rules"); |
488 |
$dbh->do("DELETE FROM branch_item_rules"); |
489 |
$dbh->do("DELETE FROM branch_item_rules"); |
489 |
|
490 |
|
490 |
C4::Context->set_preference("UseTransportCostMatrix",1); |
491 |
t::lib::Mocks::mock_preference("UseTransportCostMatrix",1); |
491 |
|
492 |
|
492 |
my $tc_rs = $schema->resultset('TransportCost'); |
493 |
my $tc_rs = $schema->resultset('TransportCost'); |
493 |
$tc_rs->create({ frombranch => $library_A, tobranch => $library_B, cost => 0, disable_transfer => 1 }); |
494 |
$tc_rs->create({ frombranch => $library_A, tobranch => $library_B, cost => 0, disable_transfer => 1 }); |
Lines 518-524
is( @$holds_queue, 0, "Bug 15062 - Holds queue with Transport Cost Matrix will t
Link Here
|
518 |
# End Bug 15062 |
519 |
# End Bug 15062 |
519 |
|
520 |
|
520 |
# Test hold_fulfillment_policy |
521 |
# Test hold_fulfillment_policy |
521 |
C4::Context->set_preference( "UseTransportCostMatrix", 0 ); |
522 |
t::lib::Mocks::mock_preference( "UseTransportCostMatrix", 0 ); |
522 |
$borrowernumber = $borrower3->{borrowernumber}; |
523 |
$borrowernumber = $borrower3->{borrowernumber}; |
523 |
$library_A = $library1->{branchcode}; |
524 |
$library_A = $library1->{branchcode}; |
524 |
$library_B = $library2->{branchcode}; |
525 |
$library_B = $library2->{branchcode}; |
Lines 630-636
CancelReserve( { reserve_id => $reserve_id } );
Link Here
|
630 |
# End testing hold_fulfillment_policy |
631 |
# End testing hold_fulfillment_policy |
631 |
|
632 |
|
632 |
# Test hold itemtype limit |
633 |
# Test hold itemtype limit |
633 |
C4::Context->set_preference( "UseTransportCostMatrix", 0 ); |
634 |
t::lib::Mocks::mock_preference( "UseTransportCostMatrix", 0 ); |
634 |
my $wrong_itemtype = $builder->build({ source => 'Itemtype', value => { notforloan => 0 } })->{itemtype}; |
635 |
my $wrong_itemtype = $builder->build({ source => 'Itemtype', value => { notforloan => 0 } })->{itemtype}; |
635 |
my $right_itemtype = $builder->build({ source => 'Itemtype', value => { notforloan => 0 } })->{itemtype}; |
636 |
my $right_itemtype = $builder->build({ source => 'Itemtype', value => { notforloan => 0 } })->{itemtype}; |
636 |
$borrowernumber = $borrower3->{borrowernumber}; |
637 |
$borrowernumber = $borrower3->{borrowernumber}; |