|
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 |
- |
|
|