Bug 9394: Use reserve_id where possible
[koha.git] / t / db_dependent / Holds.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use C4::Branch;
6
7 use Test::More tests => 18;
8 use MARC::Record;
9 use C4::Biblio;
10 use C4::Items;
11
12 BEGIN {
13       use FindBin;
14    use lib $FindBin::Bin;
15  use_ok('C4::Reserves');
16 }
17
18 my $borrowers_count = 5;
19
20 # Setup Test------------------------
21 # Helper biblio.
22 diag("Creating biblio instance for testing.");
23 my ($bibnum, $title, $bibitemnum) = create_helper_biblio();
24
25 # Helper item for that biblio.
26 diag("Creating item instance for testing.");
27 my ($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'CPL', holdingbranch => 'CPL' } , $bibnum);
28
29 # Get a borrower
30 my $dbh = C4::Context->dbh;
31 my $query = "SELECT borrowernumber FROM borrowers LIMIT $borrowers_count";
32 my $sth = $dbh->prepare($query);
33 $sth->execute;
34 my @borrowernumbers;
35 while ( my $row = $sth->fetchrow_hashref ) {
36     push( @borrowernumbers, $row->{'borrowernumber'} );
37 }
38
39 my $biblionumber   = $bibnum;
40
41 my @branches = GetBranchesLoop();
42 my $branch = $branches[0][0]{value};
43
44 # Create five item level holds
45 foreach my $borrowernumber ( @borrowernumbers ) {
46     AddReserve(
47         $branch,
48         $borrowernumber,
49         $biblionumber,
50         my $constraint = 'a',
51         my $bibitems = q{},
52         my $priority,
53         my $resdate,
54         my $expdate,
55         my $notes = q{},
56         $title,
57         my $checkitem = $itemnumber,
58         my $found,
59     );
60 }
61
62
63 my ($count, $reserves) = GetReservesFromBiblionumber($biblionumber);
64 is( $count, $borrowers_count, "Test GetReserves()" );
65
66
67 my ( $reservedate, $borrowernumber, $branchcode, $reserve_id ) = GetReservesFromItemnumber($itemnumber);
68 ok($reserve_id, "Test GetReservesFromItemnumber()");
69
70
71 my ( $reserve ) = GetReservesFromBorrowernumber($borrowernumbers[0]);
72 ok( $reserve->{'borrowernumber'} eq $borrowernumbers[0], "Test GetReservesFromBorrowernumber()");
73
74
75 ok( GetReserveCount( $borrowernumbers[0] ), "Test GetReserveCount()" );
76
77
78 CancelReserve({ 'reserve_id' => $reserve_id });
79 ($count, $reserves) = GetReservesFromBiblionumber($biblionumber);
80 ok( $count == $borrowers_count - 1, "Test CancelReserve()" );
81
82
83 ( $reservedate, $borrowernumber, $branchcode, $reserve_id ) = GetReservesFromItemnumber($itemnumber);
84 ModReserve({
85     reserve_id    => $reserve_id,
86     rank          => '4',
87     branchcode    => $branch,
88     itemnumber    => $itemnumber,
89     suspend_until => C4::Dates->new("2013-01-01","iso")->output(),
90 });
91 $reserve = GetReserve( $reserve_id );
92 ok( $reserve->{'priority'} eq '4', "Test GetReserve(), priority changed correctly" );
93 ok( $reserve->{'suspend'}, "Test GetReserve(), suspend hold" );
94 ok( $reserve->{'suspend_until'} eq '2013-01-01 00:00:00', "Test GetReserve(), suspend until date" );
95
96 ToggleSuspend( $reserve_id );
97 $reserve = GetReserve( $reserve_id );
98 ok( !$reserve->{'suspend'}, "Test ToggleSuspend(), no date" );
99
100 ToggleSuspend( $reserve_id, '2012-01-01' );
101 $reserve = GetReserve( $reserve_id );
102 ok( $reserve->{'suspend_until'} eq '2012-01-01 00:00:00', "Test ToggleSuspend(), with date" );
103
104 AutoUnsuspendReserves();
105 $reserve = GetReserve( $reserve_id );
106 ok( !$reserve->{'suspend'}, "Test AutoUnsuspendReserves()" );
107
108 # Add a new hold for the borrower whose hold we canceled earlier, this time at the bib level
109 AddReserve(
110     $branch,
111     $borrowernumber,
112     $biblionumber,
113     my $constraint = 'a',
114     my $bibitems = q{},
115     my $priority,
116     my $resdate,
117     my $expdate,
118     my $notes = q{},
119     $title,
120     my $checkitem,
121     my $found,
122 );
123 ( $reserve ) = GetReservesFromBorrowernumber($borrowernumber);
124 ModReserveMinusPriority( $itemnumber, $reserve->{'reserve_id'} );
125 ( $reserve ) = GetReservesFromBorrowernumber($borrowernumber);
126 ok( $reserve->{'itemnumber'} eq $itemnumber, "Test ModReserveMinusPriority()" );
127
128
129 my $reserve2 = GetReserveInfo( $reserve->{'reserve_id'} );
130 ok( $reserve->{'reserve_id'} eq $reserve2->{'reserve_id'}, "Test GetReserveInfo()" );
131
132
133 ($count, $reserves) = GetReservesFromBiblionumber($biblionumber,1);
134 $reserve = $reserves->[1];
135 AlterPriority( 'top', $reserve->{'reserve_id'} );
136 $reserve = GetReserve( $reserve->{'reserve_id'} );
137 ok( $reserve->{'priority'} eq '1', "Test AlterPriority(), move to top" );
138
139 AlterPriority( 'down', $reserve->{'reserve_id'} );
140 $reserve = GetReserve( $reserve->{'reserve_id'} );
141 ok( $reserve->{'priority'} eq '2', "Test AlterPriority(), move down" );
142
143 AlterPriority( 'up', $reserve->{'reserve_id'} );
144 $reserve = GetReserve( $reserve->{'reserve_id'} );
145 ok( $reserve->{'priority'} eq '1', "Test AlterPriority(), move up" );
146
147 AlterPriority( 'bottom', $reserve->{'reserve_id'} );
148 $reserve = GetReserve( $reserve->{'reserve_id'} );
149 ok( $reserve->{'priority'} eq '5', "Test AlterPriority(), move to bottom" );
150
151 # Delete the reserves
152 diag("Deleting holds.");
153 $dbh->do("DELETE FROM reserves WHERE biblionumber = ?", undef, ( $biblionumber ) );
154
155 # Delete item.
156 diag("Deleting item testing instance.");
157 DelItem($dbh, $bibnum, $itemnumber);
158
159 # Delete helper Biblio.
160 diag("Deleting biblio testing instance.");
161 DelBiblio($bibnum);
162
163 # Helper method to set up a Biblio.
164 sub create_helper_biblio {
165     my $bib = MARC::Record->new();
166     my $title = 'Silence in the library';
167     $bib->append_fields(
168         MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'),
169         MARC::Field->new('245', ' ', ' ', a => $title),
170     );
171     return ($bibnum, $title, $bibitemnum) = AddBiblio($bib, '');
172 }