diff --git a/t/00-load.t b/t/00-load.t index 21b62ebb50..ab4b08fc34 100644 --- a/t/00-load.t +++ b/t/00-load.t @@ -2,6 +2,8 @@ # This file is part of Koha. # +# Copyright (c) 2016 Mark Tompsett -- is_testable() +# # 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 @@ -20,7 +22,7 @@ use Modern::Perl; use Test::More; use File::Spec; use File::Find; - +use English qw( -no_match_vars ); use t::lib::Mocks; =head1 DESCRIPTION @@ -59,13 +61,48 @@ find( return unless $m =~ s/[.]pm$//; $m =~ s{^.*/Koha/}{Koha/}; $m =~ s{/}{::}g; - return if $m =~ /Koha::NorwegianPatronDB/; # uses non-mandatory modules - use_ok($m) || BAIL_OUT("***** PROBLEMS LOADING FILE '$m'"); + if ( is_testable($m) ) { + use_ok($m) || BAIL_OUT("***** PROBLEMS LOADING FILE '$m'"); + } }, }, $lib ); +# Optional modules are causing checks to fail +# This checks for the particular modules to determine +# if the testing is possible or not. +# +# Returns 1 if possible, 0 if not. +sub is_testable { + my ($module_name) = @_; + my @needed_module_names; + my $return_value = 1; + if ( $module_name =~ /Koha::NorwegianPatronDB/xsm ) { + @needed_module_names = + ( 'SOAP::Lite', 'Crypt::GCrypt', 'Digest::SHA', 'Convert::BaseN' ); + } + elsif ( $module_name =~ /Koha::ElasticSearch::Indexer/xsm ) { + @needed_module_names = + ( 'Catmandu::Importer::MARC', 'Catmandu::Store::ElasticSearch' ); + } + elsif ( $module_name =~ /Koha::SearchEngine::Elasticsearch::Search/xsm ) { + @needed_module_names = ( 'Catmandu::Store::ElasticSearch' ); + } + foreach my $current_name (@needed_module_names) { + my $relative_pathname = $current_name; + $relative_pathname =~ s/::/\//gxsm; + $relative_pathname .= '.pm'; + my $check_result = eval { require "$relative_pathname"; 1; }; + if ($EVAL_ERROR) { + diag( +"Skipping testing of $module_name, because $current_name is not installed." + ); + $return_value = 0; + } + } + return $return_value; +} done_testing();