3 # Copyright 2015 BibLibre
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 3 of the License, or (at your option) any later
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, see <http://www.gnu.org/licenses>.
20 use Test
::More tests
=> 117;
26 use_ok
('Koha::Borrower');
27 use_ok
('MARC::Record');
36 numberofreviewsbybiblionumber
44 my $dbh = C4
::Context
->dbh;
45 $dbh->{AutoCommit
} = 0;
46 $dbh->{RaiseError
} = 1;
47 $dbh->do('DELETE FROM reviews');
48 $dbh->do('DELETE FROM issues');
49 $dbh->do('DELETE FROM borrowers');
51 # ---------- Some borrowers for testing -------------------
52 my $categorycode = Koha
::Database
->new()->schema()->resultset('Category')->first()->categorycode();
53 my $branchcode = Koha
::Database
->new()->schema()->resultset('Branch')->first()->branchcode();
55 my $b1 = Koha
::Borrower
->new(
56 { surname
=> 'Borrower 1',
57 branchcode
=> $branchcode,
58 categorycode
=> $categorycode
63 my $b2 = Koha
::Borrower
->new(
64 { surname
=> 'Borrower 2',
65 branchcode
=> $branchcode,
66 categorycode
=> $categorycode
71 my $b3 = Koha
::Borrower
->new(
72 { surname
=> 'Borrower 3',
73 branchcode
=> $branchcode,
74 categorycode
=> $categorycode
79 # ---------- Some biblios for testing -------------------
80 my ($biblionumber1) = AddBiblio
( MARC
::Record
->new, '' );
81 my ($biblionumber2) = AddBiblio
( MARC
::Record
->new, '' );
82 my ($biblionumber3) = AddBiblio
( MARC
::Record
->new, '' );
84 # ---------- Some reviews for testing -------------------
85 my $rev1 = 'Review 1';
86 my $rev2 = 'Review 2';
87 my $rev3 = 'Review 3';
89 # ---------- Testing savereview ---------------------------
90 my $date = Time
::Piece
::localtime->strftime('%F %T');
92 savereview
( $biblionumber1, $b1->borrowernumber, $rev1 );
98 my $count = $dbh->selectrow_array($query);
99 is
( $count, 1, 'There is 1 review' );
102 SELECT reviewid, borrowernumber, biblionumber, review, approved, datereviewed
105 my ( $reviewid, $borrowernumber, $biblionumber, $review, $approved, $datereviewed ) = $dbh->selectrow_array($query);
106 is
( $borrowernumber, $b1->borrowernumber, 'borrowernumber field is good' );
107 is
( $biblionumber, $biblionumber1, 'biblionumber field is good' );
108 is
( $review, $rev1, 'review field is good' );
109 is
( $approved, 0, 'approved field is 0 by default' );
110 is
( $datereviewed, $date, 'datereviewed field is good' );
112 # We add some others reviews
113 savereview
( $biblionumber1, $b2->borrowernumber, $rev2 );
114 savereview
( $biblionumber3, $b2->borrowernumber, $rev3 );
116 # ---------- Testing getreview ----------------------------
117 my $review1 = getreview
( $biblionumber1, $b1->borrowernumber );
118 my $review2 = getreview
( $biblionumber1, $b2->borrowernumber );
119 my $review3 = getreview
( $biblionumber3, $b2->borrowernumber );
125 $count = $dbh->selectrow_array($query);
126 is
( $count, 3, 'There are 3 reviews' );
128 isa_ok
( $review1, 'HASH', '$review1 is defined as a hash' );
129 is
( $review1->{borrowernumber
}, $b1->borrowernumber, 'borrowernumber field is good' );
130 is
( $review1->{biblionumber
}, $biblionumber1, 'biblionumber field is good' );
131 is
( $review1->{review
}, $rev1, 'review field is good' );
132 is
( $review1->{approved
}, 0, 'approved field is 0 by default' );
133 cmp_ok
( $review1->{datereviewed
}, 'ge', $date, 'datereviewed field is good' );
135 isa_ok
( $review2, 'HASH', '$review2 is defined as a hash' );
136 is
( $review2->{borrowernumber
}, $b2->borrowernumber, 'borrowernumber field is good' );
137 is
( $review2->{biblionumber
}, $biblionumber1, 'biblionumber field is good' );
138 is
( $review2->{review
}, $rev2, 'review field is good' );
139 is
( $review2->{approved
}, 0, 'approved field is 0 by default' );
140 cmp_ok
( $review2->{datereviewed
}, 'ge', $date, 'datereviewed field is good' );
142 isa_ok
( $review3, 'HASH', '$review3 is defined as a hash' );
143 is
( $review3->{borrowernumber
}, $b2->borrowernumber, 'borrowernumber field is good' );
144 is
( $review3->{biblionumber
}, $biblionumber3, 'biblionumber field is good' );
145 is
( $review3->{review
}, $rev3, 'review field is good' );
146 is
( $review3->{approved
}, 0, 'approved field is 0 by default' );
147 cmp_ok
( $review3->{datereviewed
}, 'ge', $date, 'datereviewed field is good' );
149 # ---------- Testing getreviews ---------------------------
151 my $reviews = getreviews
( $biblionumber1, $status );
156 WHERE biblionumber = ?
159 $count = $dbh->selectrow_array( $query, {}, $biblionumber1, $status );
160 is
( $count, 2, 'There are 2 reviews corresponding' );
162 isa_ok
( $reviews, 'ARRAY', '$reviews is defined as an array' );
164 isa_ok
( $reviews->[0], 'HASH', '$reviews->[0] is defined as a hash' );
165 is
( $reviews->[0]->{reviewid
}, $review1->{reviewid
}, 'reviewid field is good' );
166 is
( $reviews->[0]->{borrowernumber
}, $review1->{borrowernumber
}, 'borrowernumber field is good' );
167 is
( $reviews->[0]->{biblionumber
}, $review1->{biblionumber
}, 'biblionumber field is good' );
168 is
( $reviews->[0]->{review
}, $review1->{review
}, 'review field is good' );
169 is
( $reviews->[0]->{approved
}, $review1->{approved
}, 'approved field is 0 by default' );
170 cmp_ok
( $reviews->[0]->{datereviewed
}, 'ge', $date, 'datereviewed field is good' );
172 isa_ok
( $reviews->[1], 'HASH', '$reviews->[1] is defined as a hash' );
173 is
( $reviews->[1]->{reviewid
}, $review2->{reviewid
}, 'reviewid field is good' );
174 is
( $reviews->[1]->{borrowernumber
}, $review2->{borrowernumber
}, 'borrowernumber field is good' );
175 is
( $reviews->[1]->{biblionumber
}, $review2->{biblionumber
}, 'biblionumber field is good' );
176 is
( $reviews->[1]->{review
}, $review2->{review
}, 'review field is good' );
177 is
( $reviews->[1]->{approved
}, $review2->{approved
}, 'approved field is 0 by default' );
178 cmp_ok
( $reviews->[1]->{datereviewed
}, 'ge', $date, 'datereviewed field is good' );
181 $reviews = getreviews
( $biblionumber1, $status );
182 isa_ok
( $reviews, 'ARRAY', '$reviews is defined as an array' );
183 is_deeply
( $reviews, [], '$reviews is empty, there is no approved review' );
185 # ---------- Testing getallreviews ------------------------
187 $reviews = getallreviews
($status);
188 isa_ok
( $reviews, 'ARRAY', '$reviews is defined as an array' );
189 is_deeply
( $reviews, [], '$reviews is empty, there is no approved review' );
192 $reviews = getallreviews
($status);
199 $count = $dbh->selectrow_array( $query, {}, $status );
200 is
( $count, 3, 'There are 3 reviews corresponding' );
202 my $count2 = numberofreviews
($status);
203 is
( $count2, $count, 'number of reviews returned is good' );
205 isa_ok
( $reviews, 'ARRAY', '$reviews is defined as an array' );
207 isa_ok
( $reviews->[0], 'HASH', '$reviews->[0] is defined as a hash' );
208 is
( $reviews->[0]->{reviewid
}, $review1->{reviewid
}, 'reviewid field is good' );
209 is
( $reviews->[0]->{borrowernumber
}, $review1->{borrowernumber
}, 'borrowernumber field is good' );
210 is
( $reviews->[0]->{biblionumber
}, $review1->{biblionumber
}, 'biblionumber field is good' );
211 is
( $reviews->[0]->{review
}, $review1->{review
}, 'review field is good' );
212 is
( $reviews->[0]->{approved
}, $review1->{approved
}, 'approved field is 0 by default' );
213 cmp_ok
( $reviews->[0]->{datereviewed
}, 'ge', $date, 'datereviewed field is good' );
215 isa_ok
( $reviews->[1], 'HASH', '$reviews->[1] is defined as a hash' );
216 is
( $reviews->[1]->{reviewid
}, $review2->{reviewid
}, 'reviewid field is good' );
217 is
( $reviews->[1]->{borrowernumber
}, $review2->{borrowernumber
}, 'borrowernumber field is good' );
218 is
( $reviews->[1]->{biblionumber
}, $review2->{biblionumber
}, 'biblionumber field is good' );
219 is
( $reviews->[1]->{review
}, $review2->{review
}, 'review field is good' );
220 is
( $reviews->[1]->{approved
}, $review2->{approved
}, 'approved field is 0 by default' );
221 cmp_ok
( $reviews->[1]->{datereviewed
}, 'ge', $date, 'datereviewed field is good' );
223 isa_ok
( $reviews->[2], 'HASH', '$reviews->[2] is defined as a hash' );
224 is
( $reviews->[2]->{reviewid
}, $review3->{reviewid
}, 'reviewid field is good' );
225 is
( $reviews->[2]->{borrowernumber
}, $review3->{borrowernumber
}, 'borrowernumber field is good' );
226 is
( $reviews->[2]->{biblionumber
}, $review3->{biblionumber
}, 'biblionumber field is good' );
227 is
( $reviews->[2]->{review
}, $review3->{review
}, 'review field is good' );
228 is
( $reviews->[2]->{approved
}, $review3->{approved
}, 'approved field is 0 by default' );
229 cmp_ok
( $reviews->[2]->{datereviewed
}, 'ge', $date, 'datereviewed field is good' );
233 $reviews = getallreviews
( $status, $offset );
234 is
( @
$reviews, 2, 'There are only 2 Reviews here' );
235 is_deeply
( $reviews->[0], $review2, 'We have Review2...' );
236 is_deeply
( $reviews->[1], $review3, '...and Review3' );
238 $reviews = getallreviews
( $status, $offset, $row_count );
239 is
( @
$reviews, 1, 'There is only 1 Review here' );
240 is_deeply
( $reviews->[0], $review2, 'We have only Review2' );
242 # ---------- Testing numberofreviews ----------------------
244 $count = numberofreviews
($status);
245 is
( $count, 3, 'There are 3 reviews where approved = 0' );
248 $count = numberofreviews
($status);
249 is
( $count, 0, 'There is no review where approved = 0' );
251 $count = numberofreviews
();
252 is
( $count, 0, 'There is no review where approved = 0 (Default)' );
254 # ---------- Testing approvereview ------------------------
255 is
( $review1->{approved
}, 0, 'review1 is not approved' );
256 approvereview
( $review1->{reviewid
} );
257 $review1 = getreview
( $biblionumber1, $b1->borrowernumber );
258 is
( $review1->{approved
}, 1, 'review1 is approved' );
260 is
( $review2->{approved
}, 0, 'review2 is not approved' );
261 approvereview
( $review2->{reviewid
} );
262 $review2 = getreview
( $biblionumber1, $b2->borrowernumber );
263 is
( $review2->{approved
}, 1, 'review2 is approved' );
265 is
( $review3->{approved
}, 0, 'review3 is not approved' );
266 approvereview
( $review3->{reviewid
} );
267 $review3 = getreview
( $biblionumber3, $b2->borrowernumber );
268 is
( $review3->{approved
}, 1, 'review3 is approved' );
271 $reviews = getallreviews
($status);
273 $count = numberofreviews
($status);
274 is
( $count, 3, '3 reviews are approved' );
277 $count = numberofreviews
($status);
278 is
( $count, 0, 'No review are not approved' );
280 # ---------- Testing unapprovereview ----------------------
281 is
( $review1->{approved
}, 1, 'review1 is approved' );
282 unapprovereview
( $review1->{reviewid
} );
283 $review1 = getreview
( $biblionumber1, $b1->borrowernumber );
284 is
( $review1->{approved
}, 0, 'review1 is not approved' );
286 is
( $review2->{approved
}, 1, 'review2 is approved' );
287 unapprovereview
( $review2->{reviewid
} );
288 $review2 = getreview
( $biblionumber1, $b2->borrowernumber );
289 is
( $review2->{approved
}, 0, 'review2 is not approved' );
291 is
( $review3->{approved
}, 1, 'review3 is approved' );
292 unapprovereview
( $review3->{reviewid
} );
293 $review3 = getreview
( $biblionumber3, $b2->borrowernumber );
294 is
( $review3->{approved
}, 0, 'review3 is not approved' );
297 $reviews = getallreviews
($status);
299 $count = numberofreviews
($status);
300 is
( $count, 3, '3 reviews are not approved' );
303 $count = numberofreviews
($status);
304 is
( $count, 0, 'No review are approved' );
306 # ---------- Testing numberofreviewsbybiblionumber --------
307 approvereview
( $review1->{reviewid
} );
308 approvereview
( $review2->{reviewid
} );
309 approvereview
( $review3->{reviewid
} );
311 $biblionumber = $biblionumber1;
312 $count = numberofreviewsbybiblionumber
($biblionumber);
313 is
( $count, 2, 'There are 2 reviews for biblionumber1 and approved = 1' );
315 $biblionumber = $biblionumber2;
316 $count = numberofreviewsbybiblionumber
($biblionumber);
317 is
( $count, 0, 'There is no review for biblionumber2 and approved = 1' );
319 $biblionumber = $biblionumber3;
320 $count = numberofreviewsbybiblionumber
($biblionumber);
321 is
( $count, 1, 'There 1 review for biblionumber3 and approved = 1' );
323 unapprovereview
( $review1->{reviewid
} );
324 unapprovereview
( $review3->{reviewid
} );
326 $biblionumber = $biblionumber1;
327 $count = numberofreviewsbybiblionumber
($biblionumber);
328 is
( $count, 1, 'There is 1 review for biblionumber1 and approved = 1' );
330 $biblionumber = $biblionumber2;
331 $count = numberofreviewsbybiblionumber
($biblionumber);
332 is
( $count, 0, 'There is no review for biblionumber2 and approved = 1' );
334 $biblionumber = $biblionumber3;
335 $count = numberofreviewsbybiblionumber
($biblionumber);
336 is
( $count, 0, 'There is no review for biblionumber3 and approved = 1' );
338 # ---------- Testing updatereview -------------------------
339 my $rev1b = 'Review 1 bis';
340 my $rev2b = 'Review 2 bis';
341 my $rev3b = 'Review 3 bis';
343 is
( $review1->{review
}, $rev1, 'review field is "Review 1"' );
344 updatereview
( $biblionumber1, $b1->borrowernumber, $rev1b );
345 $review1 = getreview
( $biblionumber1, $b1->borrowernumber );
346 is
( $review1->{review
}, $rev1b, 'review field is "Review 1 bis"' );
348 is
( $review2->{review
}, $rev2, 'review field is "Review 2"' );
349 updatereview
( $biblionumber1, $b2->borrowernumber, $rev2b );
350 $review2 = getreview
( $biblionumber1, $b2->borrowernumber );
351 is
( $review2->{review
}, $rev2b, 'review field is "Review 2 bis"' );
353 is
( $review3->{review
}, $rev3, 'review field is "Review 3"' );
354 updatereview
( $biblionumber3, $b2->borrowernumber, $rev3b );
355 $review3 = getreview
( $biblionumber3, $b2->borrowernumber );
356 is
( $review3->{review
}, $rev3b, 'review field is "Review 3 bis"' );
358 # ---------- Testing deletereview -------------------------
362 my $numberOfReviews = numberofreviews
($status0) + numberofreviews
($status1);
363 is
( $numberOfReviews, 3, 'There are 3 reviews in database' );
365 deletereview
( $review1->{reviewid
} );
366 $review1 = getreview
( $biblionumber1, $b3->borrowernumber );
367 ok
( !defined($review1), 'Review1 is no longer defined' );
369 $numberOfReviews = numberofreviews
($status0) + numberofreviews
($status1);
370 is
( $numberOfReviews, 2, 'There are 2 reviews left in database' );
372 deletereview
( $review2->{reviewid
} );
373 $review2 = getreview
( $biblionumber2, $b2->borrowernumber );
374 ok
( !defined($review2), 'Review2 is no longer defined' );
376 $numberOfReviews = numberofreviews
($status0) + numberofreviews
($status1);
377 is
( $numberOfReviews, 1, 'There is 1 review left in database' );
379 deletereview
( $review3->{reviewid
} );
380 $review3 = getreview
( $biblionumber3, $b2->borrowernumber );
381 ok
( !defined($review3), 'Review3 is no longer defined' );
383 $numberOfReviews = numberofreviews
($status0) + numberofreviews
($status1);
384 is
( $numberOfReviews, 0, 'There is no review left in database' );