use strict;
use warnings;
use Test::More tests => 184;
BEGIN { use_ok('PAR::Repository') };
chdir('t') if -d 't';
use lib 'lib';
# requires 3 tests to boot
require RepoTest;
require RepoTest::TestKit;
#$RepoTest::Debug = 1;
my $tdir = RepoTest->TempDir;
my $repodir = File::Spec->catdir($tdir, 'repo');
chdir($tdir);
# create new repo, assert it's okay
ok(!RepoTest->RunParrepo('create'), 'parrepo create did not die');
ok(-d $repodir, 'parrepo create created a repo dir');
RepoTest->TestRepoFilesExist($repodir);
my $testDists = RepoTest->TestDists;
my $parfile = 'Test-Kit-0.02-any_arch-any_version.par';
my @test_kit = grep /\Q$parfile\E/, @$testDists;
ok(scalar(@test_kit) == 1, 'found exactly one Test-Kit dist for testing');
my $dependencies = {
$parfile => {
'Test::More' => '0',
'base' => '2.11',
'namespace::clean' => '0.08',
'Test::Differences' => '0',
},
};
diag("test injection and removal via parrepo");
ok(!RepoTest->RunParrepo('inject', '-f', $test_kit[0]), "parrepo didn't complain about injection");
RepoTest::TestKit->check_injection($parfile);
RepoTest::TestKit->check_symlinks();
RepoTest::TestKit->check_dependencies($dependencies);
ok(!RepoTest->RunParrepo('remove', '-f', $parfile), 'no error from remove');
RepoTest::TestKit->check_removal($parfile);
RepoTest::TestKit->check_symlinks();
RepoTest::TestKit->check_dependencies();
diag("now re-add it using the API");
my $repo = RepoTest->CanOpenRepo($repodir);
ok($repo->inject('file', $test_kit[0]), "api injection succeeded");
RepoTest::TestKit->check_injection($parfile);
RepoTest::TestKit->check_symlinks();
RepoTest::TestKit->check_dependencies($dependencies);
ok ($repo->remove(file => $parfile), 'no error from remove');
RepoTest::TestKit->check_removal($parfile);
RepoTest::TestKit->check_symlinks();
RepoTest::TestKit->check_dependencies();
RepoTest->ConvertSymlinks($repodir);
diag("now use the api slightly differently");
SCOPE: {
my $file = $parfile;
$file =~ s/any_version/5.8.5/ or die;
$file =~ s/any_arch/myarch/ or die;
my $mod_dependencies = {$file => $dependencies->{$parfile}};
ok($repo->inject('file' => $test_kit[0], arch => 'myarch', perlversion => '5.8.5'), "api injection succeeded");
RepoTest::TestKit->check_injection($file);
RepoTest::TestKit->check_symlinks();
RepoTest::TestKit->check_dependencies($mod_dependencies);
ok ($repo->remove(file => $file), 'no error from remove');
RepoTest::TestKit->check_removal($file);
RepoTest::TestKit->check_symlinks();
RepoTest::TestKit->check_dependencies();
}
undef $repo;
# make a new repo so it doesn't use fake_symlinks any more
use File::Path;
rmtree($repodir);
ok(!-d $repodir, 'directory does not exist');
ok(!RepoTest->RunParrepo('create'), 'parrepo create did not die');
ok(-d $repodir, 'parrepo create created a repo dir');
RepoTest->TestRepoFilesExist($repodir);
$repo = RepoTest->CanOpenRepo($repodir);
diag("now use the api with symlinks");
SCOPE: {
my $file = $parfile;
$file =~ s/any_version/5.8.5/ or die;
$file =~ s/any_arch/myarch/ or die;
my $file2 = $parfile;
$file2 =~ s/any_version/5.8.5/ or die;
my $mod_dependencies = {$file => $dependencies->{$parfile}};
ok($repo->inject('file' => $test_kit[0], arch => 'myarch', perlversion => '5.8.5', any_arch => 1), "api injection succeeded");
RepoTest::TestKit->check_injection([$file,$file2]);
RepoTest::TestKit->check_symlinks(
{ 'Test-Kit-0.02-myarch-5.8.5.par' => ['Test-Kit-0.02-any_arch-5.8.5.par'] }
);
RepoTest::TestKit->check_dependencies($mod_dependencies);
undef $repo;
RepoTest->ConvertSymlinks($repodir);
$repo = RepoTest->CanOpenRepo($repodir);
ok ($repo->remove(file => $file), 'no error from remove');
RepoTest::TestKit->check_removal($file);
RepoTest::TestKit->check_symlinks();
RepoTest::TestKit->check_dependencies();
}
undef $repo;
# make a new repo so it doesn't use fake_symlinks any more
use File::Path;
rmtree($repodir);
ok(!-d $repodir, 'directory does not exist');
ok(!RepoTest->RunParrepo('create'), 'parrepo create did not die');
ok(-d $repodir, 'parrepo create created a repo dir');
RepoTest->TestRepoFilesExist($repodir);
$repo = RepoTest->CanOpenRepo($repodir);
diag("test removal of symlink only");
SCOPE: {
my $file = $parfile;
$file =~ s/any_version/5.8.5/ or die;
$file =~ s/any_arch/myarch/ or die;
my $file2 = $parfile;
$file2 =~ s/any_arch/myarch/ or die;
my $mod_dependencies = {$file => $dependencies->{$parfile}};
ok($repo->inject('file' => $test_kit[0], arch => 'myarch', perlversion => '5.8.5', any_version => 1), "api injection succeeded");
RepoTest::TestKit->check_injection([$file,$file2]);
RepoTest::TestKit->check_symlinks(
{ 'Test-Kit-0.02-myarch-5.8.5.par' => ['Test-Kit-0.02-myarch-any_version.par'] }
);
RepoTest::TestKit->check_dependencies($mod_dependencies);
ok($repo->remove(file => $file2), 'removed symlink successfully');
undef $repo; # necessary so repository is updated!
RepoTest::TestKit->check_symlinks();
RepoTest::TestKit->check_dependencies($mod_dependencies);
RepoTest::TestKit->check_injection([$file]);
RepoTest->ConvertSymlinks($repodir);
$repo = RepoTest->CanOpenRepo($repodir);
ok ($repo->remove(file => $file), 'no error from remove');
RepoTest::TestKit->check_removal($file);
RepoTest::TestKit->check_symlinks();
RepoTest::TestKit->check_dependencies();
}