use strict;
use Wiki::Toolkit::TestLib;
use Test::More;
if ( scalar @Wiki::Toolkit::TestLib::wiki_info == 0 ) {
plan skip_all => "no backends configured";
} else {
plan tests => ( 5 * scalar @Wiki::Toolkit::TestLib::wiki_info );
}
my $iterator = Wiki::Toolkit::TestLib->new_wiki_maker;
while ( my $wiki = $iterator->new_wiki ) {
SKIP: {
my $search = $wiki->search_obj;
skip "No search backend in this combination", 5 unless $search;
skip "Search backend doesn't support fuzzy searching", 5
unless $search->supports_fuzzy_searches;
# Fuzzy match with differing punctuation.
$wiki->write_node( "King's Cross St Pancras", "station" )
or die "Can't write node";
my %finds = $search->fuzzy_title_match("Kings Cross St. Pancras");
is_deeply( [ keys %finds ], [ "King's Cross St Pancras" ],
"fuzzy_title_match works when punctuation differs" );
# Fuzzy match when we actually got the string right.
$wiki->write_node( "Potato", "A delicious vegetable" )
or die "Can't write node";
$wiki->write_node( "Patty", "A kind of burger type thing" )
or die "Can't write node";
%finds = $search->fuzzy_title_match("Potato");
is_deeply( [ sort keys %finds ], [ "Patty", "Potato" ],
"...returns all things found" );
ok( $finds{Potato} > $finds{Patty},
"...and exact match has highest relevance score" );
# Now try matching indirectly, through the wiki object.
%finds = eval {
$wiki->fuzzy_title_match("kings cross st pancras");
};
is( $@, "", "fuzzy_title_match works when called on wiki object" );
is_deeply( [ keys %finds ], [ "King's Cross St Pancras" ],
"...and returns the right thing" );
}
}