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

(-)a/t/db_dependent/Circulation.t (-3 / +116 lines)
Lines 17-23 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 119;
20
use Test::More tests => 120;
21
21
22
use Data::Dumper;
22
use Data::Dumper;
23
use DateTime;
23
use DateTime;
Lines 226-232 C4::Context->dbh->do("DELETE FROM borrowers WHERE cardnumber = '99999999999'"); Link Here
226
C4::Context->dbh->do("DELETE FROM accountlines");
226
C4::Context->dbh->do("DELETE FROM accountlines");
227
{
227
{
228
# CanBookBeRenewed tests
228
# CanBookBeRenewed tests
229
229
    t::lib::Mocks::mock_preference( 'ItemsDeniedRenewal', '' ); #Ensure pref doesn't affect current tests
230
    # Generate test biblio
230
    # Generate test biblio
231
    my $title = 'Silence in the library';
231
    my $title = 'Silence in the library';
232
    my ($biblionumber, $biblioitemnumber) = add_biblio($title, 'Moffat, Steven');
232
    my ($biblionumber, $biblioitemnumber) = add_biblio($title, 'Moffat, Steven');
Lines 2209-2215 subtest 'CanBookBeIssued | is_overdue' => sub { Link Here
2209
    my ($issuingimpossible, $needsconfirmation) = CanBookBeIssued($patron,$item->{barcode},$ten_days_go, undef, undef, undef);
2209
    my ($issuingimpossible, $needsconfirmation) = CanBookBeIssued($patron,$item->{barcode},$ten_days_go, undef, undef, undef);
2210
    is( $needsconfirmation->{RENEW_ISSUE}, 1, "This is a renewal");
2210
    is( $needsconfirmation->{RENEW_ISSUE}, 1, "This is a renewal");
2211
    is( $needsconfirmation->{TOO_MANY}, undef, "Not too many, is a renewal");
2211
    is( $needsconfirmation->{TOO_MANY}, undef, "Not too many, is a renewal");
2212
};
2213
2214
subtest 'ItemsDeniedRenewal preference' => sub {
2215
    plan tests => 16;
2212
2216
2217
    t::lib::Mocks::mock_preference( 'ItemsDeniedRenewal', '' );
2218
2219
    $dbh->do('DELETE FROM issues');
2220
    $dbh->do('DELETE FROM items');
2221
    $dbh->do('DELETE FROM issuingrules');
2222
    $dbh->do(
2223
        q{
2224
        INSERT INTO issuingrules ( categorycode, branchcode, itemtype, reservesallowed, maxissueqty, issuelength, lengthunit, renewalsallowed, renewalperiod,
2225
                    norenewalbefore, auto_renew, fine, chargeperiod ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
2226
        },
2227
        {},
2228
        '*', '*', '*', 25,
2229
        20,  14,  'days',
2230
        10,   7,
2231
        undef,  0,
2232
        .10, 1
2233
    );
2234
2235
    my $deny_book = $builder->build_object({ class => 'Koha::Items', value => {
2236
        withdrawn => 1,
2237
        itype => 'HIDE',
2238
        location => 'PROC',
2239
        itemcallnumber => undef,
2240
        itemnotes => "",
2241
        }
2242
    });
2243
    my $allow_book = $builder->build_object({ class => 'Koha::Items', value => {
2244
        withdrawn => 0,
2245
        itype => 'NOHIDE',
2246
        location => 'NOPROC'
2247
        }
2248
    });
2249
2250
    my $idr_borrower = $builder->build_object({ class => 'Koha::Patrons'});
2251
    my $future = dt_from_string->add( days => 1 );
2252
    my $deny_issue = $builder->build_object({ class => 'Koha::Checkouts', value => {
2253
        returndate => undef,
2254
        renewals => 0,
2255
        auto_renew => 0,
2256
        borrowernumber => $idr_borrower->borrowernumber,
2257
        itemnumber => $deny_book->itemnumber,
2258
        onsite_checkout => 0,
2259
        date_due => $future,
2260
        }
2261
    });
2262
    my $allow_issue = $builder->build_object({ class => 'Koha::Checkouts', value => {
2263
        returndate => undef,
2264
        renewals => 0,
2265
        auto_renew => 0,
2266
        borrowernumber => $idr_borrower->borrowernumber,
2267
        itemnumber => $allow_book->itemnumber,
2268
        onsite_checkout => 0,
2269
        date_due => $future,
2270
        }
2271
    });
2272
2273
    my $idr_rules;
2274
2275
    my ( $idr_mayrenew, $idr_error ) =
2276
    CanBookBeRenewed( $idr_borrower->borrowernumber, $deny_issue->itemnumber );
2277
    is( $idr_mayrenew, 1, 'Renewal allowed when no rules' );
2278
    is( $idr_error, undef, 'Renewal allowed when no rules' );
2279
2280
    $idr_rules="withdrawn: [1]";
2281
2282
    t::lib::Mocks::mock_preference( 'ItemsDeniedRenewal', $idr_rules );
2283
    ( $idr_mayrenew, $idr_error ) =
2284
    CanBookBeRenewed( $idr_borrower->borrowernumber, $deny_issue->itemnumber );
2285
    is( $idr_mayrenew, 0, 'Renewal blocked when 1 rules (withdrawn)' );
2286
    is( $idr_error, 'item_denied_renewal', 'Renewal blocked when 1 rule (withdrawn)' );
2287
    ( $idr_mayrenew, $idr_error ) =
2288
    CanBookBeRenewed( $idr_borrower->borrowernumber, $allow_issue->itemnumber );
2289
    is( $idr_mayrenew, 1, 'Renewal allowed when 1 rules not matched (withdrawn)' );
2290
    is( $idr_error, undef, 'Renewal allowed when 1 rules not matched (withdrawn)' );
2291
2292
    $idr_rules="withdrawn: [1]\ntype: [HIDE,INVISILE]";
2293
2294
    t::lib::Mocks::mock_preference( 'ItemsDeniedRenewal', $idr_rules );
2295
    ( $idr_mayrenew, $idr_error ) =
2296
    CanBookBeRenewed( $idr_borrower->borrowernumber, $deny_issue->itemnumber );
2297
    is( $idr_mayrenew, 0, 'Renewal blocked when 2 rules matched (withdrawn, itype)' );
2298
    is( $idr_error, 'item_denied_renewal', 'Renewal blocked when 2 rules matched (withdrawn,itype)' );
2299
    ( $idr_mayrenew, $idr_error ) =
2300
    CanBookBeRenewed( $idr_borrower->borrowernumber, $allow_issue->itemnumber );
2301
    is( $idr_mayrenew, 1, 'Renewal allowed when 2 rules not matched (withdrawn, itype)' );
2302
    is( $idr_error, undef, 'Renewal allowed when 2 rules not matched (withdrawn, itype)' );
2303
2304
    $idr_rules="withdrawn: [1]\nitype: [HIDE,INVISIBLE]\nlocation: [PROC]";
2305
2306
    t::lib::Mocks::mock_preference( 'ItemsDeniedRenewal', $idr_rules );
2307
    ( $idr_mayrenew, $idr_error ) =
2308
    CanBookBeRenewed( $idr_borrower->borrowernumber, $deny_issue->itemnumber );
2309
    is( $idr_mayrenew, 0, 'Renewal blocked when 3 rules matched (withdrawn, itype, location)' );
2310
    is( $idr_error, 'item_denied_renewal', 'Renewal blocked when 3 rules matched (withdrawn,itype, location)' );
2311
    ( $idr_mayrenew, $idr_error ) =
2312
    CanBookBeRenewed( $idr_borrower->borrowernumber, $allow_issue->itemnumber );
2313
    is( $idr_mayrenew, 1, 'Renewal allowed when 3 rules not matched (withdrawn, itype, location)' );
2314
    is( $idr_error, undef, 'Renewal allowed when 3 rules not matched (withdrawn, itype, location)' );
2315
2316
    $idr_rules="itemcallnumber: [NULL]";
2317
    t::lib::Mocks::mock_preference( 'ItemsDeniedRenewal', $idr_rules );
2318
    ( $idr_mayrenew, $idr_error ) =
2319
    CanBookBeRenewed( $idr_borrower->borrowernumber, $deny_issue->itemnumber );
2320
    is( $idr_mayrenew, 0, 'Renewal blocked for undef when NULL in pref' );
2321
2322
    $idr_rules="itemnotes: ['']";
2323
    t::lib::Mocks::mock_preference( 'ItemsDeniedRenewal', $idr_rules );
2324
    ( $idr_mayrenew, $idr_error ) =
2325
    CanBookBeRenewed( $idr_borrower->borrowernumber, $deny_issue->itemnumber );
2326
    is( $idr_mayrenew, 0, 'Renewal blocked for empty string when "" in pref' );
2213
};
2327
};
2214
2328
2215
subtest 'CanBookBeIssued | item-level_itypes=biblio' => sub {
2329
subtest 'CanBookBeIssued | item-level_itypes=biblio' => sub {
2216
- 

Return to bug 15494