The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 7;
use Data::Dump qw( dump );
use JSON::XS;
use Search::OpenSearch::Engine::Xapian;

my $debug = $ENV{PERL_DEBUG} || 0;

SKIP: {

    my $index_path = $ENV{OPENSEARCH_INDEX};
    if ( !defined $index_path or !-d $index_path ) {
        diag("set OPENSEARCH_INDEX to valid path to test REST API");
        skip "set OPENSEARCH_INDEX to valid path to test REST API", 7;
    }

    my $engine = Search::OpenSearch::Engine::Xapian->new(
        index  => [$index_path],
        facets => { names => [qw( topics people places orgs author )], },
        fields => [qw( topics people places orgs author )],
    );

    my $resp;

    #dump( $engine->search( q => 'swishdocpath=foo/bar' ) );

    $resp = $engine->GET('foo/bar');
    $debug and dump($resp);
    is( $resp->{code}, 404, "GET == 404" );

    $resp = $engine->PUT(
        {   url     => 'foo/bar',
            content => '<doc><title>i am a test</title></doc>',
            type    => 'application/xml',
        }
    );
    $debug and dump($resp);
    is( $resp->{code}, 201, "PUT == 201" );

    $resp = $engine->GET('foo/bar');

    $debug and dump($resp);
    is( $resp->{code}, 200, "GET == 200" );

    $resp = $engine->POST(
        {   url     => 'foo/bar',
            content => '<doc><title>i am a POST test</title></doc>',
            type    => 'application/xml',
        }
    );

    $debug and dump($resp);
    is( $resp->{code}, 200, "POST == 200" );

    $resp = $engine->GET('foo/bar');
    $debug and dump($resp);
    is( $resp->{code}, 200, "GET == 200" );
    is( $resp->{doc}->{title}, "i am a POST test", "title updated" );

    $resp = $engine->DELETE('foo/bar');
    $debug and dump($resp);
    is( $resp->{code}, 204, "DELETE == 204" );
}