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 Test::More;

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

#------------------------------------------------------------------------------
# TODO: What we really need here are tests that verify what happens when a dist
# has broken META (or no META at all).  To do that, we need to hand-roll some
# broken distribution archives and ship them along as test data
#------------------------------------------------------------------------------

my $t = Pinto::Tester->new;
$t->populate('AUTHOR/Foo-3 = Foo-4 & Bar~1; perl~5.6.0; strict');
my $dist = $t->get_distribution( author => 'AUTHOR', archive => 'Foo-3.tar.gz' );
ok defined $dist, 'Got the distribution back';

my $meta = $dist->metadata;
isa_ok $meta, 'CPAN::Meta';
is $meta->as_struct->{version}, '3', 'META has correct dist version';
is $meta->as_struct->{provides}->{Foo}->{version}, '4', 'META has correct package version';
is $meta->as_struct->{'meta-spec'}->{version}, '2', 'META has correct meta spec version';

my $prereqs = $meta->as_struct->{prereqs};
is $prereqs->{runtime}->{requires}->{Bar},    '1',      'Requires Bar~1';
is $prereqs->{runtime}->{requires}->{perl},   'v5.6.0', 'Requires perl~5.6.0';
is $prereqs->{runtime}->{requires}->{strict}, '0',      'Requires strict~0';

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

done_testing;