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

use Test::More;
use strict;
use warnings;
our $es;
my $r;

# QUERY_THEN_FETCH
isa_ok $r= $es->search(
    query       => { match_all => {} },
    search_type => 'query_then_fetch'
    ),
    'HASH',
    "query_then_fetch";
is $r->{hits}{total}, 29, ' - total correct';
is @{ $r->{hits}{hits} }, 10, ' - returned 10 results';

# QUERY_AND_FETCH

isa_ok $r= $es->search(
    query       => { match_all => {} },
    search_type => 'query_and_fetch'
    ),
    'HASH',
    "query_and_fetch";
is $r->{hits}{total}, 29, ' - total correct';
ok @{ $r->{hits}{hits} } > 10, ' - returned  > 10 results';

# COUNT
isa_ok $r = $es->search( search_type => 'count' ), 'HASH', 'count';
is $r->{hits}{total}, 29, ' - total correct';
is @{ $r->{hits}{hits} }, 0, ' - zero results';

# SCAN
throws_ok { $es->search( search_type => 'scan' ) }
qr/ElasticSearch::Error::Request/, ' - scan without scroll';

ok $r = $es->search( search_type => 'scan', scroll => '2m', size => 1 ),
    ' - scan with scroll';

is @{ $r->{hits}{hits} }, 0, ' - no initial hits';
ok $r->{_scroll_id}, ' - scroll id';

is @{ $es->scroll( scroll_id => $r->{_scroll_id} )->{hits}{hits} }, 10,
    ' - hits from all shards';

1;