Lines 15-37
Link Here
|
15 |
# with Koha; if not, see <http://www.gnu.org/licenses>. |
15 |
# with Koha; if not, see <http://www.gnu.org/licenses>. |
16 |
|
16 |
|
17 |
use Modern::Perl; |
17 |
use Modern::Perl; |
18 |
use Test::More tests => 57; |
18 |
|
|
|
19 |
use Test::More tests => 4; |
20 |
|
19 |
use t::lib::Mocks qw(mock_preference); |
21 |
use t::lib::Mocks qw(mock_preference); |
20 |
use t::lib::TestBuilder; |
22 |
use t::lib::TestBuilder; |
|
|
23 |
|
21 |
use POSIX qw(strftime); |
24 |
use POSIX qw(strftime); |
22 |
use Data::Dumper; |
|
|
23 |
use Koha::Biblios; |
24 |
|
25 |
|
|
|
26 |
use C4::Reserves qw(AddReserve); |
27 |
use Koha::Authorities; |
28 |
use Koha::Biblios; |
29 |
use Koha::Items; |
25 |
use Koha::Libraries; |
30 |
use Koha::Libraries; |
|
|
31 |
use Koha::Old::Checkouts; |
32 |
use Koha::Old::Holds; |
33 |
use Koha::Patrons; |
26 |
|
34 |
|
27 |
BEGIN { |
35 |
BEGIN { |
28 |
use_ok('C4::UsageStats'); |
36 |
use_ok('C4::UsageStats'); |
29 |
use_ok('C4::Context'); |
|
|
30 |
use_ok('C4::Biblio'); |
31 |
use_ok( 'C4::AuthoritiesMarc', qw(AddAuthority) ); |
32 |
use_ok('C4::Reserves'); |
33 |
use_ok('MARC::Record'); |
34 |
use_ok('Koha::Acquisition::Orders'); |
35 |
} |
37 |
} |
36 |
|
38 |
|
37 |
can_ok( |
39 |
can_ok( |
Lines 42-615
can_ok(
Link Here
|
42 |
_count ) |
44 |
_count ) |
43 |
); |
45 |
); |
44 |
|
46 |
|
45 |
my $schema = Koha::Database->new->schema; |
|
|
46 |
$schema->storage->txn_begin; |
47 |
my $builder = t::lib::TestBuilder->new; |
47 |
my $builder = t::lib::TestBuilder->new; |
48 |
my $dbh = C4::Context->dbh; |
48 |
my $schema = Koha::Database->new->schema; |
49 |
|
|
|
50 |
$dbh->do('DELETE FROM issues'); |
51 |
$dbh->do('DELETE FROM biblio'); |
52 |
$dbh->do('DELETE FROM items'); |
53 |
$dbh->do('DELETE FROM auth_header'); |
54 |
$dbh->do('DELETE FROM old_issues'); |
55 |
$dbh->do('DELETE FROM old_reserves'); |
56 |
$dbh->do('DELETE FROM borrowers'); |
57 |
$dbh->do('DELETE FROM aqorders'); |
58 |
$dbh->do('DELETE FROM subscription'); |
59 |
|
60 |
################################################# |
61 |
# Testing Subs |
62 |
################################################# |
63 |
|
64 |
# ---------- Testing NeedUpdate ----------------- |
65 |
|
66 |
#Mocking C4::Context->preference("UsageStatsLastUpdateTime") to 0 |
67 |
my $now = strftime( "%s", localtime ); |
68 |
t::lib::Mocks::mock_preference( "UsageStatsLastUpdateTime", 0 ); |
69 |
|
70 |
my $update = C4::UsageStats->NeedUpdate; |
71 |
is( $update, 1, "There is no last update, update needed" ); |
72 |
|
73 |
#Mocking C4::Context->preference("UsageStatsLastUpdateTime") to now |
74 |
$now = strftime( "%s", localtime ); |
75 |
t::lib::Mocks::mock_preference( "UsageStatsLastUpdateTime", $now ); |
76 |
|
77 |
$update = C4::UsageStats->NeedUpdate; |
78 |
is( $update, 0, "Last update just be done, no update needed " ); |
79 |
|
80 |
my $nb_of_libraries = Koha::Libraries->count; |
81 |
|
82 |
# ---------- Testing BuildReport ---------------- |
83 |
|
84 |
#Test report->library ----------------- |
85 |
#mock to 0 |
86 |
t::lib::Mocks::mock_preference( "UsageStatsID", 0 ); |
87 |
t::lib::Mocks::mock_preference( "UsageStatsLibraryName", 0 ); |
88 |
t::lib::Mocks::mock_preference( "UsageStatsLibrariesInfo", 0 ); |
89 |
t::lib::Mocks::mock_preference( "UsageStatsLibraryType", 0 ); |
90 |
t::lib::Mocks::mock_preference( "UsageStatsCountry", 0 ); |
91 |
t::lib::Mocks::mock_preference( "UsageStatsLibraryUrl", 0 ); |
92 |
|
93 |
my $report = C4::UsageStats->BuildReport(); |
94 |
|
95 |
isa_ok( $report, 'HASH', '$report is a HASH' ); |
96 |
isa_ok( $report->{libraries}, 'ARRAY', '$report->{libraries} is an ARRAY' ); |
97 |
is( scalar( @{ $report->{libraries} } ), 0, "There are 0 fields in libraries, libraries info are not shared" ); |
98 |
is( $report->{installation}->{koha_id}, 0, "UsageStatsID is good" ); |
99 |
is( $report->{installation}->{name}, '', "UsageStatsLibraryName is good" ); |
100 |
is( $report->{installation}->{url}, '', "UsageStatsLibraryUrl is good" ); |
101 |
is( $report->{installation}->{type}, '', "UsageStatsLibraryType is good" ); |
102 |
is( $report->{installation}->{country}, '', "UsageStatsCountry is good" ); |
103 |
|
104 |
|
105 |
#mock with values |
106 |
t::lib::Mocks::mock_preference( "UsageStatsID", 1 ); |
107 |
t::lib::Mocks::mock_preference( "UsageStatsLibraryName", 'NAME' ); |
108 |
t::lib::Mocks::mock_preference( "UsageStatsLibraryUrl", 'URL' ); |
109 |
t::lib::Mocks::mock_preference( "UsageStatsLibraryType", 'TYPE' ); |
110 |
t::lib::Mocks::mock_preference( "UsageStatsCountry", 'COUNTRY' ); |
111 |
t::lib::Mocks::mock_preference( "UsageStatsLibrariesInfo", 1 ); |
112 |
t::lib::Mocks::mock_preference( "UsageStatsGeolocation", 1 ); |
113 |
|
114 |
|
115 |
$report = C4::UsageStats->BuildReport(); |
116 |
|
117 |
isa_ok( $report, 'HASH', '$report is a HASH' ); |
118 |
isa_ok( $report->{libraries}, 'ARRAY', '$report->{libraries} is an ARRAY' ); |
119 |
is( scalar( @{ $report->{libraries} } ), $nb_of_libraries, "There are 6 fields in $report->{libraries}" ); |
120 |
is( $report->{installation}->{koha_id}, 1, "UsageStatsID is good" ); |
121 |
is( $report->{installation}->{name}, 'NAME', "UsageStatsLibraryName is good" ); |
122 |
is( $report->{installation}->{url}, 'URL', "UsageStatsLibraryUrl is good" ); |
123 |
is( $report->{installation}->{type}, 'TYPE', "UsageStatsLibraryType is good" ); |
124 |
is( $report->{installation}->{country}, 'COUNTRY', "UsageStatsCountry is good" ); |
125 |
|
126 |
#Test report->volumetry --------------- |
127 |
#with original values |
128 |
$report = C4::UsageStats->BuildReport(); |
129 |
|
130 |
isa_ok( $report, 'HASH', '$report is a HASH' ); |
131 |
isa_ok( $report->{volumetry}, 'HASH', '$report->{volumetry} is a HASH' ); |
132 |
is( scalar( keys %{$report->{volumetry}} ), 8, "There are 8 fields in $report->{volumetry}" ); |
133 |
is( $report->{volumetry}->{biblio}, 0, "There is no biblio" ); |
134 |
is( $report->{volumetry}->{items}, 0, "There is no items" ); |
135 |
is( $report->{volumetry}->{auth_header}, 0, "There is no auth_header" ); |
136 |
is( $report->{volumetry}->{old_issues}, 0, "There is no old_issues" ); |
137 |
is( $report->{volumetry}->{old_reserves}, 0, "There is no old_reserves" ); |
138 |
is( $report->{volumetry}->{borrowers}, 0, "There is no borrowers" ); |
139 |
is( $report->{volumetry}->{aqorders}, 0, "There is no aqorders" ); |
140 |
is( $report->{volumetry}->{subscription}, 0, "There is no subscription" ); |
141 |
|
142 |
#after adding objects |
143 |
construct_objects_needed(); |
144 |
|
145 |
$report = C4::UsageStats->BuildReport(); |
146 |
|
147 |
isa_ok( $report, 'HASH', '$report is a HASH' ); |
148 |
isa_ok( $report->{volumetry}, 'HASH', '$report->{volumetry} is a HASH' ); |
149 |
is( scalar( keys %{$report->{volumetry}} ), 8, "There are 8 fields in $report->{volumetry}" ); |
150 |
is( $report->{volumetry}->{biblio}, 3, "There are 3 biblio" ); |
151 |
is( $report->{volumetry}->{items}, 3, "There are 3 items" ); |
152 |
is( $report->{volumetry}->{auth_header}, 2, "There are 2 auth_header" ); |
153 |
is( $report->{volumetry}->{old_issues}, 1, "There is 1 old_issues" ); |
154 |
is( $report->{volumetry}->{old_reserves}, 1, "There is 1 old_reserves" ); |
155 |
is( $report->{volumetry}->{borrowers}, 3, "There are 3 borrowers" ); |
156 |
is( $report->{volumetry}->{aqorders}, 1, "There is 1 aqorders" ); |
157 |
is( $report->{volumetry}->{subscription}, 1, "There is 1 subscription" ); |
158 |
|
159 |
#Test report->systempreferences ------- |
160 |
#mock to 0 |
161 |
mocking_systempreferences_to_a_set_value(0); |
162 |
|
163 |
$report = C4::UsageStats->BuildReport(); |
164 |
isa_ok( $report, 'HASH', '$report is a HASH' ); |
165 |
isa_ok( $report->{systempreferences}, 'HASH', '$report->{systempreferences} is a HASH' ); |
166 |
verif_systempreferences_values( $report, 0 ); |
167 |
|
168 |
#mock with values |
169 |
mocking_systempreferences_to_a_set_value(1); |
170 |
|
171 |
$report = C4::UsageStats->BuildReport(); |
172 |
isa_ok( $report, 'HASH', '$report is a HASH' ); |
173 |
isa_ok( $report->{systempreferences}, 'HASH', '$report->{systempreferences} is a HASH' ); |
174 |
verif_systempreferences_values( $report, 1 ); |
175 |
|
176 |
#Test if unwanted syspref are not sent |
177 |
is( $report->{systempreferences}->{useDischarge}, undef, 'useDischarge should not be shared'); |
178 |
is( $report->{systempreferences}->{OpacUserJS}, undef, 'OpacUserJS should not be shared'); |
179 |
|
180 |
# ---------- Testing ReportToCommunity ---------- |
181 |
|
182 |
# ---------- Testing _count --------------------- |
183 |
my $query = ' |
184 |
SELECT count(*) |
185 |
FROM borrowers |
186 |
'; |
187 |
my $count = $dbh->selectrow_array($query); |
188 |
|
189 |
my $nb_fields = C4::UsageStats::_count('borrowers'); |
190 |
is( $nb_fields, $count, "_count return the good number of fields" ); |
191 |
|
192 |
################################################# |
193 |
# Subs |
194 |
################################################# |
195 |
|
196 |
# Adding : |
197 |
# 3 borrowers |
198 |
# 4 biblio |
199 |
# 3 biblio items |
200 |
# 3 items |
201 |
# 2 auth_header |
202 |
# 1 old_issues |
203 |
# 1 old_reserves |
204 |
# 1 subscription |
205 |
# 1 aqorders |
206 |
sub construct_objects_needed { |
207 |
|
208 |
# ---------- 3 borrowers --------------------- |
209 |
my $surname1 = 'Borrower 1'; |
210 |
my $surname2 = 'Borrower 2'; |
211 |
my $surname3 = 'Borrower 3'; |
212 |
my $firstname1 = 'firstname 1'; |
213 |
my $firstname2 = 'firstname 2'; |
214 |
my $firstname3 = 'firstname 3'; |
215 |
my $cardnumber1 = 'test_card1'; |
216 |
my $cardnumber2 = 'test_card2'; |
217 |
my $cardnumber3 = 'test_card3'; |
218 |
my $categorycode = $builder->build({ source => 'Category' })->{categorycode}; |
219 |
my $branchcode = $builder->build({ source => 'Branch' })->{branchcode}; |
220 |
|
221 |
my $query = ' |
222 |
INSERT INTO borrowers |
223 |
(surname, firstname, cardnumber, branchcode, categorycode) |
224 |
VALUES (?,?,?,?,?)'; |
225 |
my $insert_sth = $dbh->prepare($query); |
226 |
$insert_sth->execute( $surname1, $firstname1, $cardnumber1, $branchcode, $categorycode ); |
227 |
my $borrowernumber1 = $dbh->last_insert_id( undef, undef, 'borrowers', undef ); |
228 |
$insert_sth->execute( $surname2, $firstname2, $cardnumber2, $branchcode, $categorycode ); |
229 |
my $borrowernumber2 = $dbh->last_insert_id( undef, undef, 'borrowers', undef ); |
230 |
$insert_sth->execute( $surname3, $firstname3, $cardnumber3, $branchcode, $categorycode ); |
231 |
my $borrowernumber3 = $dbh->last_insert_id( undef, undef, 'borrowers', undef ); |
232 |
|
233 |
# ---------- 3 biblios ----------------------- |
234 |
my $title1 = 'Title 1'; |
235 |
my $title2 = 'Title 2'; |
236 |
my $title3 = 'Title 3'; |
237 |
my $author1 = 'Author 1'; |
238 |
my $author2 = 'Author 2'; |
239 |
my $author3 = 'Author 3'; |
240 |
|
241 |
$query = ' |
242 |
INSERT INTO biblio |
243 |
(title, author, datecreated) |
244 |
VALUES (?,?, NOW())'; |
245 |
$insert_sth = $dbh->prepare($query); |
246 |
$insert_sth->execute( $title1, $author1 ); |
247 |
my $biblionumber1 = $dbh->last_insert_id( undef, undef, 'biblio', undef ); |
248 |
$insert_sth->execute( $title2, undef ); |
249 |
my $biblionumber2 = $dbh->last_insert_id( undef, undef, 'biblio', undef ); |
250 |
$insert_sth->execute( $title3, $author3 ); |
251 |
my $biblionumber3 = $dbh->last_insert_id( undef, undef, 'biblio', undef ); |
252 |
|
253 |
# ---------- 3 biblio items ------------------------- |
254 |
$query = ' |
255 |
INSERT INTO biblioitems |
256 |
(biblionumber, itemtype) |
257 |
VALUES (?,?)'; |
258 |
$insert_sth = $dbh->prepare($query); |
259 |
$insert_sth->execute( $biblionumber1, 'Book' ); |
260 |
my $biblioitemnumber1 = $dbh->last_insert_id( undef, undef, 'biblioitems', undef ); |
261 |
$insert_sth->execute( $biblionumber2, 'Music' ); |
262 |
my $biblioitemnumber2 = $dbh->last_insert_id( undef, undef, 'biblioitems', undef ); |
263 |
$insert_sth->execute( $biblionumber3, 'Book' ); |
264 |
my $biblioitemnumber3 = $dbh->last_insert_id( undef, undef, 'biblioitems', undef ); |
265 |
|
266 |
# ---------- 3 items ------------------------- |
267 |
my $barcode1 = '111111'; |
268 |
my $barcode2 = '222222'; |
269 |
my $barcode3 = '333333'; |
270 |
|
271 |
$query = ' |
272 |
INSERT INTO items |
273 |
(biblionumber, biblioitemnumber, barcode, itype) |
274 |
VALUES (?,?,?,?)'; |
275 |
$insert_sth = $dbh->prepare($query); |
276 |
$insert_sth->execute( $biblionumber1, $biblioitemnumber1, $barcode1, 'Book' ); |
277 |
my $item_number1 = $dbh->last_insert_id( undef, undef, 'items', undef ); |
278 |
$insert_sth->execute( $biblionumber2, $biblioitemnumber2, $barcode2, 'Music' ); |
279 |
my $item_number2 = $dbh->last_insert_id( undef, undef, 'items', undef ); |
280 |
$insert_sth->execute( $biblionumber3, $biblioitemnumber3, $barcode3, 'Book' ); |
281 |
my $item_number3 = $dbh->last_insert_id( undef, undef, 'items', undef ); |
282 |
|
283 |
# ---------- Add 2 auth_header |
284 |
$query = ' |
285 |
INSERT INTO auth_header |
286 |
(authtypecode, marcxml) |
287 |
VALUES (?, "")'; |
288 |
$insert_sth = $dbh->prepare($query); |
289 |
$insert_sth->execute('atc1'); |
290 |
my $authid1 = $dbh->last_insert_id( undef, undef, 'auth_header', undef ); |
291 |
$insert_sth->execute('atc2'); |
292 |
my $authid2 = $dbh->last_insert_id( undef, undef, 'auth_header', undef ); |
293 |
|
294 |
# ---------- Add 1 old_issues |
295 |
$query = ' |
296 |
INSERT INTO old_issues |
297 |
(issue_id, borrowernumber, branchcode, itemnumber) |
298 |
VALUES ((select coalesce(max(issue_id), 0)+1 from issues),?,?,?)'; |
299 |
$insert_sth = $dbh->prepare($query); |
300 |
$insert_sth->execute( $borrowernumber1, $branchcode, $item_number1 ); |
301 |
my $issue_id1 = $dbh->last_insert_id( undef, undef, 'old_issues', undef ); |
302 |
|
303 |
# ---------- Add 1 old_reserves |
304 |
AddReserve( |
305 |
{ |
306 |
branchcode => $branchcode, |
307 |
borrowernumber => $borrowernumber1, |
308 |
biblionumber => $biblionumber1, |
309 |
priority => 1, |
310 |
title => 'Title', |
311 |
} |
312 |
); |
313 |
my $biblio = Koha::Biblios->find( $biblionumber1 ); |
314 |
my $holds = $biblio->holds; |
315 |
$holds->next->cancel if $holds->count; |
316 |
|
317 |
# ---------- Add 1 aqbudgets |
318 |
$query = ' |
319 |
INSERT INTO aqbudgets |
320 |
(budget_amount) |
321 |
VALUES (?)'; |
322 |
$insert_sth = $dbh->prepare($query); |
323 |
$insert_sth->execute("20.0"); |
324 |
my $aqbudgets1 = $dbh->last_insert_id( undef, undef, 'aqbudgets', undef ); |
325 |
|
326 |
# ---------- Add 1 aqorders |
327 |
$query = ' |
328 |
INSERT INTO aqorders |
329 |
(budget_id, basketno, biblionumber, invoiceid, subscriptionid) |
330 |
VALUES (?,?,?,?,?)'; |
331 |
$insert_sth = $dbh->prepare($query); |
332 |
$insert_sth->execute( $aqbudgets1, undef, undef, undef, undef ); |
333 |
my $aqorders1 = $dbh->last_insert_id( undef, undef, 'aqorders', undef ); |
334 |
|
335 |
# --------- Add 1 subscription |
336 |
$query = ' |
337 |
INSERT INTO subscription |
338 |
(biblionumber) |
339 |
VALUES (?)'; |
340 |
$insert_sth = $dbh->prepare($query); |
341 |
$insert_sth->execute($biblionumber1); |
342 |
my $subscription1 = $dbh->last_insert_id( undef, undef, 'subscription', undef ); |
343 |
|
344 |
} |
345 |
|
346 |
#Change systempreferences values to $set_value |
347 |
sub mocking_systempreferences_to_a_set_value { |
348 |
my $set_value = shift; |
349 |
|
350 |
foreach ( |
351 |
qw/ |
352 |
AcqCreateItem |
353 |
AcqWarnOnDuplicateInvoice |
354 |
AcqViewBaskets |
355 |
AllowHoldItemTypeSelection |
356 |
BasketConfirmations |
357 |
OrderPdfFormat |
358 |
casAuthentication |
359 |
casLogout |
360 |
AllowPKIAuth |
361 |
DebugLevel |
362 |
CSVDelimiter |
363 |
noItemTypeImages |
364 |
OpacNoItemTypeImages |
365 |
virtualshelves |
366 |
AutoLocation |
367 |
IndependentBranches |
368 |
SessionStorage |
369 |
Persona |
370 |
AuthDisplayHierarchy |
371 |
AutoCreateAuthorities |
372 |
BiblioAddsAuthorities |
373 |
AuthorityMergeLimit |
374 |
AuthorityMergeMode |
375 |
UseAuthoritiesForTracings |
376 |
CatalogModuleRelink |
377 |
hide_marc |
378 |
IntranetBiblioDefaultView |
379 |
LabelMARCView |
380 |
OpacSuppression |
381 |
SeparateHoldings |
382 |
UseControlNumber |
383 |
advancedMARCeditor |
384 |
DefaultClassificationSource |
385 |
EasyAnalyticalRecords |
386 |
autoBarcode |
387 |
item-level_itypes |
388 |
marcflavour |
389 |
PrefillItem |
390 |
z3950NormalizeAuthor |
391 |
SpineLabelAutoPrint |
392 |
SpineLabelShowPrintOnBibDetails |
393 |
BlockReturnOfLostItems |
394 |
BlockReturnOfWithdrawnItems |
395 |
CalculateFinesOnReturn |
396 |
AgeRestrictionOverride |
397 |
AllFinesNeedOverride |
398 |
AllowFineOverride |
399 |
AllowItemsOnHoldCheckoutSIP |
400 |
AllowItemsOnHoldCheckoutSCO |
401 |
AllowNotForLoanOverride |
402 |
AllowRenewalLimitOverride |
403 |
AllowReturnToBranch |
404 |
AllowTooManyOverride |
405 |
AutomaticItemReturn |
406 |
AutoRemoveOverduesRestrictions |
407 |
CircControl |
408 |
HomeOrHoldingBranch |
409 |
HomeOrHoldingBranchReturn |
410 |
IssueLostItem |
411 |
IssuingInProcess |
412 |
ManInvInNoissuesCharge |
413 |
OverduesBlockCirc |
414 |
RenewalPeriodBase |
415 |
RenewalSendNotice |
416 |
RentalsInNoissuesCharge |
417 |
ReturnBeforeExpiry |
418 |
TransfersMaxDaysWarning |
419 |
UseBranchTransferLimits |
420 |
UseTransportCostMatrix |
421 |
UseCourseReserves |
422 |
finesCalendar |
423 |
FinesIncludeGracePeriod |
424 |
finesMode |
425 |
RefundLostOnReturnControl |
426 |
WhenLostChargeReplacementFee |
427 |
WhenLostForgiveFine |
428 |
AllowHoldDateInFuture |
429 |
AllowHoldPolicyOverride |
430 |
AllowHoldsOnDamagedItems |
431 |
AllowHoldsOnPatronsPossessions |
432 |
AutoResumeSuspendedHolds |
433 |
canreservefromotherbranches |
434 |
decreaseLoanHighHolds |
435 |
DisplayMultiPlaceHold |
436 |
emailLibrarianWhenHoldIsPlaced |
437 |
ExpireReservesMaxPickUpDelay |
438 |
OPACAllowHoldDateInFuture |
439 |
OPACAllowUserToChooseBranch |
440 |
ReservesControlBranch |
441 |
ReservesNeedReturns |
442 |
SuspendHoldsIntranet |
443 |
SuspendHoldsOpac |
444 |
TransferWhenCancelAllWaitingHolds |
445 |
AllowAllMessageDeletion |
446 |
AllowOfflineCirculation |
447 |
PatronAutoComplete |
448 |
CircAutoPrintQuickSlip |
449 |
DisplayClearScreenButton |
450 |
FilterBeforeOverdueReport |
451 |
FineNotifyAtCheckin |
452 |
itemBarcodeFallbackSearch |
453 |
itemBarcodeInputFilter |
454 |
previousIssuesDefaultSortOrder |
455 |
RecordLocalUseOnReturn |
456 |
soundon |
457 |
SpecifyDueDate |
458 |
todaysIssuesDefaultSortOrder |
459 |
UpdateTotalIssuesOnCirc |
460 |
UseTablesortForCirc |
461 |
WaitingNotifyAtCheckin |
462 |
SCOAllowCheckin |
463 |
AutoSelfCheckAllowed |
464 |
FRBRizeEditions |
465 |
OPACFRBRizeEditions |
466 |
AmazonCoverImages |
467 |
OPACAmazonCoverImages |
468 |
Babeltheque |
469 |
BakerTaylorEnabled |
470 |
GoogleJackets |
471 |
HTML5MediaEnabled |
472 |
LibraryThingForLibrariesEnabled |
473 |
LocalCoverImages |
474 |
OPACLocalCoverImages |
475 |
NovelistSelectEnabled |
476 |
OpenLibraryCovers |
477 |
OpenLibrarySearch |
478 |
SyndeticsEnabled |
479 |
TagsEnabled |
480 |
CalendarFirstDayOfWeek |
481 |
opaclanguagesdisplay |
482 |
AcquisitionLog |
483 |
AuthoritiesLog |
484 |
BorrowersLog |
485 |
CataloguingLog |
486 |
FinesLog |
487 |
IssueLog |
488 |
ClaimsLog |
489 |
ReturnLog |
490 |
SubscriptionLog |
491 |
BiblioDefaultView |
492 |
COinSinOPACResults |
493 |
DisplayOPACiconsXSLT |
494 |
hidelostitems |
495 |
HighlightOwnItemsOnOPAC |
496 |
OpacAddMastheadLibraryPulldown |
497 |
OPACDisplay856uAsImage |
498 |
OpacHighlightedWords |
499 |
OpacKohaUrl |
500 |
OpacMaintenance |
501 |
OpacPublic |
502 |
OpacSeparateHoldings |
503 |
OPACShowCheckoutName |
504 |
OpacShowFiltersPulldownMobile |
505 |
OPACShowHoldQueueDetails |
506 |
OpacShowRecentComments |
507 |
OPACShowUnusedAuthorities |
508 |
OpacStarRatings |
509 |
opacthemes |
510 |
OPACURLOpenInNewWindow |
511 |
OpacAuthorities |
512 |
opacbookbag |
513 |
OpacBrowser |
514 |
OpacBrowseResults |
515 |
OpacCloud |
516 |
OPACFinesTab |
517 |
OpacHoldNotes |
518 |
OpacItemLocation |
519 |
OpacPasswordChange |
520 |
OPACPatronDetails |
521 |
OPACpatronimages |
522 |
OPACPopupAuthorsSearch |
523 |
OpacTopissue |
524 |
opacuserlogin |
525 |
QuoteOfTheDay |
526 |
RequestOnOpac |
527 |
OPACComments |
528 |
ShowReviewer |
529 |
ShowReviewerPhoto |
530 |
SocialNetworks |
531 |
suggestion |
532 |
OpacAllowPublicListCreation |
533 |
OpacAllowSharingPrivateLists |
534 |
OpacRenewalAllowed |
535 |
OpacRenewalBranch |
536 |
OPACViewOthersSuggestions |
537 |
SearchMyLibraryFirst |
538 |
singleBranchMode |
539 |
AnonSuggestions |
540 |
EnableOpacSearchHistory |
541 |
OPACPrivacy |
542 |
opacreadinghistory |
543 |
TrackClicks |
544 |
PatronSelfRegistration |
545 |
OPACShelfBrowser |
546 |
AutoEmailOpacUser |
547 |
AutoEmailPrimaryAddress |
548 |
autoMemberNum |
549 |
BorrowerRenewalPeriodBase |
550 |
EnableBorrowerFiles |
551 |
EnhancedMessagingPreferences |
552 |
ExtendedPatronAttributes |
553 |
intranetreadinghistory |
554 |
patronimages |
555 |
TalkingTechItivaPhoneNotification |
556 |
uppercasesurnames |
557 |
IncludeSeeFromInSearches |
558 |
QueryAutoTruncate |
559 |
QueryFuzzy |
560 |
QueryStemming |
561 |
QueryWeightFields |
562 |
TraceCompleteSubfields |
563 |
TraceSubjectSubdivisions |
564 |
UseICUStyleQuotes |
565 |
defaultSortField |
566 |
displayFacetCount |
567 |
OPACdefaultSortField |
568 |
OPACItemsResultsDisplay |
569 |
expandedSearchOption |
570 |
IntranetNumbersPreferPhrase |
571 |
OPACNumbersPreferPhrase |
572 |
opacSerialDefaultTab |
573 |
RenewSerialAddsSuggestion |
574 |
RoutingListAddReserves |
575 |
RoutingSerials |
576 |
SubscriptionHistory |
577 |
Display856uAsImage |
578 |
DisplayIconsXSLT |
579 |
template |
580 |
yuipath |
581 |
HidePatronName |
582 |
intranetbookbag |
583 |
StaffDetailItemSelection |
584 |
viewISBD |
585 |
viewLabeledMARC |
586 |
viewMARC |
587 |
ILS-DI |
588 |
OAI-PMH |
589 |
version |
590 |
AudioAlerts |
591 |
/ |
592 |
) { |
593 |
t::lib::Mocks::mock_preference( $_, $set_value ); |
594 |
} |
595 |
} |
596 |
|
597 |
#Test if all systempreferences are at $value_to_test |
598 |
sub verif_systempreferences_values { |
599 |
my ( $report, $value_to_test ) = @_; |
600 |
|
601 |
my @missings; |
602 |
foreach my $key ( keys %{$report->{systempreferences}} ) { |
603 |
if ( $report->{systempreferences}->{$key} ne $value_to_test ) { |
604 |
warn $key; |
605 |
push @missings, $key; |
606 |
} |
607 |
} |
608 |
unless ( @missings ) { |
609 |
ok(1, 'All prefs are present'); |
610 |
} else { |
611 |
ok(0, 'Some prefs are missing: ' . Dumper(\@missings)); |
612 |
} |
613 |
} |
614 |
|
49 |
|
615 |
$schema->storage->txn_rollback; |
50 |
subtest 'NeedUpdate() tests' => sub { |
|
|
51 |
|
52 |
plan tests => 2; |
53 |
|
54 |
#Mocking C4::Context->preference("UsageStatsLastUpdateTime") to 0 |
55 |
my $now = strftime( "%s", localtime ); |
56 |
t::lib::Mocks::mock_preference( "UsageStatsLastUpdateTime", 0 ); |
57 |
|
58 |
my $update = C4::UsageStats->NeedUpdate; |
59 |
is( $update, 1, "There is no last update, update needed" ); |
60 |
|
61 |
#Mocking C4::Context->preference("UsageStatsLastUpdateTime") to now |
62 |
$now = strftime( "%s", localtime ); |
63 |
t::lib::Mocks::mock_preference( "UsageStatsLastUpdateTime", $now ); |
64 |
|
65 |
$update = C4::UsageStats->NeedUpdate; |
66 |
is( $update, 0, "Last update just be done, no update needed " ); |
67 |
}; |
68 |
|
69 |
subtest 'BuildReport() tests' => sub { |
70 |
|
71 |
plan tests => 30; |
72 |
|
73 |
$schema->storage->txn_begin; |
74 |
|
75 |
# make sure we have some data for each 'volumetry' key |
76 |
my $category = $builder->build_object( { class => 'Koha::Patron::Categories' } ); |
77 |
my $patron = $builder->build_object( { class => 'Koha::Patrons' } ); |
78 |
my $library = $builder->build_object( { class => 'Koha::Libraries' } ); |
79 |
my $biblio = $builder->build_sample_biblio(); |
80 |
my $item = $builder->build_sample_item(); |
81 |
$builder->build_object( { class => 'Koha::Old::Holds' } ); |
82 |
$builder->build_object( { class => 'Koha::Old::Checkouts' } ); |
83 |
|
84 |
t::lib::Mocks::mock_preference( "UsageStatsID", 0 ); |
85 |
t::lib::Mocks::mock_preference( "UsageStatsLibraryName", 0 ); |
86 |
t::lib::Mocks::mock_preference( "UsageStatsLibrariesInfo", 0 ); |
87 |
t::lib::Mocks::mock_preference( "UsageStatsLibraryType", 0 ); |
88 |
t::lib::Mocks::mock_preference( "UsageStatsCountry", 0 ); |
89 |
t::lib::Mocks::mock_preference( "UsageStatsLibraryUrl", 0 ); |
90 |
|
91 |
my $report = C4::UsageStats->BuildReport(); |
92 |
|
93 |
isa_ok( $report, 'HASH', '$report is a HASH' ); |
94 |
isa_ok( $report->{libraries}, 'ARRAY', '$report->{libraries} is an ARRAY' ); |
95 |
is( scalar( @{ $report->{libraries} } ), 0, "There are 0 fields in libraries, libraries info are not shared" ); |
96 |
is( $report->{installation}->{koha_id}, 0, "UsageStatsID is good" ); |
97 |
is( $report->{installation}->{name}, '', "UsageStatsLibraryName is good" ); |
98 |
is( $report->{installation}->{url}, '', "UsageStatsLibraryUrl is good" ); |
99 |
is( $report->{installation}->{type}, '', "UsageStatsLibraryType is good" ); |
100 |
is( $report->{installation}->{country}, '', "UsageStatsCountry is good" ); |
101 |
is( $report->{installation}->{geolocation}, '', "UsageStatsGeolocation is good" ); |
102 |
|
103 |
#mock with values |
104 |
t::lib::Mocks::mock_preference( "UsageStatsID", 1 ); |
105 |
t::lib::Mocks::mock_preference( "UsageStatsLibraryName", 'NAME' ); |
106 |
t::lib::Mocks::mock_preference( "UsageStatsLibraryUrl", 'URL' ); |
107 |
t::lib::Mocks::mock_preference( "UsageStatsLibraryType", 'TYPE' ); |
108 |
t::lib::Mocks::mock_preference( "UsageStatsCountry", 'COUNTRY' ); |
109 |
t::lib::Mocks::mock_preference( "UsageStatsLibrariesInfo", 1 ); |
110 |
t::lib::Mocks::mock_preference( "UsageStatsGeolocation", 1 ); |
111 |
|
112 |
$report = C4::UsageStats->BuildReport(); |
113 |
|
114 |
isa_ok( $report, 'HASH', '$report is a HASH' ); |
115 |
isa_ok( $report->{libraries}, 'ARRAY', '$report->{libraries} is an ARRAY' ); |
116 |
is( scalar( @{ $report->{libraries} } ), Koha::Libraries->count, "There are 6 fields in $report->{libraries}" ); |
117 |
is( $report->{installation}->{koha_id}, 1, "UsageStatsID is good" ); |
118 |
is( $report->{installation}->{name}, 'NAME', "UsageStatsLibraryName is good" ); |
119 |
is( $report->{installation}->{url}, 'URL', "UsageStatsLibraryUrl is good" ); |
120 |
is( $report->{installation}->{type}, 'TYPE', "UsageStatsLibraryType is good" ); |
121 |
is( $report->{installation}->{country}, 'COUNTRY', "UsageStatsCountry is good" ); |
122 |
is( $report->{installation}->{geolocation}, '1', "UsageStatsGeolocation is good" ); |
123 |
ok( exists $report->{systempreferences}, 'systempreferences is present' ); |
124 |
|
125 |
isa_ok( $report, 'HASH', '$report is a HASH' ); |
126 |
isa_ok( $report->{volumetry}, 'HASH', '$report->{volumetry} is a HASH' ); |
127 |
is( scalar( keys %{ $report->{volumetry} } ), 8, "There are 8 fields in 'volumetry'" ); |
128 |
is( $report->{volumetry}->{biblio}, Koha::Biblios->count, "Biblios count correct" ); |
129 |
is( $report->{volumetry}->{items}, Koha::Items->count, "Items count correct" ); |
130 |
is( $report->{volumetry}->{auth_header}, Koha::Authorities->count, "Authorities count correct" ); |
131 |
is( $report->{volumetry}->{old_issues}, Koha::Old::Checkouts->count, "Old checkouts count correct" ); |
132 |
is( $report->{volumetry}->{old_reserves}, Koha::Old::Holds->count, "Old holds count correct" ); |
133 |
is( $report->{volumetry}->{borrowers}, Koha::Patrons->count, "Patrons count correct" ); |
134 |
is( $report->{volumetry}->{aqorders}, Koha::Acquisition::Orders->count, "Orders count correct" ); |
135 |
is( $report->{volumetry}->{subscription}, Koha::Subscriptions->count, "Suscriptions count correct" ); |
136 |
|
137 |
$schema->storage->txn_rollback; |
138 |
}; |
616 |
- |
|
|