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

(-)a/t/db_dependent/api/v1/circulation_rules.t (-4 / +108 lines)
Lines 17-23 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 1;
20
use Test::More tests => 2;
21
use Test::Mojo;
21
use Test::Mojo;
22
22
23
use t::lib::TestBuilder;
23
use t::lib::TestBuilder;
Lines 269-277 subtest 'list_rules() tests' => sub { Link Here
269
269
270
            # First (and only) rule set should match branchcode, default, default.
270
            # First (and only) rule set should match branchcode, default, default.
271
            if ( $index == 0 ) {
271
            if ( $index == 0 ) {
272
                ok(        $pointer->get('/context/library_id') eq $branchcode
272
                ok(
273
                           $pointer->get('/context/library_id') eq $branchcode
273
                        && $pointer->get('/context/item_type_id') eq '*'
274
                        && $pointer->get('/context/item_type_id') eq '*'
274
                        && $pointer->get('/context/patron_category_id') eq '*', "Branchcode rule set returned when filtered" );
275
                        && $pointer->get('/context/patron_category_id') eq '*',
276
                    "Branchcode rule set returned when filtered"
277
                );
275
            }
278
            }
276
279
277
            # Iterate over the list of expected keys for each hash
280
            # Iterate over the list of expected keys for each hash
Lines 285-287 subtest 'list_rules() tests' => sub { Link Here
285
    };
288
    };
286
    $schema->storage->txn_rollback;
289
    $schema->storage->txn_rollback;
287
};
290
};
288
- 
291
292
subtest 'set_rules() tests' => sub {
293
    plan tests => 23;
294
295
    $schema->storage->txn_begin;
296
297
    my $categorycode = $builder->build( { source => 'Category' } )->{'categorycode'};
298
    my $itemtype     = $builder->build( { source => 'Itemtype' } )->{'itemtype'};
299
    my $branchcode   = $builder->build( { source => 'Branch' } )->{'branchcode'};
300
    Koha::CirculationRules->delete;
301
302
    my $librarian = $builder->build_object(
303
        {
304
            class => 'Koha::Patrons',
305
            value => { flags => 2 }     # circulate
306
        }
307
    );
308
    my $password = 'thePassword123';
309
    $librarian->set_password( { password => $password, skip_validation => 1 } );
310
    my $userid = $librarian->userid;
311
312
    my $patron = $builder->build_object(
313
        {
314
            class => 'Koha::Patrons',
315
            value => { flags => 0 }
316
        }
317
    );
318
319
    $patron->set_password( { password => $password, skip_validation => 1 } );
320
    my $unauth_userid = $patron->userid;
321
322
    ## Authorized user tests
323
    note("Authorized user setting rules");
324
325
    my $rules_to_set = {
326
        context => {
327
            library_id         => $branchcode,
328
            patron_category_id => $categorycode,
329
            item_type_id       => $itemtype,
330
        },
331
        fine     => 5,
332
        finedays => 7,
333
    };
334
335
    $t->put_ok( "//$userid:$password@/api/v1/circulation_rules" => json => $rules_to_set )->status_is(200);
336
337
    # Verify the rules were set
338
    my $json = $t->tx->res->json;
339
    is( $json->{fine},     5, "Fine rule set correctly" );
340
    is( $json->{finedays}, 7, "Finedays rule set correctly" );
341
342
    # Invalid item_type_id
343
    note("Invalid item_type_id");
344
    $rules_to_set->{context}->{item_type_id} = 'invalid_itemtype';
345
    $t->put_ok( "//$userid:$password@/api/v1/circulation_rules" => json => $rules_to_set )->status_is(400)
346
        ->json_is( '/error_code' => 'invalid_parameter_value', "Handled invalid item_type_id" );
347
348
    # Invalid library_id
349
    note("Invalid library_id");
350
    $rules_to_set->{context}->{item_type_id} = $itemtype;
351
    $rules_to_set->{context}->{library_id}   = 'invalid_library';
352
    $t->put_ok( "//$userid:$password@/api/v1/circulation_rules" => json => $rules_to_set )->status_is(400)
353
        ->json_is( '/error_code' => 'invalid_parameter_value', "Handled invalid library_id" );
354
355
    # Invalid patron_category_id
356
    note("Invalid patron_category_id");
357
    $rules_to_set->{context}->{library_id}         = $branchcode;
358
    $rules_to_set->{context}->{patron_category_id} = 'invalid_category';
359
    $t->put_ok( "//$userid:$password@/api/v1/circulation_rules" => json => $rules_to_set )->status_is(400)
360
        ->json_is( '/error_code' => 'invalid_parameter_value', "Handled invalid patron_category_id" );
361
362
    # Unauthorized user tests
363
    note("Unauthorized user trying to set rules");
364
    $t->put_ok( "//$unauth_userid:$password@/api/v1/circulation_rules" => json => $rules_to_set )->status_is(403);
365
366
    # Reset to valid context
367
    $rules_to_set->{context}->{patron_category_id} = $categorycode;
368
369
    # Updating existing rules
370
    note("Updating existing rules");
371
    $rules_to_set->{fine} = 10;
372
    $t->put_ok( "//$userid:$password@/api/v1/circulation_rules" => json => $rules_to_set )->status_is(200);
373
374
    # Verify the rules were updated
375
    $json = $t->tx->res->json;
376
    is( $json->{fine},     10, "Fine rule updated correctly" );
377
    is( $json->{finedays}, 7,  "Finedays rule remains the same" );
378
379
    # Setting rules with '*' context
380
    note("Setting rules with '*' context");
381
    $rules_to_set->{context}->{library_id}         = '*';
382
    $rules_to_set->{context}->{patron_category_id} = '*';
383
    $rules_to_set->{context}->{item_type_id}       = '*';
384
    $t->put_ok( "//$userid:$password@/api/v1/circulation_rules" => json => $rules_to_set )->status_is(200);
385
386
    # Verify the rules were set for wildcard context
387
    $json = $t->tx->res->json;
388
    is( $json->{fine},     10, "Fine rule set correctly for wildcard context" );
389
    is( $json->{finedays}, 7,  "Finedays rule set correctly for wildcard context" );
390
391
    $schema->storage->txn_rollback;
392
};

Return to bug 37256