From 76d36fb87311ef7ed054067149787ecc7fa22ada Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Tue, 24 Jan 2017 16:39:28 +0100 Subject: [PATCH] Bug 17982: Fix the use of uniq in sub themelanguage Content-Type: text/plain; charset=utf-8 Doing uniq( \@themes ) is useless. It will just return to you the only reference you gave it. List::MoreUtils::uniq requires a list instead of an arrayref. So it is a trivial fix that makes sub themelanguage return one theme instead of three themes like [ 'prog', 'prog', 'prog' ]. Note that Template->new inserts one or two include paths to TT for each of these three identical themes. Added a unit to be somewhat overcomplete :) Test plan: [1] Run t/db_dependent/Templates.t [2] Open a page on OPAC or intranet. (Did you restart Plack?) Signed-off-by: Marcel de Rooy --- C4/Templates.pm | 6 +++--- t/db_dependent/Templates.t | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/C4/Templates.pm b/C4/Templates.pm index eebff11..10d0283 100644 --- a/C4/Templates.pm +++ b/C4/Templates.pm @@ -256,18 +256,18 @@ sub themelanguage { my $where = $tmpl =~ /xsl$/ ? 'xslt' : 'modules'; for my $theme (@themes) { if ( -e "$htdocs/$theme/$lang/$where/$tmpl" ) { - return ( $theme, $lang, uniq( \@themes ) ); + return ( $theme, $lang, [ uniq(@themes) ] ); } } # Otherwise return theme/'en', last resort fallback/'en' for my $theme (@themes) { if ( -e "$htdocs/$theme/en/$where/$tmpl" ) { - return ( $theme, 'en', uniq( \@themes ) ); + return ( $theme, 'en', [ uniq(@themes) ] ); } } # tmpl is a full path, so this is a template for a plugin if ( $tmpl =~ /^\// && -e $tmpl ) { - return ( $themes[0], $lang, uniq( \@themes ) ); + return ( $themes[0], $lang, [ uniq(@themes) ] ); } } diff --git a/t/db_dependent/Templates.t b/t/db_dependent/Templates.t index 236bd1e..aa841bd 100755 --- a/t/db_dependent/Templates.t +++ b/t/db_dependent/Templates.t @@ -19,8 +19,10 @@ use Modern::Perl; use CGI; -use Test::More tests => 5; +use Test::More tests => 7; +use List::MoreUtils qw/uniq/; use Test::Deep; +use Test::MockModule; BEGIN { use_ok( 'C4::Templates' ); @@ -45,5 +47,14 @@ is( scalar @keys, 6, "GetColumnDefs correctly returns the 5 tables defined in co my @tables = ( 'biblio', 'biblioitems', 'borrowers', 'items', 'statistics', 'subscription'); cmp_deeply( \@keys, \@tables, "GetColumnDefs returns the expected tables"); - -1; +# simple test for themelanguage +my $mod = Test::MockModule->new( 'C4::Languages' ); +$mod->mock( 'getlanguage', sub { 'en' } ); +my @retval = C4::Templates::themelanguage( C4::Context->config('intrahtdocs'), + 'about.tt', 'intranet', 'fake_query', +); +my $themeref = $retval[2]; +is( @$themeref > 0, 1, 'We still assume to get back at least one theme' ); +cmp_deeply( $themeref, [ uniq(@$themeref) ], 'Should be unique themes' ); + +# End of tests -- 2.1.4