View | Details | Raw Unified | Return to bug 28565
Collapse All | Expand All

(-)a/t/db_dependent/UsageStats.t (-579 / +101 lines)
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
- 

Return to bug 28565