The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use strict;
use warnings;

use FindBin;
use lib "$FindBin::Bin/lib";
use Test::More;
use File::Path;

BEGIN {
    eval "use Plucene";
    plan $@
        ? ( skip_all => 'needs Plucene for testing' )
        : ( tests => 21 );
}

# remove previous index
rmtree 't/var' if -d 't/var';

use Catalyst::Test 'TestApp';

# add an item and get it back out a few different ways
ok( my $res = request('http://localhost/plucene/add/key1?text=Andy&author=agrundma') );
ok( $res = request('http://localhost/plucene/is_indexed/key1') );
is( $res->content, 1, 'document is indexed' );
ok( $res = request('http://localhost/plucene/query_total_hits?q=Andy') );
is( $res->content, '1', 'get_total_hits ok' );
ok( $res = request('http://localhost/plucene/query_items?q=Andy') );
like( $res->content, qr/key=key1/, 'get_items key mode ok' );
ok( $res = request('http://localhost/plucene/query_items?q=author:agrundma') );
like( $res->content, qr/key=key1/, 'search query 2 ok' );

# make sure key mode doesn't return any data
ok( $res = request('http://localhost/plucene/query_data?q=Andy') );
unlike( $res->content, qr/author=agrundma/, 'get_items key mode did not return author' );

# test full data mode
TestApp::M::Search::Plucene->config->{return_style} = 'full';
TestApp::M::Search::Plucene->init();

ok( $res = request('http://localhost/plucene/add/full?text=fulltest&author=draven') );
ok( $res = request('http://localhost/plucene/is_indexed/full') );
is( $res->content, 1, 'document is indexed' );
ok( $res = request('http://localhost/plucene/query_total_hits?q=draven') );
is( $res->content, '1', 'get_total_hits ok' );
ok( $res = request('http://localhost/plucene/query_data?q=draven') );
like( $res->content, qr/text=fulltest/, 'full search query data ok' );
like( $res->content, qr/author=draven/, 'full search query data ok' );

# test optimize
ok( $res = request('http://localhost/plucene/optimize') );
is( $res->content, 'ok', 'optimize ok' );