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

(-)a/t/db_dependent/Circulation/TooMany.t (-2 / +195 lines)
Lines 15-21 Link Here
15
# with Koha; if not, see <http://www.gnu.org/licenses>.
15
# with Koha; if not, see <http://www.gnu.org/licenses>.
16
16
17
use Modern::Perl;
17
use Modern::Perl;
18
use Test::More tests => 7;
18
use Test::More tests => 8;
19
use C4::Context;
19
use C4::Context;
20
20
21
use C4::Members;
21
use C4::Members;
Lines 469-474 subtest '1 BranchBorrowerCircRule exist: 1 CO allowed, 1 OSCO allowed' => sub { Link Here
469
    teardown();
469
    teardown();
470
};
470
};
471
471
472
subtest 'General vs specific rules limit quantity correctly' => sub {
473
    plan tests => 9;
474
475
    t::lib::Mocks::mock_preference('CircControl', 'ItemHomeLibrary');
476
    my $branch   = $builder->build({source => 'Branch',});
477
    my $category = $builder->build({source => 'Category',});
478
    my $itemtype = $builder->build({
479
        source => 'Itemtype',
480
        value => {
481
            rentalcharge => 0,
482
            rentalcharge_daily => 0,
483
            rentalcharge_hourly => 0,
484
            notforloan => 0,
485
        }
486
    });
487
    my $patron = $builder->build({
488
        source => 'Borrower',
489
        value => {
490
            categorycode => $category->{categorycode},
491
            branchcode => $branch->{branchcode},
492
        }
493
    });
494
495
    # Set up an issuing rule
496
    my $rule = $builder->build({
497
        source => 'Issuingrule',
498
        value => {
499
            categorycode => '*',
500
            itemtype     => $itemtype->{itemtype},
501
            branchcode   => '*',
502
            issuelength  => 1,
503
            firstremind  => 1,        # 1 day of grace
504
            finedays     => 2,        # 2 days of fine per day of overdue
505
            lengthunit   => 'days',
506
        }
507
    });
508
509
    # Set an All->All for an itemtype
510
    Koha::CirculationRules->set_rules(
511
        {
512
            branchcode   => '*',
513
            categorycode => '*',
514
            itemtype     => $itemtype->{itemtype},
515
            rules        => {
516
                maxissueqty       => 1,
517
                maxonsiteissueqty => 1,
518
            }
519
        }
520
    );
521
522
    # Create an item
523
    my $item = $builder->build_sample_item({
524
        itype => $itemtype->{itemtype}
525
    });
526
    my $branch_item = $builder->build_sample_item({
527
        itype => $itemtype->{itemtype},
528
        homebranch => $branch->{branchcode},
529
        holdingbranch => $branch->{branchcode}
530
    });
531
532
533
    t::lib::Mocks::mock_userenv({ branchcode => $branch->{branchcode} });
534
    my $issue = C4::Circulation::AddIssue( $patron, $item->barcode, dt_from_string() );
535
    # We checkout one item
536
    is_deeply(
537
        C4::Circulation::TooMany( $patron, $branch_item->biblionumber, $branch_item->unblessed ),
538
        {
539
            reason => 'TOO_MANY_CHECKOUTS',
540
            count => 1,
541
            max_allowed => 1,
542
        },
543
        'We are only allowed one, and we have one'
544
    );
545
546
547
    # Set a branch specific rule
548
    Koha::CirculationRules->set_rules(
549
        {
550
            branchcode   => $branch->{branchcode},
551
            categorycode => $category->{categorycode},
552
            itemtype     => $itemtype->{itemtype},
553
            rules        => {
554
                maxissueqty       => 1,
555
                maxonsiteissueqty => 1,
556
            }
557
        }
558
    );
559
560
    is(
561
        C4::Circulation::TooMany( $patron, $branch_item->biblionumber, $branch_item->unblessed ),
562
        undef,
563
        'We are allowed one from the branch specifically now'
564
    );
565
566
    # If circcontrol is PatronLibrary we count all the patron's loan, regardless of branch
567
    t::lib::Mocks::mock_preference('CircControl', 'PatronLibrary');
568
    is_deeply(
569
        C4::Circulation::TooMany( $patron, $branch_item->biblionumber, $branch_item->unblessed ),
570
        {
571
            reason => 'TOO_MANY_CHECKOUTS',
572
            count => 1,
573
            max_allowed => 1,
574
        },
575
        'We are allowed one from the branch specifically, but have one'
576
    );
577
    t::lib::Mocks::mock_preference('CircControl', 'ItemHomeLibrary');
578
579
    $issue = C4::Circulation::AddIssue( $patron, $branch_item->barcode, dt_from_string() );
580
    # We issue that one
581
    # And make another
582
    my $branch_item_2 = $builder->build_sample_item({
583
        itype => $itemtype->{itemtype},
584
        homebranch => $branch->{branchcode},
585
        holdingbranch => $branch->{branchcode}
586
    });
587
    is_deeply(
588
        C4::Circulation::TooMany( $patron, $branch_item_2->biblionumber, $branch_item_2->unblessed ),
589
        {
590
            reason => 'TOO_MANY_CHECKOUTS',
591
            count => 1,
592
            max_allowed => 1,
593
        },
594
        'We are only allowed one from that branch, and have one'
595
    );
596
597
    # Now we make anothe from a different branch
598
    my $item_2 = $builder->build_sample_item({
599
        itype => $itemtype->{itemtype},
600
    });
601
    is_deeply(
602
        C4::Circulation::TooMany( $patron, $item_2->biblionumber, $item_2->unblessed ),
603
        {
604
            reason => 'TOO_MANY_CHECKOUTS',
605
            count => 2,
606
            max_allowed => 1,
607
        },
608
        'We are only allowed one for general rule, and have two'
609
    );
610
    t::lib::Mocks::mock_preference('CircControl', 'PatronLibrary');
611
    is_deeply(
612
        C4::Circulation::TooMany( $patron, $item_2->biblionumber, $item_2->unblessed ),
613
        {
614
            reason => 'TOO_MANY_CHECKOUTS',
615
            count => 2,
616
            max_allowed => 1,
617
        },
618
        'We are only allowed one for general rule, and have two'
619
    );
620
621
    t::lib::Mocks::mock_preference('CircControl', 'PickupLibrary');
622
    is_deeply(
623
        C4::Circulation::TooMany( $patron, $item_2->biblionumber, $item_2->unblessed ),
624
        {
625
            reason => 'TOO_MANY_CHECKOUTS',
626
            count => 2,
627
            max_allowed => 1,
628
        },
629
        'We are only allowed one for general rule, and have checked out two at this branch'
630
    );
631
632
    my $branch2   = $builder->build({source => 'Branch',});
633
    t::lib::Mocks::mock_userenv({ branchcode => $branch2->{branchcode} });
634
    is_deeply(
635
        C4::Circulation::TooMany( $patron, $item_2->biblionumber, $item_2->unblessed ),
636
        {
637
            reason => 'TOO_MANY_CHECKOUTS',
638
            count => 2,
639
            max_allowed => 1,
640
        },
641
        'We are only allowed one for general rule, and have two total (no rule for specific branch)'
642
    );
643
    # Set a branch specific rule for new branch
644
    Koha::CirculationRules->set_rules(
645
        {
646
            branchcode   => $branch2->{branchcode},
647
            categorycode => $category->{categorycode},
648
            itemtype     => $itemtype->{itemtype},
649
            rules        => {
650
                maxissueqty       => 1,
651
                maxonsiteissueqty => 1,
652
            }
653
        }
654
    );
655
656
    is(
657
        C4::Circulation::TooMany( $patron, $branch_item->biblionumber, $branch_item->unblessed ),
658
        undef,
659
        'We are allowed one from the branch specifically now'
660
    );
661
662
663
664
};
665
472
$schema->storage->txn_rollback;
666
$schema->storage->txn_rollback;
473
667
474
sub teardown {
668
sub teardown {
475
- 

Return to bug 22759