Bug 26384: Fix executable flags
[koha.git] / t / db_dependent / Holds / HoldItemtypeLimit.t
1 #!/usr/bin/perl
2
3 use Modern::Perl;
4
5 use C4::Context;
6 use Koha::CirculationRules;
7
8 use Test::More tests => 4;
9
10 use t::lib::TestBuilder;
11
12 use Koha::Holds;
13
14 BEGIN {
15     use FindBin;
16     use lib $FindBin::Bin;
17     use_ok('C4::Reserves');
18 }
19
20 my $schema = Koha::Database->schema;
21 $schema->storage->txn_begin;
22 my $dbh = C4::Context->dbh;
23
24 my $builder = t::lib::TestBuilder->new;
25
26 my $library = $builder->build({
27     source => 'Branch',
28 });
29
30 my $bib_title = "Test Title";
31
32
33 my $borrower = $builder->build({
34     source => 'Borrower',
35     value => {
36         branchcode => $library->{branchcode},
37     }
38 });
39
40 my $itemtype1 = $builder->build({
41     source => 'Itemtype',
42     value => {
43         notforloan => 0
44     }
45 });
46
47 my $itemtype2 = $builder->build({
48     source => 'Itemtype',
49     value => {
50         notforloan => 0
51     }
52 });
53
54
55 # Test hold_fulfillment_policy
56 my $right_itemtype = $itemtype1->{itemtype};
57 my $wrong_itemtype = $itemtype2->{itemtype};
58 my $borrowernumber = $borrower->{borrowernumber};
59 my $branchcode = $library->{branchcode};
60 $dbh->do("DELETE FROM reserves");
61 $dbh->do("DELETE FROM issues");
62 $dbh->do("DELETE FROM items");
63 $dbh->do("DELETE FROM biblio");
64 $dbh->do("DELETE FROM biblioitems");
65 $dbh->do("DELETE FROM transport_cost");
66 $dbh->do("DELETE FROM tmp_holdsqueue");
67 $dbh->do("DELETE FROM hold_fill_targets");
68
69 $dbh->do("INSERT INTO biblio (frameworkcode, author, title, datecreated) VALUES ('', 'Koha test', '$bib_title', '2011-02-01')");
70
71 my $biblionumber = $dbh->selectrow_array("SELECT biblionumber FROM biblio WHERE title = '$bib_title'")
72   or BAIL_OUT("Cannot find newly created biblio record");
73
74 $dbh->do("INSERT INTO biblioitems (biblionumber, itemtype) VALUES ($biblionumber, '$right_itemtype')");
75
76 my $biblioitemnumber =
77   $dbh->selectrow_array("SELECT biblioitemnumber FROM biblioitems WHERE biblionumber = $biblionumber")
78   or BAIL_OUT("Cannot find newly created biblioitems record");
79
80 $dbh->do("
81     INSERT INTO items (biblionumber, biblioitemnumber, homebranch, holdingbranch, notforloan, damaged, itemlost, withdrawn, onloan, itype)
82     VALUES ($biblionumber, $biblioitemnumber, '$branchcode', '$branchcode', 0, 0, 0, 0, NULL, '$right_itemtype')
83 ");
84
85 my $itemnumber =
86   $dbh->selectrow_array("SELECT itemnumber FROM items WHERE biblionumber = $biblionumber")
87   or BAIL_OUT("Cannot find newly created item");
88
89 $dbh->do("DELETE FROM circulation_rules");
90 Koha::CirculationRules->set_rules(
91     {
92         itemtype     => undef,
93         branchcode   => undef,
94         rules        => {
95             holdallowed             => 2,
96             hold_fulfillment_policy => 'any',
97         }
98     }
99 );
100
101 # Itemtypes match
102 my $reserve_id = AddReserve(
103     {
104         branchcode     => $branchcode,
105         borrowernumber => $borrowernumber,
106         biblionumber   => $biblionumber,
107         priority       => 1,
108         itemtype       => $right_itemtype,
109     }
110 );
111 my ( $status ) = CheckReserves($itemnumber);
112 is( $status, 'Reserved', "Hold where itemtype matches item's itemtype targed" );
113 Koha::Holds->find( $reserve_id )->cancel;
114
115 # Itemtypes don't match
116 $reserve_id = AddReserve(
117     {
118         branchcode     => $branchcode,
119         borrowernumber => $borrowernumber,
120         biblionumber   => $biblionumber,
121         priority       => 1,
122         itemtype       => $wrong_itemtype,
123     }
124 );
125
126 ( $status ) = CheckReserves($itemnumber);
127 is($status, q{}, "Hold where itemtype does not match item's itemtype not targeted" );
128 Koha::Holds->find( $reserve_id )->cancel;
129
130 # No itemtype set
131 $reserve_id = AddReserve(
132     {
133         branchcode     => $branchcode,
134         borrowernumber => $borrowernumber,
135         biblionumber   => $biblionumber,
136         priority       => 1,
137     }
138 );
139 ( $status ) = CheckReserves($itemnumber);
140 is( $status, 'Reserved', "Item targeted with no hold itemtype set" );
141 Koha::Holds->find( $reserve_id )->cancel;
142
143 # Cleanup
144 $schema->storage->txn_rollback;