Bug 32775: (follow-up) Unit tests
[koha.git] / t / db_dependent / Languages.t
1 #!/usr/bin/perl
2 #
3 # This Koha test module is a stub!  
4 # Add more tests here!!!
5
6 use Modern::Perl;
7
8 use Test::More tests => 21;
9 use List::Util qw(first);
10 use Data::Dumper;
11 use Test::Warn;
12 use t::lib::Mocks;
13 use Koha::Database;
14
15 BEGIN {
16     use_ok('C4::Languages', qw( accept_language getAllLanguages getLanguages getTranslatedLanguages get_rfc4646_from_iso639 ));
17 }
18
19 my $schema = Koha::Database->new->schema;
20 $schema->storage->txn_begin;
21 my $dbh = C4::Context->dbh;
22
23 isnt(C4::Languages::_get_themes(), undef, 'testing _get_themes doesnt return undef');
24
25 ok(C4::Languages::_get_language_dirs(), 'test getting _get_language_dirs');
26
27
28 my $result;
29 warning_is { $result = C4::Languages::accept_language(); }
30     q{accept_language(x,y) called with no clientPreferences (x).},
31     'accept_language() generated expected warning';
32 is($result,undef, 'test that accept_languages returns undef when nothing is entered');
33
34 ok(C4::Languages::getAllLanguages(), 'test get all languages');
35
36 t::lib::Mocks::mock_preference('AdvancedSearchLanguages', '');
37 my $all_languages = C4::Languages::getAllLanguages('eng');
38 ok(@$all_languages > 10, 'retrieved a bunch of languges');
39
40 my $languages = C4::Languages::getLanguages('eng');
41 is_deeply($languages, $all_languages, 'getLanguages() and getAllLanguages() return the same list');
42
43 $languages = C4::Languages::getLanguages('eng', 1);
44 is_deeply($languages, $all_languages, 'getLanguages() and getAllLanguages() with filtering selected but AdvancedSearchLanguages blank return the same list');
45
46 t::lib::Mocks::mock_preference('AdvancedSearchLanguages', 'ita|eng');
47 $languages = C4::Languages::getLanguages('eng', 1);
48 is(scalar(@$languages), 2, 'getLanguages() filtering using AdvancedSearchLanguages works');
49
50 my $translatedlanguages1;
51 warnings_are { $translatedlanguages1 = C4::Languages::getTranslatedLanguages('opac','prog',undef,'') }
52              [],
53              'no warnings for calling getTranslatedLanguages';
54 my @currentcheck1 = map { $_->{current} } @$translatedlanguages1;
55 my $onlyzeros = first { $_ != 0 } @currentcheck1;
56 ok(! $onlyzeros, "Everything was zeros.\n");
57
58 my $translatedlanguages2;
59 warnings_are { $translatedlanguages2 = C4::Languages::getTranslatedLanguages('opac','prog','en','') }
60              [],
61              'no warnings for calling getTranslatedLanguages';
62 my @currentcheck2 = map { $_->{current} } @$translatedlanguages2;
63 $onlyzeros = first { $_ != 0 } @currentcheck2;
64 ok($onlyzeros, "There is a $onlyzeros\n");
65
66 # Bug 32775
67 my @languages = ('de-DE', 'en', 'en-NZ', 'mi-NZ');
68 my @enabledlanguages = ('de-DE', 'en-NZ', 'mi-NZ');
69 my $translatedlanguages3;
70 $translatedlanguages3 = C4::Languages::_build_languages_arrayref(\@languages,'en',\@enabledlanguages);
71 is( $translatedlanguages3->[0]->{rfc4646_subtag}, 'de-DE', '_build_languages_arrayref() returns first language of "de-DE"' );
72 is( $translatedlanguages3->[1]->{rfc4646_subtag}, 'en', '_build_languages_arrayref() returns second language of "en"');
73 is( $translatedlanguages3->[2]->{rfc4646_subtag}, 'mi-NZ', '_build_languages_arrayref() returns third language of "mi-NZ"');
74
75
76 # Language Descriptions
77 my $sth = $dbh->prepare("SELECT DISTINCT subtag,type,lang,description from language_descriptions;");
78 $sth->execute();
79 my $DistinctLangDesc = $sth->fetchall_arrayref({});
80
81 $sth = $dbh->prepare("SELECT subtag,type,lang,description from language_descriptions;");
82 $sth->execute();
83 my $LangDesc = $sth->fetchall_arrayref({});
84
85 is(scalar(@$LangDesc),scalar(@$DistinctLangDesc),"No unexpected language_description duplicates.");
86
87 # Language_subtag_registry
88 $sth = $dbh->prepare("SELECT DISTINCT subtag,type,description,added FROM language_subtag_registry;");
89 $sth->execute();
90 my $DistinctLangReg = $sth->fetchall_arrayref({});
91
92 $sth = $dbh->prepare("SELECT subtag,type,description,added FROM language_subtag_registry;");
93 $sth->execute();
94 my $LangReg = $sth->fetchall_arrayref({});
95
96 is(scalar(@$LangReg),scalar(@$DistinctLangReg),"No unexpected language_subtag_registry duplicates.");
97
98 # Language RFC4646 to ISO639
99 $sth = $dbh->prepare("SELECT DISTINCT rfc4646_subtag,iso639_2_code FROM language_rfc4646_to_iso639;");
100 $sth->execute();
101 my $DistinctLangRfc4646 = $sth->fetchall_arrayref({});
102
103 $sth = $dbh->prepare("SELECT rfc4646_subtag,iso639_2_code FROM language_rfc4646_to_iso639;");
104 $sth->execute();
105 my $LangRfc4646 = $sth->fetchall_arrayref({});
106
107 is(scalar(@$LangRfc4646),scalar(@$DistinctLangRfc4646),"No unexpected language_rfc4646_to_iso639 duplicates.");
108
109 my $i = 0;
110 foreach my $pair (@$DistinctLangRfc4646){
111     $i++ if $pair->{rfc4646_subtag} eq C4::Languages::get_rfc4646_from_iso639( $pair->{iso639_2_code} );
112 }
113 is($i,scalar(@$DistinctLangRfc4646),"get_rfc4646_from_iso639 returns correct rfc for all iso values.");