View | Details | Raw Unified | Return to bug 36947
Collapse All | Expand All

(-)a/t/Koha/SearchEngine/Elasticsearch/Search.t (-19 / +70 lines)
Lines 18-24 Link Here
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::NoWarnings;
20
use Test::NoWarnings;
21
use Test::More tests => 4;
21
use Test::More tests => 5;
22
use Test::MockModule;
22
use Test::MockModule;
23
use t::lib::Mocks;
23
use t::lib::Mocks;
24
use Encode       qw( encode );
24
use Encode       qw( encode );
Lines 31-48 use_ok('Koha::SearchEngine::Elasticsearch::Search'); Link Here
31
subtest '_sort_facets' => sub {
31
subtest '_sort_facets' => sub {
32
    plan tests => 3;
32
    plan tests => 3;
33
    t::lib::Mocks::mock_preference( 'SearchEngine', 'Elasticsearch' );
33
    t::lib::Mocks::mock_preference( 'SearchEngine', 'Elasticsearch' );
34
    my $facets = [
34
35
        { facet_label_value => 'Mary' },
35
    my $facets = _get_facets();
36
        { facet_label_value => 'Harry' },
37
        { facet_label_value => 'Fairy' },
38
        { facet_label_value => 'Ari' },
39
        { facet_label_value => 'mary' },
40
        { facet_label_value => 'harry' },
41
        { facet_label_value => 'fairy' },
42
        { facet_label_value => 'ari' },
43
        { facet_label_value => 'étienne' },
44
        { facet_label_value => 'Åuthor' },
45
    ];
46
36
47
    my @normal_sort_facets     = sort { $a->{facet_label_value} cmp $b->{facet_label_value} } @$facets;
37
    my @normal_sort_facets     = sort { $a->{facet_label_value} cmp $b->{facet_label_value} } @$facets;
48
    my @normal_expected_facets = (
38
    my @normal_expected_facets = (
Lines 50-61 subtest '_sort_facets' => sub { Link Here
50
        { facet_label_value => 'Fairy' },
40
        { facet_label_value => 'Fairy' },
51
        { facet_label_value => 'Harry' },
41
        { facet_label_value => 'Harry' },
52
        { facet_label_value => 'Mary' },
42
        { facet_label_value => 'Mary' },
43
        { facet_label_value => 'Zambidis' },
53
        { facet_label_value => 'ari' },
44
        { facet_label_value => 'ari' },
54
        { facet_label_value => 'fairy' },
45
        { facet_label_value => 'fairy' },
55
        { facet_label_value => 'harry' },
46
        { facet_label_value => 'harry' },
56
        { facet_label_value => 'mary' },
47
        { facet_label_value => 'mary' },
48
        { facet_label_value => 'Åberg, Erik' },
57
        { facet_label_value => 'Åuthor' },
49
        { facet_label_value => 'Åuthor' },
58
        { facet_label_value => 'étienne' },
50
        { facet_label_value => 'étienne' },
51
        { facet_label_value => 'Šostakovitš, Dmitri' },
59
    );
52
    );
60
53
61
    #NOTE: stringwise/bytewise is not UTF-8 friendly
54
    #NOTE: stringwise/bytewise is not UTF-8 friendly
Lines 68-73 subtest '_sort_facets' => sub { Link Here
68
    #is used for the locales of English (en) and French (fr).
61
    #is used for the locales of English (en) and French (fr).
69
    my $sorted_facets = $search->_sort_facets( { facets => $facets, locale => 'default' } );
62
    my $sorted_facets = $search->_sort_facets( { facets => $facets, locale => 'default' } );
70
    my $expected      = [
63
    my $expected      = [
64
        { facet_label_value => 'Åberg, Erik' },
71
        { facet_label_value => 'ari' },
65
        { facet_label_value => 'ari' },
72
        { facet_label_value => 'Ari' },
66
        { facet_label_value => 'Ari' },
73
        { facet_label_value => 'Åuthor' },
67
        { facet_label_value => 'Åuthor' },
Lines 78-83 subtest '_sort_facets' => sub { Link Here
78
        { facet_label_value => 'Harry' },
72
        { facet_label_value => 'Harry' },
79
        { facet_label_value => 'mary' },
73
        { facet_label_value => 'mary' },
80
        { facet_label_value => 'Mary' },
74
        { facet_label_value => 'Mary' },
75
        { facet_label_value => 'Šostakovitš, Dmitri' },
76
        { facet_label_value => 'Zambidis' },
81
    ];
77
    ];
82
    is_deeply( $sorted_facets, $expected, "Facets sorted correctly with default locale" );
78
    is_deeply( $sorted_facets, $expected, "Facets sorted correctly with default locale" );
83
79
Lines 91-103 subtest '_sort_facets' => sub { Link Here
91
    #NOTE: If "locale" is not provided to _sort_facets, it will look up the LC_COLLATE
87
    #NOTE: If "locale" is not provided to _sort_facets, it will look up the LC_COLLATE
92
    #for the local system. This is what allows this function to work well in production.
88
    #for the local system. This is what allows this function to work well in production.
93
    #However, since LC_COLLATE could vary from system to system running these unit tests,
89
    #However, since LC_COLLATE could vary from system to system running these unit tests,
94
    #we can't test arbitrary locales here.
90
    #we can't test it reliably here.
91
};
95
92
96
    #TODO: It would be great to explicitly use a fi_FI locale for another test, but we cannot guarantee
93
subtest '_sort_facets_zebra with fi_FI locale' => sub {
97
    #that every system has that locale. That said, perhaps we could do some conditional unit
94
    plan tests => 1;
98
    #testing if certain locales are available when running tests. This could allow for the Koha community
95
    my $locale_map = _get_locale_map();
99
    #to thoroughly test this functionality, while letting anyone run the unit tests regardless of their
96
SKIP: {
100
    #installed locales.
97
        skip( "fi_FI.utf8 locale not available on this system", 1 ) unless $locale_map->{"fi_FI.utf8"};
98
99
        my $facets = _get_facets();
100
101
        my $search = Koha::SearchEngine::Elasticsearch::Search->new(
102
            { index => $Koha::SearchEngine::Elasticsearch::AUTHORITIES_INDEX } );
103
104
        # Test with explicit locale parameter
105
        my $sorted_facets_explicit = $search->_sort_facets( { facets => $facets, locale => 'fi_FI' } );
106
        my $expected               = [
107
            { facet_label_value => 'ari' },
108
            { facet_label_value => 'Ari' },
109
            { facet_label_value => 'étienne' },
110
            { facet_label_value => 'fairy' },
111
            { facet_label_value => 'Fairy' },
112
            { facet_label_value => 'harry' },
113
            { facet_label_value => 'Harry' },
114
            { facet_label_value => 'mary' },
115
            { facet_label_value => 'Mary' },
116
            { facet_label_value => 'Šostakovitš, Dmitri' },
117
            { facet_label_value => 'Zambidis' },
118
            { facet_label_value => 'Åberg, Erik' },
119
            { facet_label_value => 'Åuthor' },
120
        ];
121
        is_deeply( $sorted_facets_explicit, $expected, "Zebra facets sorted correctly with explicit locale" );
122
    }
101
};
123
};
102
124
103
subtest 'search_auth_compat' => sub {
125
subtest 'search_auth_compat' => sub {
Lines 176-179 subtest 'search_auth_compat' => sub { Link Here
176
    is( @$results[0]->{series}, 1, 'Valid main heading with ShowHeadingUse' );
198
    is( @$results[0]->{series}, 1, 'Valid main heading with ShowHeadingUse' );
177
};
199
};
178
200
201
sub _get_facets {
202
    my $facets = [
203
        { facet_label_value => 'Mary' },
204
        { facet_label_value => 'Harry' },
205
        { facet_label_value => 'Fairy' },
206
        { facet_label_value => 'Ari' },
207
        { facet_label_value => 'mary' },
208
        { facet_label_value => 'harry' },
209
        { facet_label_value => 'Åberg, Erik' },
210
        { facet_label_value => 'Åuthor' },
211
        { facet_label_value => 'fairy' },
212
        { facet_label_value => 'ari' },
213
        { facet_label_value => 'étienne' },
214
        { facet_label_value => 'Šostakovitš, Dmitri' },
215
        { facet_label_value => 'Zambidis' },
216
    ];
217
    return $facets;
218
}
219
220
sub _get_locale_map {
221
    my $map     = {};
222
    my @locales = `locale -a`;
223
    foreach my $locale (@locales) {
224
        chomp($locale);
225
        $map->{$locale} = 1;
226
    }
227
    return $map;
228
}
229
179
1;
230
1;
(-)a/t/db_dependent/Search_FacetSorting.t (-14 / +64 lines)
Lines 17-23 Link Here
17
17
18
use Modern::Perl;
18
use Modern::Perl;
19
19
20
use Test::More tests => 1;
20
use Test::NoWarnings;
21
use Test::More tests => 3;
21
use Test::MockModule;
22
use Test::MockModule;
22
use t::lib::Mocks;
23
use t::lib::Mocks;
23
use C4::Search;
24
use C4::Search;
Lines 27-48 use utf8; Link Here
27
subtest '_sort_facets_zebra with system preference' => sub {
28
subtest '_sort_facets_zebra with system preference' => sub {
28
    plan tests => 3;
29
    plan tests => 3;
29
30
30
    my $facets = [
31
    my $facets = _get_facets();
31
        { facet_label_value => 'Mary' },
32
        { facet_label_value => 'Harry' },
33
        { facet_label_value => 'Fairy' },
34
        { facet_label_value => 'Ari' },
35
        { facet_label_value => 'mary' },
36
        { facet_label_value => 'harry' },
37
        { facet_label_value => 'fairy' },
38
        { facet_label_value => 'ari' },
39
        { facet_label_value => 'étienne' },
40
        { facet_label_value => 'Åuthor' },
41
    ];
42
32
43
    # Test with explicit locale parameter
33
    # Test with explicit locale parameter
44
    my $sorted_facets_explicit = C4::Search::_sort_facets_zebra( $facets, 'default' );
34
    my $sorted_facets_explicit = C4::Search::_sort_facets_zebra( $facets, 'default' );
45
    my $expected               = [
35
    my $expected               = [
36
        { facet_label_value => 'Åberg, Erik' },
46
        { facet_label_value => 'ari' },
37
        { facet_label_value => 'ari' },
47
        { facet_label_value => 'Ari' },
38
        { facet_label_value => 'Ari' },
48
        { facet_label_value => 'Åuthor' },
39
        { facet_label_value => 'Åuthor' },
Lines 53-58 subtest '_sort_facets_zebra with system preference' => sub { Link Here
53
        { facet_label_value => 'Harry' },
44
        { facet_label_value => 'Harry' },
54
        { facet_label_value => 'mary' },
45
        { facet_label_value => 'mary' },
55
        { facet_label_value => 'Mary' },
46
        { facet_label_value => 'Mary' },
47
        { facet_label_value => 'Šostakovitš, Dmitri' },
48
        { facet_label_value => 'Zambidis' },
56
    ];
49
    ];
57
    is_deeply( $sorted_facets_explicit, $expected, "Zebra facets sorted correctly with explicit locale" );
50
    is_deeply( $sorted_facets_explicit, $expected, "Zebra facets sorted correctly with explicit locale" );
58
51
Lines 66-68 subtest '_sort_facets_zebra with system preference' => sub { Link Here
66
    my $sorted_facets_fallback = C4::Search::_sort_facets_zebra($facets);
59
    my $sorted_facets_fallback = C4::Search::_sort_facets_zebra($facets);
67
    is( ref($sorted_facets_fallback), 'ARRAY', "Zebra facets sorting fallback works" );
60
    is( ref($sorted_facets_fallback), 'ARRAY', "Zebra facets sorting fallback works" );
68
};
61
};
69
- 
62
63
subtest '_sort_facets_zebra with fi_FI locale' => sub {
64
    plan tests => 1;
65
    my $locale_map = _get_locale_map();
66
SKIP: {
67
        skip( "fi_FI.utf8 locale not available on this system", 1 ) unless $locale_map->{"fi_FI.utf8"};
68
69
        my $facets = _get_facets();
70
71
        # Test with explicit locale parameter
72
        my $sorted_facets_explicit = C4::Search::_sort_facets_zebra( $facets, 'fi_FI' );
73
        my $expected               = [
74
            { facet_label_value => 'ari' },
75
            { facet_label_value => 'Ari' },
76
            { facet_label_value => 'étienne' },
77
            { facet_label_value => 'fairy' },
78
            { facet_label_value => 'Fairy' },
79
            { facet_label_value => 'harry' },
80
            { facet_label_value => 'Harry' },
81
            { facet_label_value => 'mary' },
82
            { facet_label_value => 'Mary' },
83
            { facet_label_value => 'Šostakovitš, Dmitri' },
84
            { facet_label_value => 'Zambidis' },
85
            { facet_label_value => 'Åberg, Erik' },
86
            { facet_label_value => 'Åuthor' },
87
        ];
88
        is_deeply( $sorted_facets_explicit, $expected, "Zebra facets sorted correctly with explicit locale" );
89
    }
90
};
91
92
sub _get_facets {
93
    my $facets = [
94
        { facet_label_value => 'Mary' },
95
        { facet_label_value => 'Harry' },
96
        { facet_label_value => 'Fairy' },
97
        { facet_label_value => 'Ari' },
98
        { facet_label_value => 'mary' },
99
        { facet_label_value => 'harry' },
100
        { facet_label_value => 'Åberg, Erik' },
101
        { facet_label_value => 'Åuthor' },
102
        { facet_label_value => 'fairy' },
103
        { facet_label_value => 'ari' },
104
        { facet_label_value => 'étienne' },
105
        { facet_label_value => 'Šostakovitš, Dmitri' },
106
        { facet_label_value => 'Zambidis' },
107
    ];
108
    return $facets;
109
}
110
111
sub _get_locale_map {
112
    my $map     = {};
113
    my @locales = `locale -a`;
114
    foreach my $locale (@locales) {
115
        chomp($locale);
116
        $map->{$locale} = 1;
117
    }
118
    return $map;
119
}

Return to bug 36947