# -*- perl -*-
# t/006_refresh_list.t
use 5.010;
use CPAN::Mini::Visit::Simple;
use CPAN::Mini::Visit::Simple::Auxiliary qw(
create_minicpan_for_testing
create_one_new_distro_version
create_file
);
use Carp;
use File::Spec;
use Test::More;
require CPAN::Mini;
my $config_file = CPAN::Mini->config_file({});
if (! (defined $config_file and -e $config_file) ) {
plan skip_all => 'No .minicpanrc located';
}
my %config = CPAN::Mini->read_config;
if (! $config{local}) {
plan skip_all => "No 'local' setting in configuration file '$config_file'";
}
elsif (! (-d $config{local}) ) {
plan skip_all => 'minicpan directory not located';
}
else {
plan tests => 38;
}
{
my ($tdir, $author_dir) = create_minicpan_for_testing();
# Create object and get primary list
my $self = CPAN::Mini::Visit::Simple->new({
minicpan => $tdir,
});
isa_ok ($self, 'CPAN::Mini::Visit::Simple');
ok( $self->identify_distros(),
"identify_distros() returned true value" );
my $old_primary_list_ref = $self->get_list_ref();
create_one_new_distro_version($author_dir);
# We have now changed what is in our minicpan repository.
# We need to refresh what is in $old_primary_list_ref.
# (Since we did not use 'start_dir' or 'pattern' to create the old primary
# list, we will not provide those arguments to refresh_list().
my $refreshed_list_ref = $self->refresh_list( {
derived_list => $old_primary_list_ref,
} );
my $expected_list_ref = {
map { my $path = qq|$author_dir/$_|; $path => 1 } qw(
Alpha-Beta-0.01.tar.gz
Gamma-Delta-0.02.tar.gz
Epsilon-Zeta-0.04.tar.gz
)
};
is_deeply(
{ map { $_ => 1 } @{$refreshed_list_ref} },
$expected_list_ref,
"Got expected refreshed list"
);
}
{
my ($tdir, $author_dir) = create_minicpan_for_testing();
my $self = CPAN::Mini::Visit::Simple->new({ minicpan => $tdir });
isa_ok ($self, 'CPAN::Mini::Visit::Simple');
ok( $self->identify_distros(),
"identify_distros() returned true value" );
my $old_primary_list_ref = $self->get_list_ref();
create_one_new_distro_version($author_dir);
my $refreshed_list_ref;
eval {
$refreshed_list_ref = $self->refresh_list( { } );
};
like($@, qr/Need 'derived_list' whose value is list of distributions needing refreshment/,
"Got expected error message due to absence of 'derived_list' argument");
}
{
my ($tdir, $author_dir) = create_minicpan_for_testing();
my $self = CPAN::Mini::Visit::Simple->new({ minicpan => $tdir });
isa_ok ($self, 'CPAN::Mini::Visit::Simple');
ok( $self->identify_distros(),
"identify_distros() returned true value" );
my $old_primary_list_ref = $self->get_list_ref();
create_one_new_distro_version($author_dir);
my $refreshed_list_ref;
eval {
$refreshed_list_ref = $self->refresh_list( { derived_list => {} } );
};
like($@, qr/Value of 'derived_list' must be array reference/,
"Got expected error message due to bad 'derived_list' argument");
}
{
my ($tdir, $author_dir) = create_minicpan_for_testing();
my $self = CPAN::Mini::Visit::Simple->new({ minicpan => $tdir });
isa_ok ($self, 'CPAN::Mini::Visit::Simple');
ok( $self->identify_distros(),
"identify_distros() returned true value" );
my $old_primary_list_ref = $self->get_list_ref();
# Create a stray item in the derived_list. Since it is not found in the
# minicpan, it should not be included in the list generated by the
# operation of refresh_list().
my $stray = File::Spec->catfile( $author_dir, 'Iota-Kappa-0.06.tar.gz' );
push @{$old_primary_list_ref}, $stray;
my $refreshed_list_ref = $self->refresh_list( {
derived_list => $old_primary_list_ref,
} );
my $expected_list_ref = {
map { my $path = qq|$author_dir/$_|; $path => 1 } qw(
Alpha-Beta-0.01.tar.gz
Gamma-Delta-0.02.tar.gz
Epsilon-Zeta-0.03.tar.gz
)
};
is_deeply(
{ map { $_ => 1 } @{$refreshed_list_ref} },
$expected_list_ref,
"Got expected refreshed list"
);
}