The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use Test::Spec;
use App::perlbrew;
use File::Temp 'tempdir';
use IO::All;

unless ($ENV{PERLBREW_DEV_TEST}) {
    plan skip_all => <<REASON;

This test invokes HTTP request to external servers and should not be ran in
blind. Whoever which to test this need to set PERLBREW_DEV_TEST env var to 1.

REASON
}

my $ua = App::perlbrew::http_user_agent_program();
note "User agent program = $ua";

describe "App::perlbrew::http_get function" => sub {
    my ($output);

    before all => sub {
        App::perlbrew::http_get(
            "http://get.perlbrew.pl",
            undef,
            sub { $output = $_[0]; }
        );
    };

    it "calls the callback to assign content to \$output", sub {
       ok defined($output) && length($output) > 0;
    };

    it "seems to download the correct content", sub {
        ok $output =~ m<\A #!/usr/bin/perl\n >x;
        ok $output =~ m< \$fatpacked{"App/perlbrew.pm"} >x;
    };
};

describe "App::perlbrew::http_download function, downloading the perlbrew-installer." => sub {
    my ($dir, $output, $download_error);

    before all => sub {
        $dir = tempdir( CLEANUP => 1 );
        $output = "$dir/perlbrew-installer";

        if (-f $output) {
            plan skip_all => <<REASON;

We created a temporary dir $dir for storing the downloaded content.
But somehow the target file name already exists before we start.
Therefore we cannot proceed the test.

REASON
        }

        my $download_error = App::perlbrew::http_download("http://install.perlbrew.pl", $output);
    };

    it "downloads to the wanted path" => sub {
        ok(-f $output);
    };

    it "seems to be downloading the right content" => sub {
        is(scalar(io($output)->getline), "#!/bin/sh\n");
    };
};

runtests unless caller;