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

use strict;
BEGIN {
	$|  = 1;
	$^W = 1;
}

use HTTP::Online ':skip_all';
use Test::More tests => 19;

use File::Spec      ();
use File::Remove    ();
use GitHub::Extract ();

# Set up the extract directory
use constant TO => 'data';
File::Remove::clear(TO);
ok( ! -d TO, 'Test directory cleared' );
mkdir(TO);
ok( -d TO, 'Test directory created' );





######################################################################
# Constructor and Accessors

my $github = GitHub::Extract->new(
	username   => 'adamkennedy',
	repository => 'PPI',
);
isa_ok( $github, 'GitHub::Extract' );
is( $github->username, 'adamkennedy', '->username' );
is( $github->repository, 'PPI', '->repository' );
is( $github->branch, 'master', '->branch defaults to master' );
is( $github->url, 'https://github.com/adamkennedy/PPI/zipball/master', '->url' );
isa_ok( $github->http, 'HTTP::Tiny' );
is( $github->archive, undef, '->archive undef before download' );
is( $github->archive_extract, undef, '->archive_extract undef before download' );





######################################################################
# Live Testing

my $result = $github->extract( to => TO );
ok( $result, $github->url );
ok( $github->archive, '->archive defined' );
ok( -f $github->archive, '->archive exists on disk' );
isa_ok( $github->archive_extract, 'Archive::Extract' );

ok( $github->extract_path, '->extract_path defined' );
ok( -d $github->extract_path, '->extract_path exists' );

my $files = $github->files;
is( ref($files), 'ARRAY', '->files returned an ARRAY reference' );
ok( scalar(@$files), 'Got at least one file' );

my @missing = grep {
	! -e File::Spec->catfile(TO, $_)
} @$files;
is( scalar(@missing), 0, 'Found all files' );