Lines 3-8
Link Here
|
3 |
use Modern::Perl; |
3 |
use Modern::Perl; |
4 |
|
4 |
|
5 |
use t::lib::Mocks; |
5 |
use t::lib::Mocks; |
|
|
6 |
use t::lib::TestBuilder; |
7 |
|
6 |
use C4::Context; |
8 |
use C4::Context; |
7 |
use C4::Branch; |
9 |
use C4::Branch; |
8 |
|
10 |
|
Lines 23-34
BEGIN {
Link Here
|
23 |
use_ok('C4::Reserves'); |
25 |
use_ok('C4::Reserves'); |
24 |
} |
26 |
} |
25 |
|
27 |
|
|
|
28 |
my $builder = t::lib::TestBuilder->new(); |
26 |
my $dbh = C4::Context->dbh; |
29 |
my $dbh = C4::Context->dbh; |
27 |
|
30 |
|
28 |
# Start transaction |
31 |
# Start transaction |
29 |
$dbh->{AutoCommit} = 0; |
32 |
$dbh->{AutoCommit} = 0; |
30 |
$dbh->{RaiseError} = 1; |
33 |
$dbh->{RaiseError} = 1; |
31 |
|
34 |
|
|
|
35 |
# Create two random branches |
36 |
my $branch_1 = $builder->build({ source => 'Branch' })->{ branchcode }; |
37 |
my $branch_2 = $builder->build({ source => 'Branch' })->{ branchcode }; |
38 |
|
32 |
my $borrowers_count = 5; |
39 |
my $borrowers_count = 5; |
33 |
|
40 |
|
34 |
$dbh->do('DELETE FROM itemtypes'); |
41 |
$dbh->do('DELETE FROM itemtypes'); |
Lines 44-50
$insert_sth->execute('ONLY1');
Link Here
|
44 |
my ($bibnum, $title, $bibitemnum) = create_helper_biblio('DUMMY'); |
51 |
my ($bibnum, $title, $bibitemnum) = create_helper_biblio('DUMMY'); |
45 |
|
52 |
|
46 |
# Create item instance for testing. |
53 |
# Create item instance for testing. |
47 |
my ($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'CPL', holdingbranch => 'CPL' } , $bibnum); |
54 |
my ($item_bibnum, $item_bibitemnum, $itemnumber) |
|
|
55 |
= AddItem({ homebranch => $branch_1, holdingbranch => $branch_1 } , $bibnum); |
48 |
|
56 |
|
49 |
# Create some borrowers |
57 |
# Create some borrowers |
50 |
my @borrowernumbers; |
58 |
my @borrowernumbers; |
Lines 53-72
foreach (1..$borrowers_count) {
Link Here
|
53 |
firstname => 'my firstname', |
61 |
firstname => 'my firstname', |
54 |
surname => 'my surname ' . $_, |
62 |
surname => 'my surname ' . $_, |
55 |
categorycode => 'S', |
63 |
categorycode => 'S', |
56 |
branchcode => 'CPL', |
64 |
branchcode => $branch_1, |
57 |
); |
65 |
); |
58 |
push @borrowernumbers, $borrowernumber; |
66 |
push @borrowernumbers, $borrowernumber; |
59 |
} |
67 |
} |
60 |
|
68 |
|
61 |
my $biblionumber = $bibnum; |
69 |
my $biblionumber = $bibnum; |
62 |
|
|
|
63 |
my @branches = GetBranchesLoop(); |
64 |
my $branch = $branches[0][0]{value}; |
65 |
|
70 |
|
66 |
# Create five item level holds |
71 |
# Create five item level holds |
67 |
foreach my $borrowernumber ( @borrowernumbers ) { |
72 |
foreach my $borrowernumber ( @borrowernumbers ) { |
68 |
AddReserve( |
73 |
AddReserve( |
69 |
$branch, |
74 |
$branch_1, |
70 |
$borrowernumber, |
75 |
$borrowernumber, |
71 |
$biblionumber, |
76 |
$biblionumber, |
72 |
my $bibitems = q{}, |
77 |
my $bibitems = q{}, |
Lines 89-98
is( $reserves->[2]->{priority}, 3, "Reserve 3 has a priority of 3" );
Link Here
|
89 |
is( $reserves->[3]->{priority}, 4, "Reserve 4 has a priority of 4" ); |
94 |
is( $reserves->[3]->{priority}, 4, "Reserve 4 has a priority of 4" ); |
90 |
is( $reserves->[4]->{priority}, 5, "Reserve 5 has a priority of 5" ); |
95 |
is( $reserves->[4]->{priority}, 5, "Reserve 5 has a priority of 5" ); |
91 |
|
96 |
|
92 |
my ( $reservedate, $borrowernumber, $branchcode, $reserve_id ) = GetReservesFromItemnumber($itemnumber); |
97 |
my ( $reservedate, $borrowernumber, $branch_1code, $reserve_id ) = GetReservesFromItemnumber($itemnumber); |
93 |
is( $reservedate, output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }), "GetReservesFromItemnumber should return a valid reserve date"); |
98 |
is( $reservedate, output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }), "GetReservesFromItemnumber should return a valid reserve date"); |
94 |
is( $borrowernumber, $borrowernumbers[0], "GetReservesFromItemnumber should return a valid borrowernumber"); |
99 |
is( $borrowernumber, $borrowernumbers[0], "GetReservesFromItemnumber should return a valid borrowernumber"); |
95 |
is( $branchcode, 'CPL', "GetReservesFromItemnumber should return a valid branchcode"); |
100 |
is( $branch_1code, $branch_1, "GetReservesFromItemnumber should return a valid branchcode"); |
96 |
ok($reserve_id, "Test GetReservesFromItemnumber()"); |
101 |
ok($reserve_id, "Test GetReservesFromItemnumber()"); |
97 |
|
102 |
|
98 |
my $hold = Koha::Holds->find( $reserve_id ); |
103 |
my $hold = Koha::Holds->find( $reserve_id ); |
Lines 122-132
$reserves = GetReservesFromBiblionumber({ biblionumber => $biblionumber });
Link Here
|
122 |
is( scalar(@$reserves), $borrowers_count - 1, "Test CancelReserve()" ); |
127 |
is( scalar(@$reserves), $borrowers_count - 1, "Test CancelReserve()" ); |
123 |
|
128 |
|
124 |
|
129 |
|
125 |
( $reservedate, $borrowernumber, $branchcode, $reserve_id ) = GetReservesFromItemnumber($itemnumber); |
130 |
( $reservedate, $borrowernumber, $branch_1code, $reserve_id ) = GetReservesFromItemnumber($itemnumber); |
126 |
ModReserve({ |
131 |
ModReserve({ |
127 |
reserve_id => $reserve_id, |
132 |
reserve_id => $reserve_id, |
128 |
rank => '4', |
133 |
rank => '4', |
129 |
branchcode => $branch, |
134 |
branchcode => $branch_1, |
130 |
itemnumber => $itemnumber, |
135 |
itemnumber => $itemnumber, |
131 |
suspend_until => C4::Dates->new("2013-01-01","iso")->output(), |
136 |
suspend_until => C4::Dates->new("2013-01-01","iso")->output(), |
132 |
}); |
137 |
}); |
Lines 149-155
ok( !$reserve->{'suspend'}, "Test AutoUnsuspendReserves()" );
Link Here
|
149 |
|
154 |
|
150 |
# Add a new hold for the borrower whose hold we canceled earlier, this time at the bib level |
155 |
# Add a new hold for the borrower whose hold we canceled earlier, this time at the bib level |
151 |
AddReserve( |
156 |
AddReserve( |
152 |
$branch, |
157 |
$branch_1, |
153 |
$borrowernumber, |
158 |
$borrowernumber, |
154 |
$biblionumber, |
159 |
$biblionumber, |
155 |
my $bibitems = q{}, |
160 |
my $bibitems = q{}, |
Lines 209-215
ok( $reserve->{'priority'} eq '5', "Test AlterPriority(), move to bottom" );
Link Here
|
209 |
|
214 |
|
210 |
my ($foreign_bibnum, $foreign_title, $foreign_bibitemnum) = create_helper_biblio('DUMMY'); |
215 |
my ($foreign_bibnum, $foreign_title, $foreign_bibitemnum) = create_helper_biblio('DUMMY'); |
211 |
my ($foreign_item_bibnum, $foreign_item_bibitemnum, $foreign_itemnumber) |
216 |
my ($foreign_item_bibnum, $foreign_item_bibitemnum, $foreign_itemnumber) |
212 |
= AddItem({ homebranch => 'MPL', holdingbranch => 'MPL' } , $foreign_bibnum); |
217 |
= AddItem({ homebranch => $branch_2, holdingbranch => $branch_2 } , $foreign_bibnum); |
213 |
$dbh->do('DELETE FROM issuingrules'); |
218 |
$dbh->do('DELETE FROM issuingrules'); |
214 |
$dbh->do( |
219 |
$dbh->do( |
215 |
q{INSERT INTO issuingrules (categorycode, branchcode, itemtype, reservesallowed) |
220 |
q{INSERT INTO issuingrules (categorycode, branchcode, itemtype, reservesallowed) |
Lines 228-246
$dbh->do(
Link Here
|
228 |
t::lib::Mocks::mock_preference('ReservesControlBranch', 'ItemHomeLibrary'); |
233 |
t::lib::Mocks::mock_preference('ReservesControlBranch', 'ItemHomeLibrary'); |
229 |
t::lib::Mocks::mock_preference('item-level_itypes', 1); |
234 |
t::lib::Mocks::mock_preference('item-level_itypes', 1); |
230 |
|
235 |
|
231 |
# if IndependentBranches is OFF, a CPL patron can reserve an MPL item |
236 |
# if IndependentBranches is OFF, a $branch_1 patron can reserve an $branch_2 item |
232 |
t::lib::Mocks::mock_preference('IndependentBranches', 0); |
237 |
t::lib::Mocks::mock_preference('IndependentBranches', 0); |
233 |
ok( |
238 |
ok( |
234 |
CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber) eq 'OK', |
239 |
CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber) eq 'OK', |
235 |
'CPL patron allowed to reserve MPL item with IndependentBranches OFF (bug 2394)' |
240 |
'$branch_1 patron allowed to reserve $branch_2 item with IndependentBranches OFF (bug 2394)' |
236 |
); |
241 |
); |
237 |
|
242 |
|
238 |
# if IndependentBranches is OFF, a CPL patron cannot reserve an MPL item |
243 |
# if IndependentBranches is OFF, a $branch_1 patron cannot reserve an $branch_2 item |
239 |
t::lib::Mocks::mock_preference('IndependentBranches', 1); |
244 |
t::lib::Mocks::mock_preference('IndependentBranches', 1); |
240 |
t::lib::Mocks::mock_preference('canreservefromotherbranches', 0); |
245 |
t::lib::Mocks::mock_preference('canreservefromotherbranches', 0); |
241 |
ok( |
246 |
ok( |
242 |
CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber) eq 'cannotReserveFromOtherBranches', |
247 |
CanItemBeReserved($borrowernumbers[0], $foreign_itemnumber) eq 'cannotReserveFromOtherBranches', |
243 |
'CPL patron NOT allowed to reserve MPL item with IndependentBranches ON ... (bug 2394)' |
248 |
'$branch_1 patron NOT allowed to reserve $branch_2 item with IndependentBranches ON ... (bug 2394)' |
244 |
); |
249 |
); |
245 |
|
250 |
|
246 |
# ... unless canreservefromotherbranches is ON |
251 |
# ... unless canreservefromotherbranches is ON |
Lines 252-260
ok(
Link Here
|
252 |
|
257 |
|
253 |
# Regression test for bug 11336 |
258 |
# Regression test for bug 11336 |
254 |
($bibnum, $title, $bibitemnum) = create_helper_biblio('DUMMY'); |
259 |
($bibnum, $title, $bibitemnum) = create_helper_biblio('DUMMY'); |
255 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'CPL', holdingbranch => 'CPL' } , $bibnum); |
260 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1 } , $bibnum); |
256 |
AddReserve( |
261 |
AddReserve( |
257 |
$branch, |
262 |
$branch_1, |
258 |
$borrowernumbers[0], |
263 |
$borrowernumbers[0], |
259 |
$bibnum, |
264 |
$bibnum, |
260 |
'', |
265 |
'', |
Lines 268-276
my $reserveid1 = C4::Reserves::GetReserveId(
Link Here
|
268 |
} |
273 |
} |
269 |
); |
274 |
); |
270 |
|
275 |
|
271 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'CPL', holdingbranch => 'CPL' } , $bibnum); |
276 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1 } , $bibnum); |
272 |
AddReserve( |
277 |
AddReserve( |
273 |
$branch, |
278 |
$branch_1, |
274 |
$borrowernumbers[1], |
279 |
$borrowernumbers[1], |
275 |
$bibnum, |
280 |
$bibnum, |
276 |
'', |
281 |
'', |
Lines 288-296
CancelReserve({ reserve_id => $reserveid1 });
Link Here
|
288 |
$reserve2 = GetReserve( $reserveid2 ); |
293 |
$reserve2 = GetReserve( $reserveid2 ); |
289 |
is( $reserve2->{priority}, 1, "After cancelreserve, the 2nd reserve becomes the first on the waiting list" ); |
294 |
is( $reserve2->{priority}, 1, "After cancelreserve, the 2nd reserve becomes the first on the waiting list" ); |
290 |
|
295 |
|
291 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'CPL', holdingbranch => 'CPL' } , $bibnum); |
296 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1 } , $bibnum); |
292 |
AddReserve( |
297 |
AddReserve( |
293 |
$branch, |
298 |
$branch_1, |
294 |
$borrowernumbers[0], |
299 |
$borrowernumbers[0], |
295 |
$bibnum, |
300 |
$bibnum, |
296 |
'', |
301 |
'', |
Lines 320-328
ok( !defined( ( CheckReserves($itemnumber) )[1] ), "Hold cannot be trapped for d
Link Here
|
320 |
|
325 |
|
321 |
# Regression test for bug 9532 |
326 |
# Regression test for bug 9532 |
322 |
($bibnum, $title, $bibitemnum) = create_helper_biblio('CANNOT'); |
327 |
($bibnum, $title, $bibitemnum) = create_helper_biblio('CANNOT'); |
323 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'CPL', holdingbranch => 'CPL', itype => 'CANNOT' } , $bibnum); |
328 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => $branch_1, holdingbranch => $branch_1, itype => 'CANNOT' } , $bibnum); |
324 |
AddReserve( |
329 |
AddReserve( |
325 |
$branch, |
330 |
$branch_1, |
326 |
$borrowernumbers[0], |
331 |
$borrowernumbers[0], |
327 |
$bibnum, |
332 |
$bibnum, |
328 |
'', |
333 |
'', |
Lines 362-386
$dbh->do('DELETE FROM default_circ_rules');
Link Here
|
362 |
$dbh->do(q{ |
367 |
$dbh->do(q{ |
363 |
INSERT INTO branch_item_rules (branchcode, itemtype, holdallowed, returnbranch) |
368 |
INSERT INTO branch_item_rules (branchcode, itemtype, holdallowed, returnbranch) |
364 |
VALUES (?, ?, ?, ?) |
369 |
VALUES (?, ?, ?, ?) |
365 |
}, {}, 'CPL', 'CANNOT', 0, 'homebranch'); |
370 |
}, {}, $branch_1, 'CANNOT', 0, 'homebranch'); |
366 |
$dbh->do(q{ |
371 |
$dbh->do(q{ |
367 |
INSERT INTO branch_item_rules (branchcode, itemtype, holdallowed, returnbranch) |
372 |
INSERT INTO branch_item_rules (branchcode, itemtype, holdallowed, returnbranch) |
368 |
VALUES (?, ?, ?, ?) |
373 |
VALUES (?, ?, ?, ?) |
369 |
}, {}, 'CPL', 'CAN', 1, 'homebranch'); |
374 |
}, {}, $branch_1, 'CAN', 1, 'homebranch'); |
370 |
($bibnum, $title, $bibitemnum) = create_helper_biblio('CANNOT'); |
375 |
($bibnum, $title, $bibitemnum) = create_helper_biblio('CANNOT'); |
371 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem( |
376 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem( |
372 |
{ homebranch => 'CPL', holdingbranch => 'CPL', itype => 'CANNOT' } , $bibnum); |
377 |
{ homebranch => $branch_1, holdingbranch => $branch_1, itype => 'CANNOT' } , $bibnum); |
373 |
is(CanItemBeReserved($borrowernumbers[0], $itemnumber), 'notReservable', |
378 |
is(CanItemBeReserved($borrowernumbers[0], $itemnumber), 'notReservable', |
374 |
"CanItemBeReserved should returns 'notReservable'"); |
379 |
"CanItemBeReserved should returns 'notReservable'"); |
375 |
|
380 |
|
376 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem( |
381 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem( |
377 |
{ homebranch => 'MPL', holdingbranch => 'CPL', itype => 'CAN' } , $bibnum); |
382 |
{ homebranch => $branch_2, holdingbranch => $branch_1, itype => 'CAN' } , $bibnum); |
378 |
is(CanItemBeReserved($borrowernumbers[0], $itemnumber), |
383 |
is(CanItemBeReserved($borrowernumbers[0], $itemnumber), |
379 |
'cannotReserveFromOtherBranches', |
384 |
'cannotReserveFromOtherBranches', |
380 |
"CanItemBeReserved should returns 'cannotReserveFromOtherBranches'"); |
385 |
"CanItemBeReserved should returns 'cannotReserveFromOtherBranches'"); |
381 |
|
386 |
|
382 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem( |
387 |
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem( |
383 |
{ homebranch => 'CPL', holdingbranch => 'CPL', itype => 'CAN' } , $bibnum); |
388 |
{ homebranch => $branch_1, holdingbranch => $branch_1, itype => 'CAN' } , $bibnum); |
384 |
is(CanItemBeReserved($borrowernumbers[0], $itemnumber), 'OK', |
389 |
is(CanItemBeReserved($borrowernumbers[0], $itemnumber), 'OK', |
385 |
"CanItemBeReserved should returns 'OK'"); |
390 |
"CanItemBeReserved should returns 'OK'"); |
386 |
|
391 |
|
Lines 431-437
$dbh->do('DELETE FROM items');
Link Here
|
431 |
$dbh->do('DELETE FROM biblio'); |
436 |
$dbh->do('DELETE FROM biblio'); |
432 |
|
437 |
|
433 |
( $bibnum, $title, $bibitemnum ) = create_helper_biblio('ONLY1'); |
438 |
( $bibnum, $title, $bibitemnum ) = create_helper_biblio('ONLY1'); |
434 |
( $item_bibnum, $item_bibitemnum, $itemnumber ) = AddItem( { homebranch => 'CPL', holdingbranch => 'CPL' }, $bibnum ); |
439 |
( $item_bibnum, $item_bibitemnum, $itemnumber ) |
|
|
440 |
= AddItem( { homebranch => $branch_1, holdingbranch => $branch_1 }, $bibnum ); |
435 |
|
441 |
|
436 |
$dbh->do( |
442 |
$dbh->do( |
437 |
q{INSERT INTO issuingrules (categorycode, branchcode, itemtype, reservesallowed) |
443 |
q{INSERT INTO issuingrules (categorycode, branchcode, itemtype, reservesallowed) |
Lines 442-448
$dbh->do(
Link Here
|
442 |
is( CanItemBeReserved( $borrowernumbers[0], $itemnumber ), |
448 |
is( CanItemBeReserved( $borrowernumbers[0], $itemnumber ), |
443 |
'OK', 'Patron can reserve item with hold limit of 1, no holds placed' ); |
449 |
'OK', 'Patron can reserve item with hold limit of 1, no holds placed' ); |
444 |
|
450 |
|
445 |
my $res_id = AddReserve( $branch, $borrowernumbers[0], $bibnum, '', 1, ); |
451 |
my $res_id = AddReserve( $branch_1, $borrowernumbers[0], $bibnum, '', 1, ); |
446 |
|
452 |
|
447 |
is( CanItemBeReserved( $borrowernumbers[0], $itemnumber ), |
453 |
is( CanItemBeReserved( $borrowernumbers[0], $itemnumber ), |
448 |
'tooManyReserves', 'Patron cannot reserve item with hold limit of 1, 1 bib level hold placed' ); |
454 |
'tooManyReserves', 'Patron cannot reserve item with hold limit of 1, 1 bib level hold placed' ); |
449 |
- |
|
|