The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Wiki::Toolkit::TestLib;
use Test::More;

my $num_tests = 2;

if ( scalar @Wiki::Toolkit::TestLib::wiki_info == 0 ) {
    plan skip_all => "no backends configured";
} else {
    plan tests => ( $num_tests * scalar @Wiki::Toolkit::TestLib::wiki_info );
}

my $iterator = Wiki::Toolkit::TestLib->new_wiki_maker;

while ( my $wiki = $iterator->new_wiki ) {
    SKIP: {
        print "# Store is: " . ( ref $wiki->store ) . "\n";
        print "# Search is: " . ( ref $wiki->search_obj ) . "\n";

        my $using_lucy = ref $wiki->search_obj
            && $wiki->search_obj->isa( "Wiki::Toolkit::Search::Lucy" );

        my $using_plucene = ref $wiki->search_obj
            && $wiki->search_obj->isa( "Wiki::Toolkit::Search::Plucene" );

        skip "Tests only relevant to Lucy/Plucene search backends", $num_tests
            unless ( $using_lucy || $using_plucene );

        # Set up a new search backend which excludes the word "secretword"
        # from search indexing, then set up a new wiki using that backend.
        # Path info copied from Wiki::Toolkit::TestLib.
        my $new_search;

        if ( $using_lucy ) {
            require Wiki::Toolkit::Search::Lucy;
            $new_search = Wiki::Toolkit::Search::Lucy->new(
                path => "t/lucy",
                content_munger => \&munger,
            );
        } else {
            require Wiki::Toolkit::Search::Plucene;
            $new_search = Wiki::Toolkit::Search::Plucene->new(
                path => "t/plucene",
                content_munger => \&munger,
            );
        }

        my $new_wiki = Wiki::Toolkit->new(
            store => $wiki->store,
            search => $new_search );

        $new_wiki->write_node( "Secrets", "banana secretword elephant" )
          or die "Couldn't write node";

        my %results = $new_wiki->search_nodes( "secretword" );
        ok( !defined $results{Secrets},
            "content munging works to exclude word from search index" );

        %results = $new_wiki->search_nodes( "banana" );
        ok( $results{Secrets}, "...doesn't affect other words" );
    }
}

sub munger {
    my $content = shift;
    $content =~ s/secretword//gs;
    return $content;
}