The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package RepoTest::TestKit;
use strict;
use warnings;

require Test::More;
require File::Spec;

####################
sub check_injection {
  my $class = shift;
  my $files = shift;
  die if not defined $files;
  $files = [$files] if not ref($files);
  my $repodir = shift || File::Spec->catdir(RepoTest->TempDir, 'repo');

  foreach my $file (@$files) {
    my ($dn, $dv, $arch, $pv) = PAR::Dist::parse_dist_name($file);
    Test::More::ok(
      -e File::Spec->catfile($repodir, $arch, $pv, $file),
      "par '$file' was injected"
    );
  }

  # test whether the stuff is in the repository now
  my $repo = RepoTest->CanOpenRepo($repodir);
  my $result = {@{$repo->query_module(regex => '^Test::Kit$')}};
  my $expect = {map {($_, '0.02')} @$files};
  Test::More::is_deeply(
    $result, $expect
  );
  #use Data::Dumper; warn Dumper $result;
  #use Data::Dumper; warn Dumper $expect;

  $result = {@{$repo->query_dist(regex => '^Test-Kit')}};
  $expect = {map {($_,
      {
        'Test::Kit' => '0.02',
        'Test::Kit::Result' => '0.02',
        'Test::Kit::Features' => '0.02',
      },
      )} @$files
  };
  Test::More::is_deeply(
    $result, $expect, 'provides matches'
  );

}

####################
sub check_symlinks {
  my $class = shift;
  my $symlinks = shift || {};
  my $repodir = shift || File::Spec->catdir(RepoTest->TempDir, 'repo');

  my $repo = RepoTest->CanOpenRepo($repodir);

  my ($dbm) = $repo->symlinks_dbm();
  my $copy = tied(%$dbm)->export(); # don't do this at home;
  Test::More::is_deeply(
    $copy,
    $symlinks,
    'symlinks match'
  );
}

####################
sub check_dependencies {
  my $class = shift;
  my $deps  = shift || {};
  my $repodir = shift || File::Spec->catdir(RepoTest->TempDir, 'repo');

  my $repo = RepoTest->CanOpenRepo($repodir);

  my ($dbm) = $repo->dependencies_dbm();
  my $copy = tied(%$dbm)->export(); # don't do this at home;
  Test::More::is_deeply(
    $copy,
    $deps,
    'dependencies match'
  );
}


####################
sub check_removal {
  my $class = shift;
  my $file = shift;
  die if not defined $file;
  my $repodir = shift || File::Spec->catdir(RepoTest->TempDir, 'repo');

  my ($dn, $dv, $arch, $pv) = PAR::Dist::parse_dist_name($file);

  my $repo = RepoTest->CanOpenRepo($repodir);
  Test::More::ok(
    !-f File::Spec->catfile($repodir, $arch, $pv, $file),
    'par was removed'
  );
  Test::More::is_deeply(
    $repo->query_module(regex => '^Test::Kit$'),
    [],
  );
  Test::More::is_deeply(
    $repo->query_dist(regex => '^Test-Kit'),
    []
  );
}

1;