The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 13;

use CPAN::Mini::Inject;
use File::Path;

mkdir( 't/local/MYCPAN' );

my $mcpi;
$mcpi = CPAN::Mini::Inject->new;
$mcpi->loadcfg( 't/.mcpani/config' )->parsecfg;

$mcpi->add(
  module   => 'CPAN::Mini::Inject',
  authorid => 'SSORICHE',
  version  => '0.01',
  file     => 't/local/mymodules/CPAN-Mini-Inject-0.01.tar.gz'
 )->add(
  #module   => 'Dist::Metadata::Test::MetaFile',
  authorid => 'RWSTAUNER',
  #version  => '2.1',
  file     => 't/local/mymodules/Dist-Metadata-Test-MetaFile-2.2.tar.gz'
 )->add(
  module   => 'Dist::Metadata::Test::MetaFile',
  authorid => 'RWSTAUNER',
  version  => '2.3', # package versions do not match this
  file     => 't/local/mymodules/Dist-Metadata-Test-MetaFile-2.2.tar.gz'
 )->add(
  authorid => 'RWSTAUNER',
  file     => 't/local/mymodules/Dist-Metadata-Test-MetaFile-Only.tar.gz'
 );

my $auth_path = File::Spec->catfile( 'R', 'RW', 'RWSTAUNER' );
is( $mcpi->{authdir}, $auth_path, 'author directory' );

foreach $dist ( qw(
  t/local/MYCPAN/authors/id/S/SS/SSORICHE/CPAN-Mini-Inject-0.01.tar.gz
  t/local/MYCPAN/authors/id/R/RW/RWSTAUNER/Dist-Metadata-Test-MetaFile-2.2.tar.gz
  t/local/MYCPAN/authors/id/R/RW/RWSTAUNER/Dist-Metadata-Test-MetaFile-Only.tar.gz
) ) {
  ok( -r $dist, "Added module '$dist' is readable" );
}

foreach $line (
  'CPAN::Mini::Inject                 0.01  S/SS/SSORICHE/CPAN-Mini-Inject-0.01.tar.gz',
  'Dist::Metadata::Test::MetaFile::PM  2.0  R/RW/RWSTAUNER/Dist-Metadata-Test-MetaFile-2.2.tar.gz',
  'Dist::Metadata::Test::MetaFile      2.1  R/RW/RWSTAUNER/Dist-Metadata-Test-MetaFile-2.2.tar.gz',
  'Dist::Metadata::Test::MetaFile::DiffName 0.02  R/RW/RWSTAUNER/Dist-Metadata-Test-MetaFile-Only.tar.gz',
) {
  ok( grep( /$line/, @{ $mcpi->{modulelist} } ), 'Module added to list' )
    or diag explain [$line, $mcpi->{modulelist}];

  my $pack = ($line =~ /^(\S+)/)[0];
  is( grep( /^$pack\s+/, @{ $mcpi->{modulelist} } ),
    1, 'Module added to list just once' );
}

is_deeply(
  [$mcpi->added_modules],
  [
    { file => 'CPAN-Mini-Inject-0.01.tar.gz', authorid => 'SSORICHE', modules => {'CPAN::Mini::Inject' => '0.01'} },
    { file => 'Dist-Metadata-Test-MetaFile-2.2.tar.gz', authorid => 'RWSTAUNER',
      modules => { 'Dist::Metadata::Test::MetaFile::PM' => '2.0', 'Dist::Metadata::Test::MetaFile' => '2.1' } },
    # added twice (bug in usage not in reporting)
    { file => 'Dist-Metadata-Test-MetaFile-2.2.tar.gz', authorid => 'RWSTAUNER',
      modules => { 'Dist::Metadata::Test::MetaFile::PM' => '2.0', 'Dist::Metadata::Test::MetaFile' => '2.1' } },
    { file => 'Dist-Metadata-Test-MetaFile-Only.tar.gz', authorid => 'RWSTAUNER',
      modules => {'Dist::Metadata::Test::MetaFile::DiffName' => '0.02'} },
  ],
  'info for added modules'
);

rmtree( 't/local/MYCPAN', 0, 1 );