Koha/t/Biblio.t
Jonathan Druart 9d6d641d1f Bug 17600: Standardize our EXPORT_OK
On bug 17591 we discovered that there was something weird going on with
the way we export and use subroutines/modules.
This patch tries to standardize our EXPORT to use EXPORT_OK only.

That way we will need to explicitely define the subroutine we want to
use from a module.

This patch is a squashed version of:
Bug 17600: After export.pl
Bug 17600: After perlimport
Bug 17600: Manual changes
Bug 17600: Other manual changes after second perlimports run
Bug 17600: Fix tests

And a lot of other manual changes.

export.pl is a dirty script that can be found on bug 17600.

"perlimport" is:
git clone https://github.com/oalders/App-perlimports.git
cd App-perlimports/
cpanm --installdeps .
export PERL5LIB="$PERL5LIB:/kohadevbox/koha/App-perlimports/lib"
find . \( -name "*.pl" -o -name "*.pm" \) -exec perl App-perlimports/script/perlimports --inplace-edit --no-preserve-unused --filename {} \;

The ideas of this patch are to:
* use EXPORT_OK instead of EXPORT
* perltidy the EXPORT_OK list
* remove '&' before the subroutine names
* remove some uneeded use statements
* explicitely import the subroutines we need within the controllers or
modules

Note that the private subroutines (starting with _) should not be
exported (and not used from outside of the module except from tests).

EXPORT vs EXPORT_OK (from
https://www.thegeekstuff.com/2010/06/perl-exporter-examples/)
"""
Export allows to export the functions and variables of modules to user’s namespace using the standard import method. This way, we don’t need to create the objects for the modules to access it’s members.

@EXPORT and @EXPORT_OK are the two main variables used during export operation.

@EXPORT contains list of symbols (subroutines and variables) of the module to be exported into the caller namespace.

@EXPORT_OK does export of symbols on demand basis.
"""

If this patch caused a conflict with a patch you wrote prior to its
push:
* Make sure you are not reintroducing a "use" statement that has been
removed
* "$subroutine" is not exported by the C4::$MODULE module
means that you need to add the subroutine to the @EXPORT_OK list
* Bareword "$subroutine" not allowed while "strict subs"
means that you didn't imported the subroutine from the module:
  - use $MODULE qw( $subroutine list );
You can also use the fully qualified namespace: C4::$MODULE::$subroutine

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
2021-07-16 08:58:47 +02:00

154 lines
6 KiB
Perl
Executable file

#!/usr/bin/perl
# 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;
use Test::MockModule;
use Test::Warn;
plan tests => 39;
use_ok('C4::Biblio', qw( AddBiblio ModBiblio BiblioAutoLink LinkBibHeadingsToAuthorities GetMarcPrice GetMarcQuantity GetMarcControlnumber GetMarcISBN GetMarcISSN GetMarcSubjects GetMarcAuthors GetMarcUrls GetMarcSeries TransformMarcToKoha ModBiblioMarc RemoveAllNsb GetMarcBiblio UpdateTotalIssues ));
my $db = Test::MockModule->new('Koha::Database');
$db->mock( _new_schema => sub { return Schema(); } );
my @arr;
my $ret;
warning_is { @arr = AddBiblio(undef, q{}) }
{ carped => 'AddBiblio called with undefined record'},
"AddBiblio returns carped warning on undef record";
my $elements = @arr;
is($elements, 0, 'Add Biblio returns empty array for undef record');
warning_is { $ret = ModBiblio(undef, 0, '') }
{ carped => 'No record passed to ModBiblio'},
"ModBiblio returns carped warning on undef record";
is( $ret, 0, 'ModBiblio returns zero if not passed rec');
warning_is { $ret = BiblioAutoLink(undef, q{}) }
{ carped => 'Undefined record passed to BiblioAutoLink'},
"BiblioAutoLink returns carped warning on undef record";
is( $ret, 0, 'BiblioAutoLink returns zero if not passed rec');
warning_is { @arr = LinkBibHeadingsToAuthorities(q{}, q{}) }
{ carped => 'LinkBibHeadingsToAuthorities called on undefined bib record'},
"LinkBibHeadingsToAuthorities returns carped warning on undef record";
is($arr[0], 0, 'LinkBibHeadingsToAuthorities correct error return');
warning_is { $ret = GetMarcPrice(undef, 'MARC21') }
{ carped => 'GetMarcPrice called on undefined record'},
"GetMarcPrice returns carped warning on undef record";
ok( !defined $ret, 'GetMarcPrice returns undef if not passed rec');
warning_is { $ret = GetMarcQuantity(undef, 'MARC21') }
{ carped => 'GetMarcQuantity called on undefined record'},
"GetMarcQuantity returns carped warning on undef record";
ok( !defined $ret, 'GetMarcQuantity returns undef if not passed rec');
warning_is { $ret = GetMarcControlnumber() }
{ carped => 'GetMarcControlnumber called on undefined record'},
"GetMarcControlnumber returns carped warning on undef record";
ok( !defined $ret, 'GetMarcControlnumber returns undef if not passed rec');
warning_is { $ret = GetMarcISBN() }
{ carped => 'GetMarcISBN called on undefined record'},
"GetMarcISBN returns carped warning on undef record";
ok( !defined $ret, 'GetMarcISBN returns undef if not passed rec');
warning_is { $ret = GetMarcISSN() }
{ carped => 'GetMarcISSN called on undefined record'},
"GetMarcISSN returns carped warning on undef record";
ok( !defined $ret, 'GetMarcISSN returns undef if not passed rec');
warning_is { $ret = GetMarcSubjects() }
{ carped => 'GetMarcSubjects called on undefined record'},
"GetMarcSubjects returns carped warning on undef record";
ok( !defined $ret, 'GetMarcSubjects returns undef if not passed rec');
warning_is { $ret = GetMarcAuthors() }
{ carped => 'GetMarcAuthors called on undefined record'},
"GetMarcAuthors returns carped warning on undef record";
ok( !defined $ret, 'GetMarcAuthors returns undef if not passed rec');
warning_is { $ret = GetMarcUrls() }
{ carped => 'GetMarcUrls called on undefined record'},
"GetMarcUrls returns carped warning on undef record";
ok( !defined $ret, 'GetMarcUrls returns undef if not passed rec');
warning_is { $ret = GetMarcSeries() }
{ carped => 'GetMarcSeries called on undefined record'},
"GetMarcSeries returns carped warning on undef record";
ok( !defined $ret, 'GetMarcSeries returns undef if not passed rec');
my $hash_ref;
warning_is { $hash_ref = TransformMarcToKoha( undef) }
{ carped => 'TransformMarcToKoha called with undefined record'},
"TransformMarcToKoha returns carped warning on undef record";
isa_ok( $hash_ref, 'HASH');
$elements = keys %{$hash_ref};
is($elements, 0, 'Empty hashref returned for undefined record in TransformMarcToKoha');
warning_is { $ret = ModBiblioMarc() }
{ carped => 'ModBiblioMarc passed an undefined record'},
"ModBiblioMarc returns carped warning on undef record";
ok( !defined $ret, 'ModBiblioMarc returns undef if not passed rec');
warning_is { $ret = RemoveAllNsb() }
{ carped => 'RemoveAllNsb called with undefined record'},
"RemoveAllNsb returns carped warning on undef record";
ok( !defined $ret, 'RemoveAllNsb returns undef if not passed rec');
warning_is { $ret = GetMarcBiblio() }
{ carped => 'GetMarcBiblio called without parameters'},
"GetMarcBiblio returns carped warning on no parameters";
warning_is { $ret = GetMarcBiblio({ biblionumber => undef }) }
{ carped => 'GetMarcBiblio called with undefined biblionumber'},
"GetMarcBiblio returns carped warning on undef biblionumber";
ok( !defined $ret, 'GetMarcBiblio returns undef if not passed a biblionumber');
warnings_like { $ret = UpdateTotalIssues() }
[ { carped => qr/GetMarcBiblio called with undefined biblionumber/ },
{ carped => qr/UpdateTotalIssues could not get biblio record/ } ],
"UpdateTotalIssues returns carped warnings if biblio record does not exist";
ok( !defined $ret, 'UpdateTotalIssues returns carped warning if biblio record does not exist');