CPAN-Mini-Inject

 view release on metacpan or  search on metacpan

t/inject.t  view on Meta::CPAN

use lib qw(t/lib);
use Local::utils;

my $class = 'CPAN::Mini::Inject';

my $temp_dir = File::Temp::tempdir(CLEANUP=>1);

=begin comment

C<remote> is the URL for the repo from which we'll download latest versions

C<local> is our MiniCPAN

C<repository> is the dir where we will keep the modules to inject

=end comment

=cut

subtest 'sanity' => sub {
	use_ok $class or BAIL_OUT( "Could not load $class: $@" );
	can_ok $class, 'new';
	isa_ok $class->new, $class;
	};

subtest 'setup directories in temp dir' => sub {
	my @dirs = (
		[ qw(modules) ],
		[ qw(authors) ],
		[ qw(injects) ],
		);

	foreach my $dir ( @dirs ) {
		my $path = catfile $temp_dir, @$dir;
		make_path( $path );
		ok -d $path, "Path for <@$dir> exists";
		}
	};

my $t_local = catfile qw(t local);
subtest 'check local dir' => sub {
	ok -d $t_local, 'local directory exists';
	};

subtest 'copy initial files' => sub {
	my $modules_base = catfile $temp_dir, 'modules';
	ok -d $modules_base, 'modules dir exists';

	my $authors_base = catfile $temp_dir, 'authors';
	ok -d $authors_base, 'authors dir exists';

	subtest 'packages' => sub {
		my $file = '02packages.details.txt.gz';
		my $destination = catfile $modules_base, $file;
		my $rc = copy(
		  catfile( $t_local, 'CPAN', 'modules', "$file.original" ),
		  $destination
		);
		ok $rc, 'File::Copy worked';
		ok -e $destination, 'Copied packages file to temp_dir';
		ok chmod(0666, $destination), 'chmod packages to 0666';
		};

	subtest 'mailrc' => sub {
		my $file = '01mailrc.txt.gz';
		my $destination   = catfile $authors_base, $file;
		my $rc = copy(
		  catfile( $t_local, "$file.original" ),
		  $destination
		);
		ok $rc, 'File::Copy worked';
		ok -e $destination, 'Copied mailrc file to temp_dir';
		ok chmod(0666, $destination), 'chmod mailrc to 0666';
		};
	};

sub get_module_details {
	my( $dist_sources ) = @_;
	my @modules = (
		{
		module   => 'CPAN::Mini::Inject',
		authorid => 'SSORICHE',
		version  => '0.01',
		file     => catfile( $dist_sources, 'CPAN-Mini-Inject-0.01.tar.gz' ),
		},
		{
		module   => 'CPAN::Mini::Inject',
		authorid => 'SSORICHE',
		version  => '0.02',
		file     => catfile( $dist_sources, 'CPAN-Mini-Inject-0.01.tar.gz' ),
		},
		{
		module   => 'CPAN::Mini',
		authorid => 'RJBS',
		version  => '0.17',
		file     => catfile( $dist_sources, 'CPAN-Mini-0.17.tar.gz' ),
		},
		);
	}

sub test_inject {
	my( $mcpi, @modules ) = @_;
	foreach my $module ( @modules ) {
		ok -e $module->{file}, "module file <$module->{file}> exists";
		$mcpi = $mcpi->add( %$module );
		}

	subtest 'writelist' => sub {
		ok $mcpi->writelist, 'inject modules';
		};

	subtest 'inject' => sub {
		ok $mcpi->inject( $ENV{TEST_VERBOSE} // 0 ), 'copy modules';
		};

	subtest 'packages' => sub {
		my $packages = catfile $temp_dir, 'modules', '02packages.details.txt.gz';
		ok -e $packages, '02packages exists';
		my $gz = gzopen($packages, 'rb');

		my $line;
		my $expected_lines;
		HEADER: while( $gz->gzreadline($line) > 0 ) {
			last HEADER if $line eq "\n";
			my $rc = like $line, qr/\A ([a-z-]+) : \x{20}+ (.*)/ix, 'header format is correct';
			if( $line =~ m/\A ([a-z-]+) : \x{20}+ (.*)/ix and $1 eq 'Line-Count') {
				$expected_lines = $2;
				}
			}

		my $count = 0;
		PACKAGES: while( $gz->gzreadline($line) > 0 ) {
			$count++;



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