App-opan
view release on metacpan or search on metacpan
use strictures 2;
use Test::More;
use File::chdir;
use File::Temp qw(tempdir);
use Capture::Tiny qw(capture);
use IPC::System::Simple ();
use Mojo::File qw(path); sub slurp { path($_[0])->slurp }
use Import::Into;
my $test_cwd = $CWD;
delete @ENV{grep /^OPAN_/, keys %ENV};
my $tempdir = tempdir(CLEANUP => 1);
sub entries_for {
my ($pan) = @_;
App::opan::entries_from_packages_file($tempdir."/pans/${pan}/index");
}
sub App::opan::gmtime { 'TIME GOES HERE' }
subs->import::into('App::opan', 'gmtime');
my $app = require "./script/opan";
sub run {
local $CWD = $tempdir;
local $ENV{OPAN_MIRROR} = '/fakepan/';
my @args = @_;
my ($stdout, $stderr) = capture { $app->start(@args) };
diag("STDERR for ".join(' ', @args)." was\n".$stderr) if $stderr;
#is($stderr, '', 'No stderr output running '.join(' ', @args));
return $stdout;
}
$app->ua->server->app(my $fakepan = Mojolicious->new);
$fakepan->log->level('fatal');
$fakepan->routes->tap(sub {
$_[0]->get('/fakepan/modules/02packages.details.txt.gz' => sub {
$_[0]->render(data =>
scalar IPC::System::Simple::capture(
gzip => '-c', $test_cwd.'/t/fix/upstream.fragment'
)
);
});
foreach my $f (map "AAAAAAAAA-1.0${_}.tar.gz", qw(0 1)) {
$_[0]->get("/fakepan/authors/id/M/MS/MSCHWERN/${f}" => sub {
$_[0]->reply->asset(
Mojo::Asset::File->new(
path => $test_cwd.'/t/fix/'.$f
)
);
});
}
});
run('init');
is(
slurp($tempdir.'/pans/upstream/index'),
slurp('t/fix/upstream.fragment'),
'init fetch ok'
);
foreach my $pan (qw(pinset custom)) {
is(
slurp($tempdir."/pans/${pan}/index"),
slurp('t/fix/empty.index'),
"index for ${pan} initialized ok"
);
}
foreach my $pan (qw(nopin combined)) {
is_deeply(
entries_for('upstream'), entries_for($pan),
"index for ${pan} initialized ok"
);
}
my $aaa = slurp('t/fix/AAAAAAAAA-1.00.tar.gz');
( run in 2.784 seconds using v1.01-cache-2.11-cpan-5735350b133 )