Elastic-Model

 view release on metacpan or  search on metacpan

t/50_scope/03_delete.t  view on Meta::CPAN

#!/usr/bin/perl

use strict;
use warnings;
use Test::More 0.96;
use Test::Exception;
use Scalar::Util qw(refaddr weaken);

use lib 't/lib';

our $es;
do 'es.pl';

use_ok 'MyApp' || print 'Bail out';

my $model = new_ok( 'MyApp', [ es => $es ], 'Model' );

ok my $ns = $model->namespace('myapp'), 'Got ns';
ok $ns->index('myapp')->create, 'Create index myapp';
isa_ok my $domain = $model->domain('myapp'),
    'Elastic::Model::Domain',
    'Domain';

# delete ID in current scope
my $scope_1 = create_scope('Scope_1');

#my ($user_1,$scope_2,$user_2);

my $user_1 = create_user('U1');
isa_ok $domain->delete( user => 1 ), 'Elastic::Model::UID', 'Delete ID 1';
isa_ok $user_1, 'Elastic::Model::Deleted', 'U1';

# delete ID in different scope
$user_1 = create_user('U1');
my $scope_2 = create_scope('Scope_2');
my $user_2  = get_user('U2');

isa_ok $domain->delete( user => 1 ), 'Elastic::Model::UID', 'Delete ID 1';

isa_ok $user_2, 'Elastic::Model::Deleted', 'U2';
isa_ok $user_1, 'MyApp::User',             'U1';

throws_ok sub { $domain->get( user => 1 ) },
    qr/Missing/,
    'Get deleted throws missing';

ok !$domain->try_get( user => 1 ), 'Try get deleted doc';

# get old version with UID
my $uid = $user_1->uid;
isa_ok $model->get_doc( uid => $uid ),
    'Elastic::Model::Deleted',
    'Model get old version';

# overwrite deleted in higher scope, then get in lower scope
# is this correct? or should we return Deleted
my $scope_3 = create_scope('Scope_3');
$user_1->name('John');
ok $user_1->overwrite, 'Overwrote U1';

undef $scope_3;
isa_ok $model->get_doc( uid => $uid ),
    'MyApp::User',
    'U1 with higher version from scope with deleted';

# delete object while new scope active
undef $scope_2;



( run in 1.034 second using v1.01-cache-2.11-cpan-39bf76dae61 )