#!perl
use strict;
use lib 't/lib';
use Pinto::Tester::Util qw(make_dist_archive);
#------------------------------------------------------------------------------
{
my $t = Pinto::Tester->new;
# Check that master stack dir exists in the first place
$t->path_exists_ok( [qw(stacks master)] );
# Put archive on the master stack.
my $archive = make_dist_archive('Dist-1=PkgA~1');
$t->run_ok( Add => { archives => $archive, author => 'JOHN', recurse => 0 } );
$t->registration_ok('JOHN/Dist-1/PkgA~1/master');
# Copy the "master" stack to "dev" and make it the default
$t->run_ok( Copy => { from_stack => 'master', to_stack => 'dev', default => 1 } );
$t->registration_ok('JOHN/Dist-1/PkgA~1/dev');
$t->stack_is_default_ok('dev');
# Delete the "master" stack.
$t->run_ok( Kill => { stack => 'master' } );
$t->stack_not_exists_ok('master');
# The dev stack should still be the same
$t->registration_ok('JOHN/Dist-1/PkgA~1/dev');
}
#------------------------------------------------------------------------------
{
my $t = Pinto::Tester->new;
# Make sure master is the default
$t->stack_is_default_ok('master');
# Try killing the default stack
$t->run_throws_ok(
Kill => { stack => 'master' },
qr/Cannot kill the default stack/,
'Killing default stack throws exception'
);
# Is stack still there?
$t->stack_exists_ok('master');
}
#------------------------------------------------------------------------------
{
my $t = Pinto::Tester->new( init_args => { no_default => 1 } );
$t->no_default_stack_ok;
# Lock the master stack
$t->run_ok( Lock => { stack => 'master' } );
$t->stack_is_locked_ok('master');
# Try killing the locked stack
$t->run_throws_ok(
Kill => { stack => 'master' },
qr/is locked/,
'Killing locked stack throws exception'
);
# Is stack still there?
$t->stack_exists_ok('master');
# Try killing locked stack with force
$t->run_ok( Kill => { stack => 'master', force => 1 } );
# Is stack still there?
$t->stack_not_exists_ok('master');
}
#------------------------------------------------------------------------------
done_testing;