Jonathan Druart
c6e488f4af
Two discussions on koha-devel lead to the same conclusion: biblioitems.marcxml should be moved out this table - biblio and biblioitems http://lists.koha-community.org/pipermail/koha-devel/2013-April/039239.html - biblioitems.marcxml & biblioitems.marc / HUGE performance issue ! http://lists.koha-community.org/pipermail/koha-devel/2016-July/042821.html There are several goals to do it: - Performance As Paul Poulain wrote, a simple query like SELECT publicationyear, count(publicationyear) FROM biblioitems GROUP BY publicationyear; takes more than 10min on a DB with more than 1M bibliographic records but only 3sec (!) on the same DB without the biblioitems.marcxml field Note that priori to this patch set, the biblioitems.marcxml was not retrieved systematically, but was, at least, in C4::Acquisition::GetOrdersByBiblionumber and C4::Acquisition::GetOrders - Flexibility Storing the marcxml in a specific table would allow use to store several kind of metadata (USMARC, MARCXML, MIJ, etc.) and different formats (marcflavour) - Clean code It would be a first step toward Koha::MetadataRecord for bibliographic records (not done in this patch set). Test plan: - Update the DBIC Schema - Add / Edit / Delete / Import / Export bibliographic records - Add items - Reindex records using ES - Confirm that the following scripts still work: * misc/cronjobs/delete_records_via_leader.pl * misc/migration_tools/build_oai_sets.pl - Look at the reading history at the OPAC (opac-readingrecord.pl) - At the OPAC, click on a tag, you must see the result Note: Changes in Koha/OAI/Server/ListRecords.pm is planned on bug 15108. Signed-off-by: Mason James <mtj@kohaaloha.com> Signed-off-by: Josef Moravec <josef.moravec@gmail.com> Signed-off-by: Zeno Tajoli <z.tajoli@cineca.it> Signed-off-by: Nick Clemens <nick@bywatersolutions.com> Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
605 lines
20 KiB
Perl
605 lines
20 KiB
Perl
# Copyright 2015 BibLibre
|
|
#
|
|
# This file is part of Koha.
|
|
#
|
|
# Koha is free software; you can redistribute it and/or modify it under the
|
|
# terms of the GNU General Public License as published by the Free Software
|
|
# Foundation; either version 3 of the License, or (at your option) any later
|
|
# version.
|
|
#
|
|
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with Koha; if not, see <http://www.gnu.org/licenses>.
|
|
|
|
use Modern::Perl;
|
|
use Test::More tests => 57;
|
|
use t::lib::Mocks qw(mock_preference);
|
|
use POSIX qw(strftime);
|
|
use Data::Dumper;
|
|
|
|
BEGIN {
|
|
use_ok('C4::UsageStats');
|
|
use_ok('C4::Context');
|
|
use_ok('C4::Biblio');
|
|
use_ok( 'C4::AuthoritiesMarc', qw(AddAuthority) );
|
|
use_ok('C4::Reserves');
|
|
use_ok('MARC::Record');
|
|
use_ok('Koha::Acquisition::Order');
|
|
}
|
|
|
|
can_ok(
|
|
'C4::UsageStats', qw(
|
|
NeedUpdate
|
|
BuildReport
|
|
ReportToCommunity
|
|
_count )
|
|
);
|
|
|
|
my $dbh = C4::Context->dbh;
|
|
$dbh->{AutoCommit} = 0;
|
|
$dbh->{RaiseError} = 1;
|
|
|
|
$dbh->do('DELETE FROM issues');
|
|
$dbh->do('DELETE FROM biblio');
|
|
$dbh->do('DELETE FROM items');
|
|
$dbh->do('DELETE FROM auth_header');
|
|
$dbh->do('DELETE FROM old_issues');
|
|
$dbh->do('DELETE FROM old_reserves');
|
|
$dbh->do('DELETE FROM borrowers');
|
|
$dbh->do('DELETE FROM aqorders');
|
|
$dbh->do('DELETE FROM subscription');
|
|
|
|
#################################################
|
|
# Testing Subs
|
|
#################################################
|
|
|
|
# ---------- Testing NeedUpdate -----------------
|
|
|
|
#Mocking C4::Context->preference("UsageStatsLastUpdateTime") to 0
|
|
my $now = strftime( "%s", localtime );
|
|
t::lib::Mocks::mock_preference( "UsageStatsLastUpdateTime", 0 );
|
|
|
|
my $update = C4::UsageStats->NeedUpdate;
|
|
is( $update, 1, "There is no last update, update needed" );
|
|
|
|
#Mocking C4::Context->preference("UsageStatsLastUpdateTime") to now
|
|
$now = strftime( "%s", localtime );
|
|
t::lib::Mocks::mock_preference( "UsageStatsLastUpdateTime", $now );
|
|
|
|
$update = C4::UsageStats->NeedUpdate;
|
|
is( $update, 0, "Last update just be done, no update needed " );
|
|
|
|
# ---------- Testing BuildReport ----------------
|
|
|
|
#Test report->library -----------------
|
|
#mock to 0
|
|
t::lib::Mocks::mock_preference( "UsageStatsID", 0 );
|
|
t::lib::Mocks::mock_preference( "UsageStatsLibraryName", 0 );
|
|
t::lib::Mocks::mock_preference( "UsageStatsLibraryUrl", 0 );
|
|
t::lib::Mocks::mock_preference( "UsageStatsLibraryType", 0 );
|
|
t::lib::Mocks::mock_preference( "UsageStatsCountry", 0 );
|
|
|
|
my $report = C4::UsageStats->BuildReport();
|
|
|
|
isa_ok( $report, 'HASH', '$report is a HASH' );
|
|
isa_ok( $report->{library}, 'HASH', '$report->{library} is a HASH' );
|
|
is( scalar( keys %{$report->{library}} ), 5, "There are 5 fields in $report->{library}" );
|
|
is( $report->{library}->{id}, 0, "UsageStatsID is good" );
|
|
is( $report->{library}->{name}, '', "UsageStatsLibraryName is good" );
|
|
is( $report->{library}->{url}, '', "UsageStatsLibraryUrl is good" );
|
|
is( $report->{library}->{type}, '', "UsageStatsLibraryType is good" );
|
|
is( $report->{library}->{country}, '', "UsageStatsCountry is good" );
|
|
|
|
#mock with values
|
|
t::lib::Mocks::mock_preference( "UsageStatsID", 1 );
|
|
t::lib::Mocks::mock_preference( "UsageStatsLibraryName", 'NAME' );
|
|
t::lib::Mocks::mock_preference( "UsageStatsLibraryUrl", 'URL' );
|
|
t::lib::Mocks::mock_preference( "UsageStatsLibraryType", 'TYPE' );
|
|
t::lib::Mocks::mock_preference( "UsageStatsCountry", 'COUNTRY' );
|
|
|
|
$report = C4::UsageStats->BuildReport();
|
|
|
|
isa_ok( $report, 'HASH', '$report is a HASH' );
|
|
isa_ok( $report->{library}, 'HASH', '$report->{library} is a HASH' );
|
|
is( scalar( keys %{$report->{library}} ), 5, "There are 5 fields in $report->{library}" );
|
|
is( $report->{library}->{id}, 1, "UsageStatsID is good" );
|
|
is( $report->{library}->{name}, 'NAME', "UsageStatsLibraryName is good" );
|
|
is( $report->{library}->{url}, 'URL', "UsageStatsLibraryUrl is good" );
|
|
is( $report->{library}->{type}, 'TYPE', "UsageStatsLibraryType is good" );
|
|
is( $report->{library}->{country}, 'COUNTRY', "UsageStatsCountry is good" );
|
|
|
|
#Test report->volumetry ---------------
|
|
#with original values
|
|
$report = C4::UsageStats->BuildReport();
|
|
|
|
isa_ok( $report, 'HASH', '$report is a HASH' );
|
|
isa_ok( $report->{volumetry}, 'HASH', '$report->{volumetry} is a HASH' );
|
|
is( scalar( keys %{$report->{volumetry}} ), 8, "There are 8 fields in $report->{volumetry}" );
|
|
is( $report->{volumetry}->{biblio}, 0, "There is no biblio" );
|
|
is( $report->{volumetry}->{items}, 0, "There is no items" );
|
|
is( $report->{volumetry}->{auth_header}, 0, "There is no auth_header" );
|
|
is( $report->{volumetry}->{old_issues}, 0, "There is no old_issues" );
|
|
is( $report->{volumetry}->{old_reserves}, 0, "There is no old_reserves" );
|
|
is( $report->{volumetry}->{borrowers}, 0, "There is no borrowers" );
|
|
is( $report->{volumetry}->{aqorders}, 0, "There is no aqorders" );
|
|
is( $report->{volumetry}->{subscription}, 0, "There is no subscription" );
|
|
|
|
#after adding objects
|
|
construct_objects_needed();
|
|
|
|
$report = C4::UsageStats->BuildReport();
|
|
|
|
isa_ok( $report, 'HASH', '$report is a HASH' );
|
|
isa_ok( $report->{volumetry}, 'HASH', '$report->{volumetry} is a HASH' );
|
|
is( scalar( keys %{$report->{volumetry}} ), 8, "There are 8 fields in $report->{volumetry}" );
|
|
is( $report->{volumetry}->{biblio}, 3, "There are 3 biblio" );
|
|
is( $report->{volumetry}->{items}, 3, "There are 3 items" );
|
|
is( $report->{volumetry}->{auth_header}, 2, "There are 2 auth_header" );
|
|
is( $report->{volumetry}->{old_issues}, 1, "There is 1 old_issues" );
|
|
is( $report->{volumetry}->{old_reserves}, 1, "There is 1 old_reserves" );
|
|
is( $report->{volumetry}->{borrowers}, 3, "There are 3 borrowers" );
|
|
is( $report->{volumetry}->{aqorders}, 1, "There is 1 aqorders" );
|
|
is( $report->{volumetry}->{subscription}, 1, "There is 1 subscription" );
|
|
|
|
#Test report->systempreferences -------
|
|
#mock to 0
|
|
mocking_systempreferences_to_a_set_value(0);
|
|
|
|
$report = C4::UsageStats->BuildReport();
|
|
isa_ok( $report, 'HASH', '$report is a HASH' );
|
|
isa_ok( $report->{systempreferences}, 'HASH', '$report->{systempreferences} is a HASH' );
|
|
verif_systempreferences_values( $report, 0 );
|
|
|
|
#mock with values
|
|
mocking_systempreferences_to_a_set_value(1);
|
|
|
|
$report = C4::UsageStats->BuildReport();
|
|
isa_ok( $report, 'HASH', '$report is a HASH' );
|
|
isa_ok( $report->{systempreferences}, 'HASH', '$report->{systempreferences} is a HASH' );
|
|
verif_systempreferences_values( $report, 1 );
|
|
|
|
#Test if unwanted syspref are not sent
|
|
is( $report->{systempreferences}->{useDischarge}, undef, 'useDischarge should not be shared');
|
|
is( $report->{systempreferences}->{OpacUserJS}, undef, 'OpacUserJS should not be shared');
|
|
|
|
# ---------- Testing ReportToCommunity ----------
|
|
|
|
# ---------- Testing _count ---------------------
|
|
my $query = '
|
|
SELECT count(*)
|
|
FROM borrowers
|
|
';
|
|
my $count = $dbh->selectrow_array($query);
|
|
|
|
my $nb_fields = C4::UsageStats::_count('borrowers');
|
|
is( $nb_fields, $count, "_count return the good number of fields" );
|
|
|
|
#################################################
|
|
# Subs
|
|
#################################################
|
|
|
|
# Adding :
|
|
# 3 borrowers
|
|
# 4 biblio
|
|
# 3 biblio items
|
|
# 3 items
|
|
# 2 auth_header
|
|
# 1 old_issues
|
|
# 1 old_reserves
|
|
# 1 subscription
|
|
# 1 aqorders
|
|
sub construct_objects_needed {
|
|
|
|
# ---------- 3 borrowers ---------------------
|
|
my $surname1 = 'Borrower 1';
|
|
my $surname2 = 'Borrower 2';
|
|
my $surname3 = 'Borrower 3';
|
|
my $firstname1 = 'firstname 1';
|
|
my $firstname2 = 'firstname 2';
|
|
my $firstname3 = 'firstname 3';
|
|
my $cardnumber1 = 'test_card1';
|
|
my $cardnumber2 = 'test_card2';
|
|
my $cardnumber3 = 'test_card3';
|
|
my $categorycode = Koha::Database->new()->schema()->resultset('Category')->first()->categorycode();
|
|
my $branchcode = Koha::Database->new()->schema()->resultset('Branch')->first()->branchcode();
|
|
|
|
my $query = '
|
|
INSERT INTO borrowers
|
|
(surname, firstname, cardnumber, branchcode, categorycode)
|
|
VALUES (?,?,?,?,?)';
|
|
my $insert_sth = $dbh->prepare($query);
|
|
$insert_sth->execute( $surname1, $firstname1, $cardnumber1, $branchcode, $categorycode );
|
|
my $borrowernumber1 = $dbh->last_insert_id( undef, undef, 'borrowers', undef );
|
|
$insert_sth->execute( $surname2, $firstname2, $cardnumber2, $branchcode, $categorycode );
|
|
my $borrowernumber2 = $dbh->last_insert_id( undef, undef, 'borrowers', undef );
|
|
$insert_sth->execute( $surname3, $firstname3, $cardnumber3, $branchcode, $categorycode );
|
|
my $borrowernumber3 = $dbh->last_insert_id( undef, undef, 'borrowers', undef );
|
|
|
|
# ---------- 3 biblios -----------------------
|
|
my $title1 = 'Title 1';
|
|
my $title2 = 'Title 2';
|
|
my $title3 = 'Title 3';
|
|
my $author1 = 'Author 1';
|
|
my $author2 = 'Author 2';
|
|
my $author3 = 'Author 3';
|
|
|
|
$query = '
|
|
INSERT INTO biblio
|
|
(title, author)
|
|
VALUES (?,?)';
|
|
$insert_sth = $dbh->prepare($query);
|
|
$insert_sth->execute( $title1, $author1 );
|
|
my $biblionumber1 = $dbh->last_insert_id( undef, undef, 'biblio', undef );
|
|
$insert_sth->execute( $title2, undef );
|
|
my $biblionumber2 = $dbh->last_insert_id( undef, undef, 'biblio', undef );
|
|
$insert_sth->execute( $title3, $author3 );
|
|
my $biblionumber3 = $dbh->last_insert_id( undef, undef, 'biblio', undef );
|
|
|
|
# ---------- 3 biblio items -------------------------
|
|
$query = '
|
|
INSERT INTO biblioitems
|
|
(biblionumber, itemtype)
|
|
VALUES (?,?)';
|
|
$insert_sth = $dbh->prepare($query);
|
|
$insert_sth->execute( $biblionumber1, 'Book' );
|
|
my $biblioitemnumber1 = $dbh->last_insert_id( undef, undef, 'biblioitems', undef );
|
|
$insert_sth->execute( $biblionumber2, 'Music' );
|
|
my $biblioitemnumber2 = $dbh->last_insert_id( undef, undef, 'biblioitems', undef );
|
|
$insert_sth->execute( $biblionumber3, 'Book' );
|
|
my $biblioitemnumber3 = $dbh->last_insert_id( undef, undef, 'biblioitems', undef );
|
|
|
|
# ---------- 3 items -------------------------
|
|
my $barcode1 = '111111';
|
|
my $barcode2 = '222222';
|
|
my $barcode3 = '333333';
|
|
|
|
$query = '
|
|
INSERT INTO items
|
|
(biblionumber, biblioitemnumber, barcode, itype)
|
|
VALUES (?,?,?,?)';
|
|
$insert_sth = $dbh->prepare($query);
|
|
$insert_sth->execute( $biblionumber1, $biblioitemnumber1, $barcode1, 'Book' );
|
|
my $item_number1 = $dbh->last_insert_id( undef, undef, 'items', undef );
|
|
$insert_sth->execute( $biblionumber2, $biblioitemnumber2, $barcode2, 'Music' );
|
|
my $item_number2 = $dbh->last_insert_id( undef, undef, 'items', undef );
|
|
$insert_sth->execute( $biblionumber3, $biblioitemnumber3, $barcode3, 'Book' );
|
|
my $item_number3 = $dbh->last_insert_id( undef, undef, 'items', undef );
|
|
|
|
# ---------- Add 2 auth_header
|
|
$query = '
|
|
INSERT INTO auth_header
|
|
(authtypecode)
|
|
VALUES (?)';
|
|
$insert_sth = $dbh->prepare($query);
|
|
$insert_sth->execute('authtypecode1');
|
|
my $authid1 = $dbh->last_insert_id( undef, undef, 'auth_header', undef );
|
|
$insert_sth->execute('authtypecode2');
|
|
my $authid2 = $dbh->last_insert_id( undef, undef, 'auth_header', undef );
|
|
|
|
# ---------- Add 1 old_issues
|
|
$query = '
|
|
INSERT INTO old_issues
|
|
(borrowernumber, branchcode, itemnumber)
|
|
VALUES (?,?,?)';
|
|
$insert_sth = $dbh->prepare($query);
|
|
$insert_sth->execute( $borrowernumber1, $branchcode, $item_number1 );
|
|
my $issue_id1 = $dbh->last_insert_id( undef, undef, 'old_issues', undef );
|
|
|
|
# ---------- Add 1 old_reserves
|
|
AddReserve( $branchcode, $borrowernumber1, $biblionumber1, '', 1, undef, undef, '', 'Title', undef, undef );
|
|
my $reserves1 = GetReservesFromBiblionumber( { biblionumber => $biblionumber1 } );
|
|
my $reserve_id1 = $reserves1->[0]->{reserve_id};
|
|
my $reserve1 = CancelReserve( { reserve_id => $reserve_id1 } );
|
|
|
|
# ---------- Add 1 aqbudgets
|
|
$query = '
|
|
INSERT INTO aqbudgets
|
|
(budget_amount)
|
|
VALUES (?)';
|
|
$insert_sth = $dbh->prepare($query);
|
|
$insert_sth->execute("20.0");
|
|
my $aqbudgets1 = $dbh->last_insert_id( undef, undef, 'aqbudgets', undef );
|
|
|
|
# ---------- Add 1 aqorders
|
|
$query = '
|
|
INSERT INTO aqorders
|
|
(budget_id, basketno, biblionumber, invoiceid, subscriptionid)
|
|
VALUES (?,?,?,?,?)';
|
|
$insert_sth = $dbh->prepare($query);
|
|
$insert_sth->execute( $aqbudgets1, undef, undef, undef, undef );
|
|
my $aqorders1 = $dbh->last_insert_id( undef, undef, 'aqorders', undef );
|
|
|
|
# --------- Add 1 subscription
|
|
$query = '
|
|
INSERT INTO subscription
|
|
(biblionumber)
|
|
VALUES (?)';
|
|
$insert_sth = $dbh->prepare($query);
|
|
$insert_sth->execute($biblionumber1);
|
|
my $subscription1 = $dbh->last_insert_id( undef, undef, 'subscription', undef );
|
|
|
|
}
|
|
|
|
#Change systempreferences values to $set_value
|
|
sub mocking_systempreferences_to_a_set_value {
|
|
my $set_value = shift;
|
|
|
|
foreach (
|
|
qw/
|
|
AcqCreateItem
|
|
AcqWarnOnDuplicateInvoice
|
|
AcqViewBaskets
|
|
BasketConfirmations
|
|
OrderPdfFormat
|
|
casAuthentication
|
|
casLogout
|
|
AllowPKIAuth
|
|
DebugLevel
|
|
delimiter
|
|
noItemTypeImages
|
|
virtualshelves
|
|
AutoLocation
|
|
IndependentBranches
|
|
SessionStorage
|
|
Persona
|
|
AuthDisplayHierarchy
|
|
AutoCreateAuthorities
|
|
BiblioAddsAuthorities
|
|
dontmerge
|
|
UseAuthoritiesForTracings
|
|
CatalogModuleRelink
|
|
hide_marc
|
|
IntranetBiblioDefaultView
|
|
LabelMARCView
|
|
OpacSuppression
|
|
SeparateHoldings
|
|
UseControlNumber
|
|
advancedMARCeditor
|
|
DefaultClassificationSource
|
|
EasyAnalyticalRecords
|
|
autoBarcode
|
|
item-level_itypes
|
|
marcflavour
|
|
PrefillItem
|
|
z3950NormalizeAuthor
|
|
SpineLabelAutoPrint
|
|
SpineLabelShowPrintOnBibDetails
|
|
BlockReturnOfWithdrawnItems
|
|
CalculateFinesOnReturn
|
|
AgeRestrictionOverride
|
|
AllFinesNeedOverride
|
|
AllowFineOverride
|
|
AllowItemsOnHoldCheckout
|
|
AllowItemsOnHoldCheckoutSCO
|
|
AllowNotForLoanOverride
|
|
AllowRenewalLimitOverride
|
|
AllowReturnToBranch
|
|
AllowTooManyOverride
|
|
AutomaticItemReturn
|
|
AutoRemoveOverduesRestrictions
|
|
CircControl
|
|
HomeOrHoldingBranch
|
|
HomeOrHoldingBranchReturn
|
|
InProcessingToShelvingCart
|
|
IssueLostItem
|
|
IssuingInProcess
|
|
ManInvInNoissuesCharge
|
|
OverduesBlockCirc
|
|
RenewalPeriodBase
|
|
RenewalSendNotice
|
|
RentalsInNoissuesCharge
|
|
ReturnBeforeExpiry
|
|
ReturnToShelvingCart
|
|
TransfersMaxDaysWarning
|
|
UseBranchTransferLimits
|
|
useDaysMode
|
|
UseTransportCostMatrix
|
|
UseCourseReserves
|
|
finesCalendar
|
|
FinesIncludeGracePeriod
|
|
finesMode
|
|
RefundLostOnReturnControl
|
|
WhenLostChargeReplacementFee
|
|
WhenLostForgiveFine
|
|
AllowHoldDateInFuture
|
|
AllowHoldPolicyOverride
|
|
AllowHoldsOnDamagedItems
|
|
AllowHoldsOnPatronsPossessions
|
|
AutoResumeSuspendedHolds
|
|
canreservefromotherbranches
|
|
decreaseLoanHighHolds
|
|
DisplayMultiPlaceHold
|
|
emailLibrarianWhenHoldIsPlaced
|
|
ExpireReservesMaxPickUpDelay
|
|
OPACAllowHoldDateInFuture
|
|
OPACAllowUserToChooseBranch
|
|
ReservesControlBranch
|
|
ReservesNeedReturns
|
|
SuspendHoldsIntranet
|
|
SuspendHoldsOpac
|
|
TransferWhenCancelAllWaitingHolds
|
|
AllowAllMessageDeletion
|
|
AllowOfflineCirculation
|
|
CircAutocompl
|
|
CircAutoPrintQuickSlip
|
|
DisplayClearScreenButton
|
|
FilterBeforeOverdueReport
|
|
FineNotifyAtCheckin
|
|
itemBarcodeFallbackSearch
|
|
itemBarcodeInputFilter
|
|
previousIssuesDefaultSortOrder
|
|
RecordLocalUseOnReturn
|
|
soundon
|
|
SpecifyDueDate
|
|
todaysIssuesDefaultSortOrder
|
|
UpdateTotalIssuesOnCirc
|
|
UseTablesortForCirc
|
|
WaitingNotifyAtCheckin
|
|
AllowSelfCheckReturns
|
|
AutoSelfCheckAllowed
|
|
FRBRizeEditions
|
|
OPACFRBRizeEditions
|
|
AmazonCoverImages
|
|
OPACAmazonCoverImages
|
|
Babeltheque
|
|
BakerTaylorEnabled
|
|
GoogleJackets
|
|
HTML5MediaEnabled
|
|
IDreamBooksReadometer
|
|
IDreamBooksResults
|
|
IDreamBooksReviews
|
|
LibraryThingForLibrariesEnabled
|
|
LocalCoverImages
|
|
OPACLocalCoverImages
|
|
NovelistSelectEnabled
|
|
XISBN
|
|
OpenLibraryCovers
|
|
OpenLibrarySearch
|
|
UseKohaPlugins
|
|
SyndeticsEnabled
|
|
TagsEnabled
|
|
CalendarFirstDayOfWeek
|
|
opaclanguagesdisplay
|
|
AuthoritiesLog
|
|
BorrowersLog
|
|
CataloguingLog
|
|
FinesLog
|
|
IssueLog
|
|
LetterLog
|
|
ReturnLog
|
|
SubscriptionLog
|
|
BiblioDefaultView
|
|
COinSinOPACResults
|
|
DisplayOPACiconsXSLT
|
|
hidelostitems
|
|
HighlightOwnItemsOnOPAC
|
|
OpacAddMastheadLibraryPulldown
|
|
OPACDisplay856uAsImage
|
|
OpacHighlightedWords
|
|
OpacKohaUrl
|
|
OpacMaintenance
|
|
OpacPublic
|
|
OpacSeparateHoldings
|
|
OPACShowBarcode
|
|
OPACShowCheckoutName
|
|
OpacShowFiltersPulldownMobile
|
|
OPACShowHoldQueueDetails
|
|
OpacShowLibrariesPulldownMobile
|
|
OpacShowRecentComments
|
|
OPACShowUnusedAuthorities
|
|
OpacStarRatings
|
|
opacthemes
|
|
OPACURLOpenInNewWindow
|
|
OpacAuthorities
|
|
opacbookbag
|
|
OpacBrowser
|
|
OpacBrowseResults
|
|
OpacCloud
|
|
OPACFinesTab
|
|
OpacHoldNotes
|
|
OpacItemLocation
|
|
OpacPasswordChange
|
|
OPACPatronDetails
|
|
OPACpatronimages
|
|
OPACPopupAuthorsSearch
|
|
OpacTopissue
|
|
opacuserlogin
|
|
QuoteOfTheDay
|
|
RequestOnOpac
|
|
reviewson
|
|
ShowReviewer
|
|
ShowReviewerPhoto
|
|
SocialNetworks
|
|
suggestion
|
|
AllowPurchaseSuggestionBranchChoice
|
|
OpacAllowPublicListCreation
|
|
OpacAllowSharingPrivateLists
|
|
OpacRenewalAllowed
|
|
OpacRenewalBranch
|
|
OPACViewOthersSuggestions
|
|
SearchMyLibraryFirst
|
|
singleBranchMode
|
|
AnonSuggestions
|
|
EnableOpacSearchHistory
|
|
OPACPrivacy
|
|
opacreadinghistory
|
|
TrackClicks
|
|
PatronSelfRegistration
|
|
OPACShelfBrowser
|
|
AutoEmailOpacUser
|
|
AutoEmailPrimaryAddress
|
|
autoMemberNum
|
|
BorrowerRenewalPeriodBase
|
|
checkdigit
|
|
EnableBorrowerFiles
|
|
EnhancedMessagingPreferences
|
|
ExtendedPatronAttributes
|
|
intranetreadinghistory
|
|
memberofinstitution
|
|
patronimages
|
|
TalkingTechItivaPhoneNotification
|
|
uppercasesurnames
|
|
IncludeSeeFromInSearches
|
|
OpacGroupResults
|
|
QueryAutoTruncate
|
|
QueryFuzzy
|
|
QueryStemming
|
|
QueryWeightFields
|
|
TraceCompleteSubfields
|
|
TraceSubjectSubdivisions
|
|
UseICU
|
|
UseQueryParser
|
|
defaultSortField
|
|
displayFacetCount
|
|
OPACdefaultSortField
|
|
OPACItemsResultsDisplay
|
|
expandedSearchOption
|
|
IntranetNumbersPreferPhrase
|
|
OPACNumbersPreferPhrase
|
|
opacSerialDefaultTab
|
|
RenewSerialAddsSuggestion
|
|
RoutingListAddReserves
|
|
RoutingSerials
|
|
SubscriptionHistory
|
|
Display856uAsImage
|
|
DisplayIconsXSLT
|
|
template
|
|
yuipath
|
|
HidePatronName
|
|
intranetbookbag
|
|
StaffDetailItemSelection
|
|
viewISBD
|
|
viewLabeledMARC
|
|
viewMARC
|
|
ILS-DI
|
|
OAI-PMH
|
|
version
|
|
AudioAlerts
|
|
/
|
|
) {
|
|
t::lib::Mocks::mock_preference( $_, $set_value );
|
|
}
|
|
}
|
|
|
|
#Test if all systempreferences are at $value_to_test
|
|
sub verif_systempreferences_values {
|
|
my ( $report, $value_to_test ) = @_;
|
|
|
|
my @missings;
|
|
foreach my $key ( keys %{$report->{systempreferences}} ) {
|
|
if ( $report->{systempreferences}->{$key} ne $value_to_test ) {
|
|
warn $key;
|
|
push @missings, $key;
|
|
}
|
|
}
|
|
unless ( @missings ) {
|
|
ok(1, 'All prefs are present');
|
|
} else {
|
|
ok(0, 'Some prefs are missing: ' . Dumper(\@missings));
|
|
}
|
|
}
|
|
|
|
$dbh->rollback;
|