X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=t%2FQueryParser.t;h=7b694300bdb6086ddbd7df2b731b4f82905a8557;hb=c22e18d5a097ce9ece52f68e3fd9a2bb77a772a2;hp=41782f2fe458b4fefca66cf50e55f41deae221b2;hpb=fd6786331f3d3ac2d99c3dea90ff8b99035a8423;p=srvgit diff --git a/t/QueryParser.t b/t/QueryParser.t index 41782f2fe4..7b694300bd 100644 --- a/t/QueryParser.t +++ b/t/QueryParser.t @@ -17,22 +17,64 @@ ok(defined $QParser, 'Successfully created empty QP object'); ok($QParser->load_config('./etc/searchengine/queryparser.yaml'), 'Loaded QP config'); is($QParser->search_class_count, 4, 'Initialized 4 search classes'); -is (scalar(@{$QParser->search_fields()->{'keyword'}}), 107, "Correct number of search fields for 'keyword' class"); - -is($QParser->target_syntax('biblioserver', 'smith'), '@or @or @attr 1=1016 @attr 4=6 "smith" @attr 9=20 @attr 2=102 @attr 4=6 "smith" @attr 9=34 @attr 2=102 @attr 4=6 "smith"', 'super simple keyword query'); -is($QParser->target_syntax('biblioserver', 'au:smith'), '@attr 1=1003 @attr 4=6 "smith"', 'simple author query'); -is($QParser->target_syntax('biblioserver', 'keyword|publisher:smith'), '@attr 1=1018 @attr 4=6 "smith"', 'fielded publisher query'); -is($QParser->target_syntax('biblioserver', 'ti:"little engine that could"'), '@attr 1=4 @attr 4=1 "little engine that could"', 'phrase query'); -is($QParser->target_syntax('biblioserver', 'keyword|titlekw:smith'), '@attr 1=4 @attr 9=20 @attr 2=102 @attr 4=6 "smith"', 'relevance-bumped query'); -is($QParser->target_syntax('biblioserver', 'au:smith && johnson'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=1003 @attr 4=6 "johnson"', 'query with boolean &&'); -is($QParser->target_syntax('biblioserver', 'au:smith && ti:johnson'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=4 @attr 4=6 "johnson"', 'query with boolean &&'); -is($QParser->target_syntax('biblioserver', 'au:smith pubdate(-2008)'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 4=4 @attr 1=pubdate @attr 2=2 "2008"', 'keyword search with pubdate limited to -2008'); -is($QParser->target_syntax('biblioserver', 'au:smith pubdate(2008-)'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 4=4 @attr 1=pubdate @attr 2=4 "2008"', 'keyword search with pubdate limited to 2008-'); -is($QParser->target_syntax('biblioserver', 'au:smith pubdate(2008)'), '@and @attr 1=1003 @attr 4=6 "smith" @attr 4=4 @attr 1=pubdate "2008"', 'keyword search with pubdate limited to 2008'); -is($QParser->target_syntax('biblioserver', 'au:smith pubdate(1980,2008)'), '@and @attr 1=1003 @attr 4=6 "smith" @or @attr 4=4 @attr 1=pubdate "1980" @attr 4=4 @attr 1=pubdate "2008"', 'keyword search with pubdate limited to 1980, 2008'); -is($QParser->target_syntax('biblioserver', 'au:smith #acqdate_dsc'), '@or @attr 1=32 @attr 7=1 0 @attr 1=1003 @attr 4=6 "smith"', 'keyword search sorted by acqdate descending'); -is($QParser->bib1_mapping_by_attr('field', 'biblioserver', {'1' => '1004'})->{'field'}, 'personal', 'retrieve field by attr'); -is($QParser->bib1_mapping_by_attr_string('field', 'biblioserver', '@attr 1=1004')->{'field'}, 'personal', 'retrieve field by attrstring'); +is (scalar(@{$QParser->search_fields()->{'keyword'}}), 111, "Correct number of search fields for 'keyword' class"); + +# Set keyword search as the default +$QParser->default_search_class('keyword'); + +my $kwd_search = q/@attr 1=1016 @attr 4=6/; +my $weight1 = q/@attr 2=102 @attr 9=20 @attr 4=6/; +my $weight2 = q/@attr 2=102 @attr 9=34 @attr 4=6/; + +like( $QParser->target_syntax('biblioserver', 'smith'), + qr/\@or \@or $kwd_search "smith" ($weight1 "smith" $weight2 "smith"|$weight2 "smith" $weight1 "smith")/, + 'super simple keyword query'); + +is($QParser->target_syntax('biblioserver', 'au:smith'), + '@attr 1=1003 @attr 4=6 "smith"', 'simple author query'); + +is($QParser->target_syntax('biblioserver', 'keyword|publisher:smith'), + '@attr 1=1018 @attr 4=6 "smith"', 'fielded publisher query'); + +is($QParser->target_syntax('biblioserver', 'ti:"little engine that could"'), + '@attr 1=4 @attr 4=1 "little engine that could"', 'phrase query'); + +is($QParser->target_syntax('biblioserver', 'keyword|titlekw:smith'), + '@attr 1=4 @attr 2=102 @attr 9=20 @attr 4=6 "smith"', + 'relevance-bumped query'); + +is($QParser->target_syntax('biblioserver', 'au:smith && johnson'), + '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=1003 @attr 4=6 "johnson"', + 'query with boolean &&'); + +is($QParser->target_syntax('biblioserver', 'au:smith && ti:johnson'), + '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=4 @attr 4=6 "johnson"', 'query with boolean &&'); + +is($QParser->target_syntax('biblioserver', 'au:smith pubdate(-2008)'), + '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=31 @attr 4=4 @attr 2=2 "2008"', + 'keyword search with pubdate limited to -2008'); + +is($QParser->target_syntax('biblioserver', 'au:smith pubdate(2008-)'), + '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=31 @attr 4=4 @attr 2=4 "2008"', + 'keyword search with pubdate limited to 2008-'); + +is($QParser->target_syntax('biblioserver', 'au:smith pubdate(2008)'), + '@and @attr 1=1003 @attr 4=6 "smith" @attr 1=31 @attr 4=4 "2008"', + 'keyword search with pubdate limited to 2008'); + +is($QParser->target_syntax('biblioserver', 'au:smith pubdate(1980,2008)'), + '@and @attr 1=1003 @attr 4=6 "smith" @or @attr 1=31 @attr 4=4 "1980" @attr 1=31 @attr 4=4 "2008"', + 'keyword search with pubdate limited to 1980, 2008'); + +is($QParser->target_syntax('biblioserver', 'au:smith #acqdate_dsc'), + '@or @attr 1=32 @attr 7=1 0 @attr 1=1003 @attr 4=6 "smith"', + 'keyword search sorted by acqdate descending'); + +is($QParser->bib1_mapping_by_attr('field', 'biblioserver', {'1' => '1004'})->{'field'}, + 'personal', 'retrieve field by attr'); + +is($QParser->bib1_mapping_by_attr_string('field', 'biblioserver', '@attr 1=1004')->{'field'}, + 'personal', 'retrieve field by attrstring'); is ($QParser->clear_all_mappings, $QParser, 'clear all mappings returns self'); is ($QParser->clear_all_configuration, $QParser, 'clear all configuration returns self');