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

(-)a/t/db_dependent/Koha/Items.t (-80 / +37 lines)
Lines 1639-1718 subtest 'can_be_transferred' => sub { Link Here
1639
       'We get the same result also if we pass the from-library parameter.');
1639
       'We get the same result also if we pass the from-library parameter.');
1640
};
1640
};
1641
1641
1642
subtest 'filter_by_for_hold' => sub {
1643
    plan tests => 12;
1644
1645
    Koha::CirculationRules->search(
1646
        {
1647
            rule_name    => 'holdallowed',
1648
            rule_value   => 'not_allowed',
1649
        }
1650
    )->delete;
1651
1652
    my $biblio = $builder->build_sample_biblio;
1653
    is( $biblio->items->filter_by_for_hold->count, 0, 'no item yet' );
1654
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => 1 } );
1655
    is( $biblio->items->filter_by_for_hold->count, 0, 'no item for hold' );
1656
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => 0 } );
1657
    is( $biblio->items->filter_by_for_hold->count, 1, '1 item for hold' );
1658
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => -1 } );
1659
    is( $biblio->items->filter_by_for_hold->count, 2, '2 items for hold' );
1660
1661
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, itemlost => 0 } );
1662
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, itemlost => 1 } );
1663
    is( $biblio->items->filter_by_for_hold->count, 3, '3 items for hold - itemlost' );
1664
1665
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, withdrawn => 0 } );
1666
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, withdrawn => 1 } );
1667
    is( $biblio->items->filter_by_for_hold->count, 4, '4 items for hold - withdrawn' );
1668
1669
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, damaged => 0 } );
1670
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, damaged => 1 } );
1671
    t::lib::Mocks::mock_preference('AllowHoldsOnDamagedItems', 0);
1672
    is( $biblio->items->filter_by_for_hold->count, 5, '5 items for hold - not damaged if not AllowHoldsOnDamagedItems' );
1673
    t::lib::Mocks::mock_preference('AllowHoldsOnDamagedItems', 1);
1674
    is( $biblio->items->filter_by_for_hold->count, 6, '6 items for hold - damaged if AllowHoldsOnDamagedItems' );
1675
1676
    my $itemtype = $builder->build_object({ class => 'Koha::ItemTypes' });
1677
    my $not_holdable_itemtype = $itemtype->itemtype;
1678
    $builder->build_sample_item(
1679
        {
1680
            biblionumber => $biblio->biblionumber,
1681
            itype        => $not_holdable_itemtype,
1682
        }
1683
    );
1684
    Koha::CirculationRules->set_rule(
1685
        {
1686
            branchcode   => undef,
1687
            itemtype     => $not_holdable_itemtype,
1688
            rule_name    => 'holdallowed',
1689
            rule_value   => 'not_allowed',
1690
        }
1691
    );
1692
    is( $biblio->items->filter_by_for_hold->count, 6, '6 items for hold - holdallowed=not_allowed' );
1693
1694
    # Remove rule, test notforloan on itemtype
1695
    Koha::CirculationRules->set_rule(
1696
        {
1697
            branchcode   => undef,
1698
            itemtype     => $not_holdable_itemtype,
1699
            rule_name    => 'holdallowed',
1700
            rule_value   => undef,
1701
        }
1702
    );
1703
    is( $biblio->items->filter_by_for_hold->count, 7, '7 items for hold - rule deleted' );
1704
    $itemtype->notforloan(1)->store;
1705
    is( $biblio->items->filter_by_for_hold->count, 6, '6 items for hold - notforloan' );
1706
1707
    t::lib::Mocks::mock_preference('item-level_itypes', 0);
1708
    $biblio->biblioitem->itemtype($not_holdable_itemtype)->store;
1709
    is( $biblio->items->filter_by_for_hold->count, 0, '0 item-level_itypes=0' );
1710
1711
    t::lib::Mocks::mock_preference('item-level_itypes', 1);
1712
1713
    $biblio->delete;
1714
};
1715
1716
# Reset nb_of_items prior to testing delete
1642
# Reset nb_of_items prior to testing delete
1717
$nb_of_items = Koha::Items->search->count;
1643
$nb_of_items = Koha::Items->search->count;
1718
1644
Lines 2072-2087 subtest 'search_ordered' => sub { Link Here
2072
1998
2073
subtest 'filter_by_for_hold' => sub {
1999
subtest 'filter_by_for_hold' => sub {
2074
2000
2075
    plan tests => 13;
2001
    plan tests => 15;
2076
2002
2077
    $schema->storage->txn_begin;
2003
    $schema->storage->txn_begin;
2078
2004
2005
    # Set default rule
2006
    Koha::CirculationRules->set_rule(
2007
        {
2008
            branchcode => undef,
2009
            itemtype   => undef,
2010
            rule_name  => 'holdallowed',
2011
            rule_value => 'not_allowed',
2012
        }
2013
    );
2014
    my $itemtype = $builder->build_object({ class => 'Koha::ItemTypes' });
2015
    my $not_holdable_itemtype = $itemtype->itemtype;
2016
    my $itemtype2 = $builder->build_object({ class => 'Koha::ItemTypes' });
2017
    my $holdable_itemtype = $itemtype2->itemtype;
2018
    Koha::CirculationRules->set_rule(
2019
        {
2020
            branchcode => undef,
2021
            itemtype   => $holdable_itemtype,
2022
            rule_name  => 'holdallowed',
2023
            rule_value => 'from_any_library',
2024
        }
2025
    );
2026
2079
    my $biblio  = $builder->build_sample_biblio;
2027
    my $biblio  = $builder->build_sample_biblio;
2080
    my $library = $builder->build_object({ class => 'Koha::Libraries' });
2028
    my $library = $builder->build_object({ class => 'Koha::Libraries' });
2081
2082
    t::lib::Mocks::mock_preference('IndependentBranches', 0); # more robust tests
2029
    t::lib::Mocks::mock_preference('IndependentBranches', 0); # more robust tests
2083
2084
    is( $biblio->items->filter_by_for_hold->count, 0, 'no item yet' );
2030
    is( $biblio->items->filter_by_for_hold->count, 0, 'no item yet' );
2031
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => 0, itype => $not_holdable_itemtype } );
2032
    is( $biblio->items->filter_by_for_hold->count, 0, 'default rule prevents hold' );
2033
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => 0, itype => $holdable_itemtype } );
2034
    is( $biblio->items->filter_by_for_hold->count, 1, 'hold allowed despite default rule' );
2035
2036
    # Reset items and circ rules to remove default rule
2037
    $biblio->items->delete;
2038
    Koha::CirculationRules->search(
2039
        {
2040
            rule_name  => 'holdallowed',
2041
            rule_value => 'not_allowed',
2042
        }
2043
    )->delete;
2044
2085
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => 1 } );
2045
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => 1 } );
2086
    is( $biblio->items->filter_by_for_hold->count, 0, 'no item for hold' );
2046
    is( $biblio->items->filter_by_for_hold->count, 0, 'no item for hold' );
2087
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => 0 } );
2047
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => 0 } );
Lines 2104-2111 subtest 'filter_by_for_hold' => sub { Link Here
2104
    t::lib::Mocks::mock_preference('AllowHoldsOnDamagedItems', 1);
2064
    t::lib::Mocks::mock_preference('AllowHoldsOnDamagedItems', 1);
2105
    is( $biblio->items->filter_by_for_hold->count, 6, '6 items for hold - damaged if AllowHoldsOnDamagedItems' );
2065
    is( $biblio->items->filter_by_for_hold->count, 6, '6 items for hold - damaged if AllowHoldsOnDamagedItems' );
2106
2066
2107
    my $itemtype = $builder->build_object({ class => 'Koha::ItemTypes' });
2108
    my $not_holdable_itemtype = $itemtype->itemtype;
2109
    $builder->build_sample_item(
2067
    $builder->build_sample_item(
2110
        {
2068
        {
2111
            biblionumber => $biblio->biblionumber,
2069
            biblionumber => $biblio->biblionumber,
2112
- 

Return to bug 29087