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, $es_version );
my $r;

ok $es->update(
    index  => 'es_test_1',
    type   => 'type_1',
    id     => 7,
    script => 'ctx._source.extra= "foo"'
    ),
    'Update doc';

is $es->get( index => 'es_test_1', type => 'type_1', id => 7, refresh => 1 )
    ->{_source}{extra}, 'foo', ' - doc updated';

ok $es->update(
    index             => 'es_test_1',
    type              => 'type_1',
    id                => 7,
    script            => 'ctx._source.extra= "foo"',
    params            => { foo => 'bar' },
    ignore_missing    => 1,
    percolate         => '*',
    retry_on_conflict => 3,
    timeout           => '30s',
    replication       => 'sync',
    consistency       => 'quorum',
    routing           => 'xx',
    parent            => 'xx',
    )
    || 1,
    ' - all opts';

SKIP: {
    skip "upsert only supported in version 0.20", 6
        if $es_version lt '0.20';
    ok $r= $es->update(
        index  => 'es_test_1',
        type   => 'type_1',
        id     => 1000,
        script => 'ctx._source.extra="foo"',
        upsert => { bar => 'baz' },
        fields => ['_source']
        ),
        ' - upsert missing';

    is $r->{get}{_source}{bar}, 'baz', ' - doc upserted';
    ok !$r->{get}{_source}{extra}, ' - script not run';

    ok $r= $es->update(
        index  => 'es_test_1',
        type   => 'type_1',
        id     => 1000,
        script => 'ctx._source.extra="foo"',
        upsert => { bar => 'baz' },
        fields => ['_source']
        ),
        ' - upsert existing';

    is $r->{get}{_source}{bar},   'baz', ' - doc upserted';
    is $r->{get}{_source}{extra}, 'foo', ' - script run';

    ok $r= $es->update(
        index  => 'es_test_1',
        type   => 'type_1',
        id     => 1000,
        doc    => { lala => 'po' },
        fields => ['_source']
        ),
        ' - update via doc';

    is $r->{get}{_source}{lala}, 'po', ' - doc merged';
}

1