Bug 20334: Option for escaping slashes in search queries
[koha.git] / t / Koha / SearchEngine / ElasticSearch / QueryBuilder.t
blob73b3bde3ef138ffeaa59c69395f12234eaa1a233
1 #!/usr/bin/perl
3 # This file is part of Koha.
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
18 use Modern::Perl;
20 use Test::More tests => 2;
21 use t::lib::Mocks;
23 use_ok('Koha::SearchEngine::Elasticsearch::QueryBuilder');
25 subtest 'query_regex_escape_options' => sub {
26 plan tests => 12;
28 t::lib::Mocks::mock_preference('QueryRegexEscapeOptions', 'dont_escape');
30 my $query_with_regexp = "query /with regexp/";
32 my $processed_query = Koha::SearchEngine::Elasticsearch::QueryBuilder->_query_regex_escape_process($query_with_regexp);
33 is(
34 $processed_query,
35 $query_with_regexp,
36 "Unescaped query regexp has not been escaped when escaping is disabled"
39 t::lib::Mocks::mock_preference('QueryRegexEscapeOptions', 'escape');
41 $processed_query = Koha::SearchEngine::Elasticsearch::QueryBuilder->_query_regex_escape_process($query_with_regexp);
42 is(
43 $processed_query,
44 "query \\/with regexp\\/",
45 "Unescaped query regexp has been escaped when escaping is enabled"
48 my $query_with_escaped_regex = "query \\/with regexp\\/";
49 $processed_query = Koha::SearchEngine::Elasticsearch::QueryBuilder->_query_regex_escape_process($query_with_escaped_regex);
50 is(
51 $processed_query,
52 $query_with_escaped_regex,
53 "Escaped query regexp has been left unmodified when escaping is enabled"
56 my $query_with_even_preceding_escapes_regex = "query \\\\/with regexp\\\\/";
57 $processed_query = Koha::SearchEngine::Elasticsearch::QueryBuilder->_query_regex_escape_process($query_with_even_preceding_escapes_regex);
58 is(
59 $processed_query,
60 "query \\\\\\/with regexp\\\\\\/",
61 "Query regexp with even preceding escapes, thus unescaped, has been escaped when escaping is enabled"
64 my $query_with_odd_preceding_escapes_regex = 'query \\\\\\/with regexp\\\\\\/';
65 $processed_query = Koha::SearchEngine::Elasticsearch::QueryBuilder->_query_regex_escape_process($query_with_odd_preceding_escapes_regex);
66 is(
67 $processed_query,
68 $query_with_odd_preceding_escapes_regex,
69 "Query regexp with odd preceding escapes, thus escaped, has been left unmodified when escaping is enabled"
72 my $query_with_quoted_slash = "query with / and \"/ within quotes\"";
73 $processed_query = Koha::SearchEngine::Elasticsearch::QueryBuilder->_query_regex_escape_process($query_with_quoted_slash);
74 is(
75 $processed_query,
76 "query with \\/ and \"/ within quotes\"",
77 "Unescaped slash outside of quotes has been escaped while unescaped slash within quotes is left as is when escaping is enabled."
80 t::lib::Mocks::mock_preference('QueryRegexEscapeOptions', 'unescape_escaped');
82 $processed_query = Koha::SearchEngine::Elasticsearch::QueryBuilder->_query_regex_escape_process($query_with_regexp);
83 is(
84 $processed_query,
85 "query \\/with regexp\\/",
86 "Unescaped query regexp has been escaped when unescape escaping is enabled"
89 $processed_query = Koha::SearchEngine::Elasticsearch::QueryBuilder->_query_regex_escape_process($query_with_escaped_regex);
90 is(
91 $processed_query,
92 "query /with regexp/",
93 "Escaped query regexp has been unescaped when unescape escaping is enabled"
96 $processed_query = Koha::SearchEngine::Elasticsearch::QueryBuilder->_query_regex_escape_process($query_with_even_preceding_escapes_regex);
97 is(
98 $processed_query,
99 "query \\\\\\/with regexp\\\\\\/",
100 "Query regexp with even preceding escapes, thus unescaped, has been escaped when unescape escaping is enabled"
103 $processed_query = Koha::SearchEngine::Elasticsearch::QueryBuilder->_query_regex_escape_process($query_with_odd_preceding_escapes_regex);
105 $processed_query,
106 "query \\\\/with regexp\\\\/",
107 "Query regexp with odd preceding escapes, thus escaped, has been unescaped when unescape escaping is enabled"
110 my $regexp_at_start_of_string_with_odd_preceding_escapes_regex = '\\\\\\/regexp\\\\\\/';
111 $processed_query = Koha::SearchEngine::Elasticsearch::QueryBuilder->_query_regex_escape_process($regexp_at_start_of_string_with_odd_preceding_escapes_regex);
113 $processed_query,
114 "\\\\/regexp\\\\/",
115 "Regexp at start of string with odd preceding escapes, thus escaped, has been unescaped when unescape escaping is enabled"
118 my $query_with_quoted_escaped_slash = "query with \\/ and \"\\/ within quotes\"";
119 $processed_query = Koha::SearchEngine::Elasticsearch::QueryBuilder->_query_regex_escape_process($query_with_quoted_escaped_slash);
121 $processed_query,
122 "query with / and \"\\/ within quotes\"",
123 "Escaped slash outside of quotes has been unescaped while escaped slash within quotes is left as is when unescape escaping is enabled."