Bug 9394: QA Followup
[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 => 19;
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 my $reserveid = C4::Reserves::GetReserveId(
125     {
126         biblionumber => $biblionumber,
127         borrowernumber => $borrowernumber
128     }
129 );
130 is( $reserveid, $reserve->{reserve_id}, "Test GetReserveId" );
131 ModReserveMinusPriority( $itemnumber, $reserve->{'reserve_id'} );
132 ( $reserve ) = GetReservesFromBorrowernumber($borrowernumber);
133 ok( $reserve->{'itemnumber'} eq $itemnumber, "Test ModReserveMinusPriority()" );
134
135
136 my $reserve2 = GetReserveInfo( $reserve->{'reserve_id'} );
137 ok( $reserve->{'reserve_id'} eq $reserve2->{'reserve_id'}, "Test GetReserveInfo()" );
138
139
140 ($count, $reserves) = GetReservesFromBiblionumber($biblionumber,1);
141 $reserve = $reserves->[1];
142 AlterPriority( 'top', $reserve->{'reserve_id'} );
143 $reserve = GetReserve( $reserve->{'reserve_id'} );
144 ok( $reserve->{'priority'} eq '1', "Test AlterPriority(), move to top" );
145
146 AlterPriority( 'down', $reserve->{'reserve_id'} );
147 $reserve = GetReserve( $reserve->{'reserve_id'} );
148 ok( $reserve->{'priority'} eq '2', "Test AlterPriority(), move down" );
149
150 AlterPriority( 'up', $reserve->{'reserve_id'} );
151 $reserve = GetReserve( $reserve->{'reserve_id'} );
152 ok( $reserve->{'priority'} eq '1', "Test AlterPriority(), move up" );
153
154 AlterPriority( 'bottom', $reserve->{'reserve_id'} );
155 $reserve = GetReserve( $reserve->{'reserve_id'} );
156 ok( $reserve->{'priority'} eq '5', "Test AlterPriority(), move to bottom" );
157
158 # Delete the reserves
159 diag("Deleting holds.");
160 $dbh->do("DELETE FROM reserves WHERE biblionumber = ?", undef, ( $biblionumber ) );
161
162 # Delete item.
163 diag("Deleting item testing instance.");
164 DelItem($dbh, $bibnum, $itemnumber);
165
166 # Delete helper Biblio.
167 diag("Deleting biblio testing instance.");
168 DelBiblio($bibnum);
169
170 # Helper method to set up a Biblio.
171 sub create_helper_biblio {
172     my $bib = MARC::Record->new();
173     my $title = 'Silence in the library';
174     $bib->append_fields(
175         MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'),
176         MARC::Field->new('245', ' ', ' ', a => $title),
177     );
178     return ($bibnum, $title, $bibitemnum) = AddBiblio($bib, '');
179 }