From 897510f5a702adab3f42eb9b83a130431fac727e Mon Sep 17 00:00:00 2001
From: Mark Tompsett <mtompset@hotmail.com>
Date: Wed, 1 Feb 2017 13:32:25 -0500
Subject: [PATCH] Bug 18036: Improve test coverage for themelanguage
Content-Type: text/plain; charset=utf-8

This test triggers the three cases that were modified.
prove -v t/db_dependent/Templates.t
---
 t/db_dependent/Templates.t | 56 +++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 50 insertions(+), 6 deletions(-)

diff --git a/t/db_dependent/Templates.t b/t/db_dependent/Templates.t
index 8c56cd1..89b7d3b 100755
--- a/t/db_dependent/Templates.t
+++ b/t/db_dependent/Templates.t
@@ -18,8 +18,9 @@
 use Modern::Perl;
 
 use CGI;
+use File::Temp qw/ tempdir /;
 
-use Test::More tests => 6;
+use Test::More tests => 7;
 use Test::Deep;
 use Test::MockModule;
 
@@ -43,10 +44,10 @@ my $columns = C4::Templates::GetColumnDefs( $query );
 
 is( ref( $columns ) eq 'HASH', 1, 'GetColumnDefs returns a hashref' );
 # get the tables names, sorted
-my @keys = sort keys %$columns;
-is( scalar @keys, 6, "GetColumnDefs correctly returns the 5 tables defined in columns.def" );
-my @tables = ( 'biblio', 'biblioitems', 'borrowers', 'items', 'statistics', 'subscription');
-cmp_deeply( \@keys, \@tables, "GetColumnDefs returns the expected tables");
+my @keys = sort keys %{$columns};
+is( scalar @keys, 6, 'GetColumnDefs correctly returns the 5 tables defined in columns.def' );
+my @tables = qw( biblio biblioitems borrowers items statistics subscription );
+cmp_deeply( \@keys, \@tables, 'GetColumnDefs returns the expected tables');
 
 subtest 'Testing themelanguage for unique themes (BZ 17982)' => sub {
     plan tests => 1;
@@ -56,7 +57,50 @@ subtest 'Testing themelanguage for unique themes (BZ 17982)' => sub {
     $module_language->mock( 'getlanguage', sub { return 'en'; } );
 
     # This only triggers the first uniq but that is sufficient for now
-    cmp_deeply( ( C4::Templates::themelanguage( C4::Context->config('intrahtdocs'), 'about.tt' , 'intranet', 'fake_cgi'))[2], [ 'prog' ], 'We only expect one prog here' );
+    cmp_deeply( ( C4::Templates::themelanguage( C4::Context->config('intrahtdocs'), 'about.tt' , 'intranet', 'fake_cgi' ) )[2], [ 'prog' ], 'We only expect one prog here' );
+};
+
+subtest 'Test C4::Templates::themelanguage' => sub {
+    plan tests => 4;
+    my $testing_language;
+    my $module_language = Test::MockModule->new('C4::Languages');
+
+    $module_language->mock(
+        'getlanguage',
+        sub {
+            return $testing_language;
+        }
+    );
+
+    my $cgi = CGI->new();
+    my $htdocs = C4::Context->config('intrahtdocs');
+    my $section = 'intranet';
+    my $htdocs_2 = tempdir( CLEANUP => 1 );
+
+    # trigger first case.
+    $testing_language = 'fr-FR';
+    system( "mkdir -p $htdocs_2/prog/$testing_language/modules" );
+    open my $fh, '>', "$htdocs_2/prog/$testing_language/modules/about.tt";
+    close $fh;
+    my ($theme, $lang, $availablethemes) = C4::Templates::themelanguage( $htdocs_2, 'about.tt', $section, $cgi);
+    is($lang,'fr-FR','Expected language: non-en');
+
+    # trigger second case.
+    $testing_language = q{};
+    ($theme, $lang, $availablethemes) = C4::Templates::themelanguage($htdocs, 'about.tt', $section, $cgi);
+    is($lang,'en','Expected language: default en');
+
+    # trigger third case.
+    my $template = $htdocs . '/prog/en/modules/about.tt';
+    ($theme, $lang, $availablethemes) = C4::Templates::themelanguage($htdocs, $template, $section, $cgi);
+    is($lang,q{},'Expected language: unset');
+
+    # trigger bad case.
+    $template = $htdocs . '/prog/en/kaboom/about.tt';
+    ($theme, $lang, $availablethemes) = C4::Templates::themelanguage($htdocs, $template, $section, $cgi);
+    is($lang,undef,'Expected language: not coded for');
+
+    return;
 };
 
 1;
-- 
2.1.4