View | Details | Raw Unified | Return to bug 14733
Collapse All | Expand All

(-)a/t/db_dependent/Holds.t (-33 / +38 lines)
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
- 

Return to bug 14733