The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#!perl
use strict;
use lib 't/lib';
use Pinto::Tester::Util qw(make_dist_archive);
#------------------------------------------------------------------------------
subtest 'rename master stack' => sub {
my $t = Pinto::Tester->new;
my $archive = make_dist_archive('Dist-1=PkgA~1');
# Put archive on the master stack.
$t->run_ok( Add => { archives => $archive, author => 'JOHN', recurse => 0 } );
$t->registration_ok('JOHN/Dist-1/PkgA~1/master');
# Rename the master stack.
$t->run_ok( Rename => { stack => 'master', to_stack => 'dev' } );
$t->registration_ok('JOHN/Dist-1/PkgA~1/dev');
# Can't use old stack name any more
throws_ok { $t->pinto->repo->get_stack('master') } qr/does not exist/;
# Renamed stack should still be the default
$t->stack_is_default_ok( 'dev', 'after renaming stack' );
# Check the filesystem
$t->path_not_exists_ok( [qw(stacks master)] );
$t->path_exists_ok( [qw(stacks dev modules 02packages.details.txt.gz)] );
$t->path_exists_ok( [qw(stacks dev modules 03modlist.data.gz)] );
$t->path_exists_ok( [qw(stacks dev authors 01mailrc.txt.gz)] );
};
#------------------------------------------------------------------------------
subtest 'compare stacks' => sub {
my $t = Pinto::Tester->new;
$t->path_exists_ok( [qw(stacks master)] );
#$t->path_not_exists_ok( [qw(stacks MASTER)] );
my $master = $t->get_stack('master');
$t->run_ok( Rename => { stack => 'master', to_stack => 'MASTER' } );
my $MASTER = $t->get_stack('master');
$t->path_exists_ok( [qw(stacks MASTER)] );
#$t->path_not_exists_ok( [qw(stacks master)] );
is($master->id, $MASTER->id, 'Stacks are the same')
};
#------------------------------------------------------------------------------
subtest 'rename non-existant stack' => sub {
my $t = Pinto::Tester->new;
$t->run_throws_ok(
Rename => { stack => 'bogus', to_stack => 'whatever' },
qr/does not exist/, 'Cannot rename non-existant stack'
);
$t->run_ok( New => { stack => 'existing' } );
$t->run_throws_ok(
Rename => { stack => 'master', to_stack => 'existing' },
qr/already exists/, 'Cannot rename to stack that already exists'
);
$t->run_throws_ok(
Rename => { stack => 'existing', to_stack => 'existing' },
qr/already exists/, 'Cannot rename to stack to itself'
);
};
#------------------------------------------------------------------------------
done_testing;