Bug 7317: Handle backend absense more gracefuly
[koha.git] / t / db_dependent / Holds / DisallowHoldIfItemsAvailable.t
1 #!/usr/bin/perl
2
3 use Modern::Perl;
4
5 use C4::Context;
6 use C4::Items;
7 use C4::Circulation;
8 use Koha::IssuingRule;
9
10 use Test::More tests => 4;
11
12 use t::lib::TestBuilder;
13
14 BEGIN {
15     use_ok('C4::Reserves');
16 }
17
18 my $schema = Koha::Database->schema;
19 $schema->storage->txn_begin;
20 my $dbh = C4::Context->dbh;
21
22 my $builder = t::lib::TestBuilder->new;
23
24 my $library1 = $builder->build({
25     source => 'Branch',
26 });
27
28 # Now, set a userenv
29 C4::Context->_new_userenv('xxx');
30 C4::Context->set_userenv(0,0,0,'firstname','surname', $library1->{branchcode}, 'Midway Public Library', '', '', '');
31
32 my $bib_title = "Test Title";
33
34 my $borrower1 = $builder->build({
35     source => 'Borrower',
36     value => {
37         branchcode => $library1->{branchcode},
38         dateexpiry => '3000-01-01',
39     }
40 });
41
42 my $borrower2 = $builder->build({
43     source => 'Borrower',
44     value => {
45         branchcode => $library1->{branchcode},
46         dateexpiry => '3000-01-01',
47     }
48 });
49
50 # Test hold_fulfillment_policy
51 my ( $itemtype ) = @{ $dbh->selectrow_arrayref("SELECT itemtype FROM itemtypes LIMIT 1") };
52 my $borrowernumber1 = $borrower1->{borrowernumber};
53 my $borrowernumber2 = $borrower2->{borrowernumber};
54 my $library_A = $library1->{branchcode};
55
56 $dbh->do("INSERT INTO biblio (frameworkcode, author, title, datecreated) VALUES ('', 'Koha test', '$bib_title', '2011-02-01')");
57
58 my $biblionumber = $dbh->selectrow_array("SELECT biblionumber FROM biblio WHERE title = '$bib_title'")
59   or BAIL_OUT("Cannot find newly created biblio record");
60
61 $dbh->do("INSERT INTO biblioitems (biblionumber, itemtype) VALUES ($biblionumber, '$itemtype')");
62
63 my $biblioitemnumber =
64   $dbh->selectrow_array("SELECT biblioitemnumber FROM biblioitems WHERE biblionumber = $biblionumber")
65   or BAIL_OUT("Cannot find newly created biblioitems record");
66
67 $dbh->do("
68     INSERT INTO items (barcode, biblionumber, biblioitemnumber, homebranch, holdingbranch, notforloan, damaged, itemlost, withdrawn, onloan, itype)
69     VALUES ('AllowHoldIf1', $biblionumber, $biblioitemnumber, '$library_A', '$library_A', 0, 0, 0, 0, NULL, '$itemtype')
70 ");
71
72 my $itemnumber1 =
73   $dbh->selectrow_array("SELECT itemnumber FROM items WHERE biblionumber = $biblionumber")
74   or BAIL_OUT("Cannot find newly created item");
75
76 my $item1 = GetItem( $itemnumber1 );
77
78 $dbh->do("
79     INSERT INTO items (barcode, biblionumber, biblioitemnumber, homebranch, holdingbranch, notforloan, damaged, itemlost, withdrawn, onloan, itype)
80     VALUES ('AllowHoldIf2', $biblionumber, $biblioitemnumber, '$library_A', '$library_A', 0, 0, 0, 0, NULL, '$itemtype')
81 ");
82
83 my $itemnumber2 =
84   $dbh->selectrow_array("SELECT itemnumber FROM items WHERE biblionumber = $biblionumber ORDER BY itemnumber DESC")
85   or BAIL_OUT("Cannot find newly created item");
86
87 my $item2 = GetItem( $itemnumber2 );
88
89 $dbh->do("DELETE FROM issuingrules");
90 my $rule = Koha::IssuingRule->new(
91     {
92         categorycode => '*',
93         itemtype     => '*',
94         branchcode   => '*',
95         maxissueqty  => 99,
96         issuelength  => 7,
97         lengthunit   => 8,
98         reservesallowed => 99,
99         onshelfholds => 2,
100     }
101 );
102 $rule->store();
103
104 my $is = IsAvailableForItemLevelRequest( $item1, $borrower1);
105 is( $is, 0, "Item cannot be held, 2 items available" );
106
107 AddIssue( $borrower2, $item1->{barcode} );
108
109 $is = IsAvailableForItemLevelRequest( $item1, $borrower1);
110 is( $is, 0, "Item cannot be held, 1 item available" );
111
112 AddIssue( $borrower2, $item2->{barcode} );
113
114 $is = IsAvailableForItemLevelRequest( $item1, $borrower1);
115 is( $is, 1, "Item can be held, no items available" );
116
117 # Cleanup
118 $schema->storage->txn_rollback;