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;
24 use_ok ('C4::Biblio');
25 use_ok ('C4::Review');
26 use_ok ('Koha::Borrower');
27 use_ok ('MARC::Record');
36 numberofreviewsbybiblionumber
45 my $dbh = C4::Context->dbh;
46 $dbh->{AutoCommit} = 0;
47 $dbh->{RaiseError} = 1;
48 $dbh->do('DELETE FROM reviews');
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(
57 surname => 'Borrower 1',
58 branchcode => $branchcode,
59 categorycode => $categorycode
64 my $b2 = Koha::Borrower->new(
66 surname => 'Borrower 2',
67 branchcode => $branchcode,
68 categorycode => $categorycode
73 my $b3 = Koha::Borrower->new(
75 surname => 'Borrower 3',
76 branchcode => $branchcode,
77 categorycode => $categorycode
83 # ---------- Some biblios for testing -------------------
84 my ( $biblionumber1 ) = AddBiblio( MARC::Record->new, '' );
85 my ( $biblionumber2 ) = AddBiblio( MARC::Record->new, '' );
86 my ( $biblionumber3 ) = AddBiblio( MARC::Record->new, '' );
89 # ---------- Some reviews for testing -------------------
90 my $rev1 = 'Review 1';
91 my $rev2 = 'Review 2';
92 my $rev3 = 'Review 3';
95 # ---------- Testing savereview ---------------------------
96 my $date = Time::Piece::localtime->strftime('%F %T');
98 savereview($biblionumber1,$b1->borrowernumber,$rev1);
104 my $sth = $dbh->prepare($query);
106 my $count = $sth->fetchrow_array;
107 is ($count, 1, 'There is 1 review');
110 SELECT reviewid, borrowernumber, biblionumber, review, approved, datereviewed
113 $sth = $dbh->prepare($query);
115 my ($reviewid, $borrowernumber, $biblionumber, $review, $approved, $datereviewed) = $sth->fetchrow_array;
116 is ($borrowernumber, $b1->borrowernumber, 'borrowernumber field is good' );
117 is ($biblionumber, $biblionumber1, 'biblionumber field is good' );
118 is ($review, $rev1, 'review field is good' );
119 is ($approved, 0, 'approved field is 0 by default');
120 is ($datereviewed, $date, 'datereviewed field is good' );
122 # We add some others reviews
123 savereview($biblionumber1,$b2->borrowernumber,$rev2);
124 savereview($biblionumber3,$b2->borrowernumber,$rev3);
127 # ---------- Testing getreview ----------------------------
128 my $review1 = getreview($biblionumber1,$b1->borrowernumber);
129 my $review2 = getreview($biblionumber1,$b2->borrowernumber);
130 my $review3 = getreview($biblionumber3,$b2->borrowernumber);
136 $sth = $dbh->prepare($query);
138 $count = $sth->fetchrow_array;
139 is ($count, 3, 'There are 3 reviews');
141 isa_ok ($review1, 'HASH', '$review1 is defined as a hash');
142 is ($review1->{borrowernumber}, $b1->borrowernumber, 'borrowernumber field is good' );
143 is ($review1->{biblionumber}, $biblionumber1, 'biblionumber field is good' );
144 is ($review1->{review}, $rev1, 'review field is good' );
145 is ($review1->{approved}, 0, 'approved field is 0 by default');
146 cmp_ok ($review1->{datereviewed}, 'ge' ,$date , 'datereviewed field is good');
148 isa_ok ($review2, 'HASH', '$review2 is defined as a hash');
149 is ($review2->{borrowernumber}, $b2->borrowernumber, 'borrowernumber field is good' );
150 is ($review2->{biblionumber}, $biblionumber1, 'biblionumber field is good' );
151 is ($review2->{review}, $rev2, 'review field is good' );
152 is ($review2->{approved}, 0, 'approved field is 0 by default');
153 cmp_ok ($review2->{datereviewed}, 'ge' ,$date , 'datereviewed field is good');
155 isa_ok ($review3, 'HASH', '$review3 is defined as a hash');
156 is ($review3->{borrowernumber}, $b2->borrowernumber, 'borrowernumber field is good' );
157 is ($review3->{biblionumber}, $biblionumber3, 'biblionumber field is good' );
158 is ($review3->{review}, $rev3, 'review field is good' );
159 is ($review3->{approved}, 0, 'approved field is 0 by default');
160 cmp_ok ($review3->{datereviewed}, 'ge' ,$date , 'datereviewed field is good');
163 # ---------- Testing getreviews ---------------------------
165 my $reviews = getreviews($biblionumber1, $status);
170 WHERE biblionumber = ?
173 $sth = $dbh->prepare($query);
174 $sth->execute($biblionumber1, $status);
175 $count = $sth->fetchrow_array;
176 is ($count, 2, 'There are 2 reviews corresponding');
178 isa_ok ($reviews, 'ARRAY', '$reviews is defined as an array');
180 isa_ok ($reviews->[0], 'HASH', '$reviews->[0] is defined as a hash');
181 is ($reviews->[0]->{reviewid}, $review1->{reviewid}, 'reviewid field is good' );
182 is ($reviews->[0]->{borrowernumber}, $review1->{borrowernumber}, 'borrowernumber field is good' );
183 is ($reviews->[0]->{biblionumber}, $review1->{biblionumber}, 'biblionumber field is good' );
184 is ($reviews->[0]->{review}, $review1->{review}, 'review field is good' );
185 is ($reviews->[0]->{approved}, $review1->{approved}, 'approved field is 0 by default');
186 cmp_ok ($reviews->[0]->{datereviewed}, 'ge', $date, 'datereviewed field is good');
188 isa_ok ($reviews->[1], 'HASH', '$reviews->[1] is defined as a hash');
189 is ($reviews->[1]->{reviewid}, $review2->{reviewid}, 'reviewid field is good' );
190 is ($reviews->[1]->{borrowernumber}, $review2->{borrowernumber}, 'borrowernumber field is good' );
191 is ($reviews->[1]->{biblionumber}, $review2->{biblionumber}, 'biblionumber field is good' );
192 is ($reviews->[1]->{review}, $review2->{review}, 'review field is good' );
193 is ($reviews->[1]->{approved}, $review2->{approved}, 'approved field is 0 by default');
194 cmp_ok ($reviews->[1]->{datereviewed}, 'ge', $date, 'datereviewed field is good');
197 $reviews = getreviews($biblionumber1, $status);
198 isa_ok ($reviews, 'ARRAY', '$reviews is defined as an array');
199 is_deeply($reviews, [], '$reviews is empty, there is no approved review' );
202 # ---------- Testing getallreviews ------------------------
204 $reviews = getallreviews($status);
205 isa_ok ($reviews, 'ARRAY', '$reviews is defined as an array');
206 is_deeply($reviews, [], '$reviews is empty, there is no approved review' );
210 $reviews = getallreviews($status);
217 $sth = $dbh->prepare($query);
218 $sth->execute($status);
219 $count = $sth->fetchrow_array;
220 is ($count, 3, 'There are 3 reviews corresponding');
222 my $count2 = numberofreviews($status);
223 is ($count2, $count, 'number of reviews returned is good');
226 isa_ok ($reviews, 'ARRAY', '$reviews is defined as an array');
228 isa_ok ($reviews->[0], 'HASH', '$reviews->[0] is defined as a hash');
229 is ($reviews->[0]->{reviewid}, $review1->{reviewid}, 'reviewid field is good' );
230 is ($reviews->[0]->{borrowernumber}, $review1->{borrowernumber}, 'borrowernumber field is good' );
231 is ($reviews->[0]->{biblionumber}, $review1->{biblionumber}, 'biblionumber field is good' );
232 is ($reviews->[0]->{review}, $review1->{review}, 'review field is good' );
233 is ($reviews->[0]->{approved}, $review1->{approved}, 'approved field is 0 by default');
234 cmp_ok ($reviews->[0]->{datereviewed}, 'ge' ,$date , 'datereviewed field is good');
236 isa_ok ($reviews->[1], 'HASH', '$reviews->[1] is defined as a hash');
237 is ($reviews->[1]->{reviewid}, $review2->{reviewid}, 'reviewid field is good' );
238 is ($reviews->[1]->{borrowernumber}, $review2->{borrowernumber}, 'borrowernumber field is good' );
239 is ($reviews->[1]->{biblionumber}, $review2->{biblionumber}, 'biblionumber field is good' );
240 is ($reviews->[1]->{review}, $review2->{review}, 'review field is good' );
241 is ($reviews->[1]->{approved}, $review2->{approved}, 'approved field is 0 by default');
242 cmp_ok ($reviews->[1]->{datereviewed}, 'ge' ,$date , 'datereviewed field is good');
244 isa_ok ($reviews->[2], 'HASH', '$reviews->[2] is defined as a hash');
245 is ($reviews->[2]->{reviewid}, $review3->{reviewid}, 'reviewid field is good' );
246 is ($reviews->[2]->{borrowernumber}, $review3->{borrowernumber}, 'borrowernumber field is good' );
247 is ($reviews->[2]->{biblionumber}, $review3->{biblionumber}, 'biblionumber field is good' );
248 is ($reviews->[2]->{review}, $review3->{review}, 'review field is good' );
249 is ($reviews->[2]->{approved}, $review3->{approved}, 'approved field is 0 by default');
250 cmp_ok ($reviews->[2]->{datereviewed}, 'ge' ,$date , 'datereviewed field is good');
254 $reviews = getallreviews($status, $offset);
255 is (@$reviews, 2, 'There are only 2 Reviews here');
256 is_deeply ($reviews->[0], $review2, 'We have Review2...');
257 is_deeply ($reviews->[1], $review3, '...and Review3');
259 $reviews = getallreviews($status, $offset, $row_count);
260 is (@$reviews, 1, 'There is only 1 Review here');
261 is_deeply ($reviews->[0], $review2, 'We have only Review2');
264 # ---------- Testing numberofreviews ----------------------
266 $count = numberofreviews($status);
267 is($count, 3, 'There are 3 reviews where approved = 0');
270 $count = numberofreviews($status);
271 is($count, 0, 'There is no review where approved = 0');
273 $count = numberofreviews();
274 is($count, 0, 'There is no review where approved = 0 (Default)');
277 # ---------- Testing approvereview ------------------------
278 is($review1->{approved}, 0, 'review1 is not approved');
279 approvereview($review1->{reviewid});
280 $review1 = getreview($biblionumber1,$b1->borrowernumber);
281 is($review1->{approved}, 1, 'review1 is approved');
283 is($review2->{approved}, 0, 'review2 is not approved');
284 approvereview($review2->{reviewid});
285 $review2 = getreview($biblionumber1,$b2->borrowernumber);
286 is($review2->{approved}, 1, 'review2 is approved');
288 is($review3->{approved}, 0, 'review3 is not approved');
289 approvereview($review3->{reviewid});
290 $review3 = getreview($biblionumber3,$b2->borrowernumber);
291 is($review3->{approved}, 1, 'review3 is approved');
294 $reviews = getallreviews($status);
296 $count = numberofreviews($status);
297 is ($count, 3, '3 reviews are approved');
300 $count = numberofreviews($status);
301 is ($count, 0, 'No review are not approved');
304 # ---------- Testing unapprovereview ----------------------
305 is($review1->{approved}, 1, 'review1 is approved');
306 unapprovereview($review1->{reviewid});
307 $review1 = getreview($biblionumber1,$b1->borrowernumber);
308 is($review1->{approved}, 0, 'review1 is not approved');
310 is($review2->{approved}, 1, 'review2 is approved');
311 unapprovereview($review2->{reviewid});
312 $review2 = getreview($biblionumber1,$b2->borrowernumber);
313 is($review2->{approved}, 0, 'review2 is not approved');
315 is($review3->{approved}, 1, 'review3 is approved');
316 unapprovereview($review3->{reviewid});
317 $review3 = getreview($biblionumber3,$b2->borrowernumber);
318 is($review3->{approved}, 0, 'review3 is not approved');
321 $reviews = getallreviews($status);
323 $count = numberofreviews($status);
324 is ($count, 3, '3 reviews are not approved');
327 $count = numberofreviews($status);
328 is ($count, 0, 'No review are approved');
331 # ---------- Testing numberofreviewsbybiblionumber --------
332 approvereview($review1->{reviewid});
333 approvereview($review2->{reviewid});
334 approvereview($review3->{reviewid});
336 $biblionumber = $biblionumber1;
337 $count = numberofreviewsbybiblionumber($biblionumber);
338 is($count, 2, 'There are 2 reviews for biblionumber1 and approved = 1');
340 $biblionumber = $biblionumber2;
341 $count = numberofreviewsbybiblionumber($biblionumber);
342 is($count, 0, 'There is no review for biblionumber2 and approved = 1');
344 $biblionumber = $biblionumber3;
345 $count = numberofreviewsbybiblionumber($biblionumber);
346 is($count, 1, 'There 1 review for biblionumber3 and approved = 1');
348 unapprovereview($review1->{reviewid});
349 unapprovereview($review3->{reviewid});
351 $biblionumber = $biblionumber1;
352 $count = numberofreviewsbybiblionumber($biblionumber);
353 is($count, 1, 'There is 1 review for biblionumber1 and approved = 1');
355 $biblionumber = $biblionumber2;
356 $count = numberofreviewsbybiblionumber($biblionumber);
357 is($count, 0, 'There is no review for biblionumber2 and approved = 1');
359 $biblionumber = $biblionumber3;
360 $count = numberofreviewsbybiblionumber($biblionumber);
361 is($count, 0, 'There is no review for biblionumber3 and approved = 1');
364 # ---------- Testing updatereview -------------------------
365 my $rev1b = 'Review 1 bis';
366 my $rev2b = 'Review 2 bis';
367 my $rev3b = 'Review 3 bis';
369 is ($review1->{review}, $rev1, 'review field is "Review 1"');
370 updatereview($biblionumber1,$b1->borrowernumber,$rev1b);
371 $review1 = getreview($biblionumber1, $b1->borrowernumber);
372 is ($review1->{review}, $rev1b, 'review field is "Review 1 bis"');
374 is ($review2->{review}, $rev2, 'review field is "Review 2"');
375 updatereview($biblionumber1,$b2->borrowernumber,$rev2b);
376 $review2 = getreview($biblionumber1, $b2->borrowernumber);
377 is ($review2->{review}, $rev2b, 'review field is "Review 2 bis"');
379 is ($review3->{review}, $rev3, 'review field is "Review 3"');
380 updatereview($biblionumber3,$b2->borrowernumber,$rev3b);
381 $review3 = getreview($biblionumber3, $b2->borrowernumber);
382 is ($review3->{review}, $rev3b, 'review field is "Review 3 bis"');
385 # ---------- Testing deletereview -------------------------
389 my $numberOfReviews = numberofreviews($status0) + numberofreviews($status1);
390 is ($numberOfReviews, 3, 'There are 3 reviews in database');
392 deletereview($review1->{reviewid});
393 $review1 = getreview($biblionumber1, $b3->borrowernumber);
394 ok (!defined($review1), 'Review1 is no longer defined');
396 $numberOfReviews = numberofreviews($status0) + numberofreviews($status1);
397 is ($numberOfReviews, 2, 'There are 2 reviews left in database');
399 deletereview($review2->{reviewid});
400 $review2 = getreview($biblionumber2, $b2->borrowernumber);
401 ok (!defined($review2), 'Review2 is no longer defined');
403 $numberOfReviews = numberofreviews($status0) + numberofreviews($status1);
404 is ($numberOfReviews, 1, 'There is 1 review left in database');
406 deletereview($review3->{reviewid});
407 $review3 = getreview($biblionumber3, $b2->borrowernumber);
408 ok (!defined($review3), 'Review3 is no longer defined');
410 $numberOfReviews = numberofreviews($status0) + numberofreviews($status1);
411 is ($numberOfReviews, 0, 'There is no review left in database');