The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use strict;
use warnings;

use Path::Class;
use FindBin qw($Bin);
use URI::Escape qw(uri_escape);
use File::Temp qw(tempdir);
use IO::Zlib;

use Test::More;

use Package::Locator;

#------------------------------------------------------------------------------

my $found;
my $temp_dir  = tempdir(CLEANUP => 1);
my $repos_dir = dir($Bin)->as_foreign('Unix')->stringify() . '/repos';
my @repos_urls = map { URI->new("file://$repos_dir/$_") } qw(a b);

#------------------------------------------------------------------------------

my $locator = Package::Locator->new( repository_urls => \@repos_urls,
                                           cache_dir => $temp_dir );

$found = $locator->locate(package => 'Foo', version => 1.0);
is($found, "file://$repos_dir/a/authors/id/A/AU/AUTHOR/Foo-1.0.tar.gz", 'Located Foo-1.0');

$found = $locator->locate(package => 'Foo', version => 2.0);
is($found, "file://$repos_dir/b/authors/id/A/AU/AUTHOR/Foo-2.0.tar.gz", 'Located Foo-2.0');

for my $url (@repos_urls) {
    my $cache_file = file( $temp_dir, uri_escape($url), '02packages.details.txt.gz' );
    ok( -e $cache_file, "Cache file $cache_file exists" );

    # Erase contents of cache file.  But we still need the standard gzip header
    # or else there will be an exception when we try to open the file later.
    my $fh = IO::Zlib->new($cache_file->stringify, 'wb');
    print $fh '';
    close $fh;
}


$locator = Package::Locator->new( repository_urls => \@repos_urls,
                                        cache_dir => $temp_dir );

$found = $locator->locate(package => 'Foo', version => 1.0);
is($found, undef, 'Did not find Foo-1.0 in empty cache');

$found = $locator->locate(package => 'Foo', version => 2.0);
is($found, undef, 'Did not find Foo-2.0 in empty cache');

#------------------------------------------------------------------------------

done_testing();