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 File::Copy;
use Path::Class;
use Test::More;

use lib 't/lib';
use Pinto::Tester;
use Pinto::Tester::Util qw(make_dist_archive);

use Pinto::Util qw(sha256);

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

subtest 'Excluding with exact match' => sub {

    my $t       = Pinto::Tester->new;
    my $archive = make_dist_archive('Foo-Bar-0.01 = Foo~0.01; Bar~0.01');
    $t->run_ok( Add => { archives => $archive, no_index => ['Foo'] } );

    $t->registration_not_ok("AUTHOR/Foo-Bar-0.01/Foo~0.01/master");
    $t->registration_ok("AUTHOR/Foo-Bar-0.01/Bar~0.01/master");

    my $dist = $t->get_distribution( path => 'A/AU/AUTHOR/Foo-Bar-0.01.tar.gz' );
    my @pkgs = $dist->packages;

    is( scalar @pkgs,   1,     "Dist $dist has only one package" );
    is( $pkgs[0]->name, 'Bar', "Remaining package is Bar" );

};

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

subtest 'Excluding with regexes' => sub {

    my $t       = Pinto::Tester->new;
    my $archive = make_dist_archive('Foo-Bar-0.01 = Foo~0.01; Bar~0.01; Baz~0.01');
    $t->run_ok( Add => { archives => $archive, no_index => [ '/F', '/r' ] } );

    $t->registration_not_ok("AUTHOR/Foo-Bar-0.01/Foo~0.01/master");
    $t->registration_not_ok("AUTHOR/Foo-Bar-0.01/Bar~0.01/master");
    $t->registration_ok("AUTHOR/Foo-Bar-0.01/Baz~0.01/master");

    my $dist = $t->get_distribution( path => 'A/AU/AUTHOR/Foo-Bar-0.01.tar.gz' );
    my @pkgs = $dist->packages;

    is( scalar @pkgs,   1,     "Dist $dist has only one package" );
    is( $pkgs[0]->name, 'Baz', "Remaining package is Baz" );
};

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

subtest 'Excluding all packages in the dist' => sub {

    my $t       = Pinto::Tester->new;
    my $archive = make_dist_archive('Foo-0.01 = Foo~0.01');
    $t->run_throws_ok(
        Add => { archives => $archive, no_index => ['/o'] },
        qr/has no packages left/, 'Cannot exclude all packages'
    );
};

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

done_testing;