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

(-)a/t/db_dependent/Koha/Items.t (-68 / +81 lines)
Lines 1510-1582 subtest 'can_be_transferred' => sub { Link Here
1510
       'We get the same result also if we pass the from-library parameter.');
1510
       'We get the same result also if we pass the from-library parameter.');
1511
};
1511
};
1512
1512
1513
subtest 'filter_by_for_hold' => sub {
1514
    plan tests => 12;
1515
1516
    my $biblio = $builder->build_sample_biblio;
1517
    is( $biblio->items->filter_by_for_hold->count, 0, 'no item yet' );
1518
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => 1 } );
1519
    is( $biblio->items->filter_by_for_hold->count, 0, 'no item for hold' );
1520
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => 0 } );
1521
    is( $biblio->items->filter_by_for_hold->count, 1, '1 item for hold' );
1522
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => -1 } );
1523
    is( $biblio->items->filter_by_for_hold->count, 2, '2 items for hold' );
1524
1525
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, itemlost => 0 } );
1526
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, itemlost => 1 } );
1527
    is( $biblio->items->filter_by_for_hold->count, 3, '3 items for hold - itemlost' );
1528
1529
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, withdrawn => 0 } );
1530
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, withdrawn => 1 } );
1531
    is( $biblio->items->filter_by_for_hold->count, 4, '4 items for hold - withdrawn' );
1532
1533
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, damaged => 0 } );
1534
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, damaged => 1 } );
1535
    t::lib::Mocks::mock_preference('AllowHoldsOnDamagedItems', 0);
1536
    is( $biblio->items->filter_by_for_hold->count, 5, '5 items for hold - not damaged if not AllowHoldsOnDamagedItems' );
1537
    t::lib::Mocks::mock_preference('AllowHoldsOnDamagedItems', 1);
1538
    is( $biblio->items->filter_by_for_hold->count, 6, '6 items for hold - damaged if AllowHoldsOnDamagedItems' );
1539
1540
    my $itemtype = $builder->build_object({ class => 'Koha::ItemTypes' });
1541
    my $not_holdable_itemtype = $itemtype->itemtype;
1542
    $builder->build_sample_item(
1543
        {
1544
            biblionumber => $biblio->biblionumber,
1545
            itype        => $not_holdable_itemtype,
1546
        }
1547
    );
1548
    Koha::CirculationRules->set_rule(
1549
        {
1550
            branchcode   => undef,
1551
            itemtype     => $not_holdable_itemtype,
1552
            rule_name    => 'holdallowed',
1553
            rule_value   => 'not_allowed',
1554
        }
1555
    );
1556
    is( $biblio->items->filter_by_for_hold->count, 6, '6 items for hold - holdallowed=not_allowed' );
1557
1558
    # Remove rule, test notforloan on itemtype
1559
    Koha::CirculationRules->set_rule(
1560
        {
1561
            branchcode   => undef,
1562
            itemtype     => $not_holdable_itemtype,
1563
            rule_name    => 'holdallowed',
1564
            rule_value   => undef,
1565
        }
1566
    );
1567
    is( $biblio->items->filter_by_for_hold->count, 7, '7 items for hold - rule deleted' );
1568
    $itemtype->notforloan(1)->store;
1569
    is( $biblio->items->filter_by_for_hold->count, 6, '6 items for hold - notforloan' );
1570
1571
    t::lib::Mocks::mock_preference('item-level_itypes', 0);
1572
    $biblio->biblioitem->itemtype($not_holdable_itemtype)->store;
1573
    is( $biblio->items->filter_by_for_hold->count, 0, '0 item-level_itypes=0' );
1574
1575
    t::lib::Mocks::mock_preference('item-level_itypes', 1);
1576
1577
    $biblio->delete;
1578
};
1579
1580
# Reset nb_of_items prior to testing delete
1513
# Reset nb_of_items prior to testing delete
1581
$nb_of_items = Koha::Items->search->count;
1514
$nb_of_items = Koha::Items->search->count;
1582
1515
Lines 1937-1939 subtest 'search_ordered' => sub { Link Here
1937
    $schema->storage->txn_rollback;
1870
    $schema->storage->txn_rollback;
1938
1871
1939
};
1872
};
1940
- 
1873
1874
subtest 'filter_by_for_hold' => sub {
1875
1876
    plan tests => 13;
1877
1878
    $schema->storage->txn_begin;
1879
1880
    my $biblio  = $builder->build_sample_biblio;
1881
    my $library = $builder->build_object({ class => 'Koha::Libraries' });
1882
1883
    t::lib::Mocks::mock_preference('IndependentBranches', 0); # more robust tests
1884
1885
    is( $biblio->items->filter_by_for_hold->count, 0, 'no item yet' );
1886
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => 1 } );
1887
    is( $biblio->items->filter_by_for_hold->count, 0, 'no item for hold' );
1888
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => 0 } );
1889
    is( $biblio->items->filter_by_for_hold->count, 1, '1 item for hold' );
1890
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, notforloan => -1 } );
1891
    is( $biblio->items->filter_by_for_hold->count, 2, '2 items for hold' );
1892
1893
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, itemlost => 0, library => $library->id } );
1894
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, itemlost => 1, library => $library->id } );
1895
    is( $biblio->items->filter_by_for_hold->count, 3, '3 items for hold - itemlost' );
1896
1897
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, withdrawn => 0, library => $library->id } );
1898
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, withdrawn => 1, library => $library->id } );
1899
    is( $biblio->items->filter_by_for_hold->count, 4, '4 items for hold - withdrawn' );
1900
1901
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, damaged => 0 } );
1902
    $builder->build_sample_item( { biblionumber => $biblio->biblionumber, damaged => 1 } );
1903
    t::lib::Mocks::mock_preference('AllowHoldsOnDamagedItems', 0);
1904
    is( $biblio->items->filter_by_for_hold->count, 5, '5 items for hold - not damaged if not AllowHoldsOnDamagedItems' );
1905
    t::lib::Mocks::mock_preference('AllowHoldsOnDamagedItems', 1);
1906
    is( $biblio->items->filter_by_for_hold->count, 6, '6 items for hold - damaged if AllowHoldsOnDamagedItems' );
1907
1908
    my $itemtype = $builder->build_object({ class => 'Koha::ItemTypes' });
1909
    my $not_holdable_itemtype = $itemtype->itemtype;
1910
    $builder->build_sample_item(
1911
        {
1912
            biblionumber => $biblio->biblionumber,
1913
            itype        => $not_holdable_itemtype,
1914
        }
1915
    );
1916
    Koha::CirculationRules->set_rule(
1917
        {
1918
            branchcode   => undef,
1919
            itemtype     => $not_holdable_itemtype,
1920
            rule_name    => 'holdallowed',
1921
            rule_value   => 'not_allowed',
1922
        }
1923
    );
1924
    is( $biblio->items->filter_by_for_hold->count, 6, '6 items for hold - holdallowed=not_allowed' );
1925
1926
    # Remove rule, test notforloan on itemtype
1927
    Koha::CirculationRules->set_rule(
1928
        {
1929
            branchcode   => undef,
1930
            itemtype     => $not_holdable_itemtype,
1931
            rule_name    => 'holdallowed',
1932
            rule_value   => undef,
1933
        }
1934
    );
1935
    is( $biblio->items->filter_by_for_hold->count, 7, '7 items for hold - rule deleted' );
1936
    $itemtype->notforloan(1)->store;
1937
    is( $biblio->items->filter_by_for_hold->count, 6, '6 items for hold - notforloan' );
1938
1939
    {
1940
        my $mock_context = Test::MockModule->new('C4::Context');
1941
        $mock_context->mock( 'only_my_library', 1 );
1942
        $mock_context->mock( 'mybranch',        $library->id );
1943
        is( $biblio->items->filter_by_for_hold->count, 2, '2 items for hold, filtered by IndependentBranches' );
1944
    }
1945
1946
    t::lib::Mocks::mock_preference('item-level_itypes', 0);
1947
    $biblio->biblioitem->itemtype($not_holdable_itemtype)->store;
1948
    is( $biblio->items->filter_by_for_hold->count, 0, '0 item-level_itypes=0' );
1949
1950
    t::lib::Mocks::mock_preference('item-level_itypes', 1);
1951
1952
    $schema->storage->txn_rollback;
1953
};

Return to bug 31105