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 warnings;

use Test::More tests => 24;

my $Test_ID = 'meAMq7';
my $Image_extension = '.jpg';
my $Image_description = 'Bored Cat';

BEGIN {
    use_ok('Carp');
    use_ok('URI');
    use_ok('LWP::UserAgent');
    use_ok('File::Spec');
    use_ok('HTML::TokeParser::Simple');
    use_ok('Class::Data::Accessor');
	use_ok( 'WWW::ImagebinCa::Retrieve' );
}

diag( "Testing WWW::ImagebinCa::Retrieve $WWW::ImagebinCa::Retrieve::VERSION, Perl $], $^X" );

use WWW::ImagebinCa::Retrieve;
my $bin = WWW::ImagebinCa::Retrieve->new(timeout => 10);
isa_ok($bin,'WWW::ImagebinCa::Retrieve');
can_ok($bin, qw(new retrieve error page_id image_uri page_uri description
                where what full_info));

my $full_info = $bin->retrieve(
    what => $Test_ID,
    where => 't/',
    save_as => 'test',
);

SKIP: {
    unless ( defined $full_info ) {
        ok(
            defined $bin->error,
            'error() method must return an error message0',
        );
        diag "\n\n\nGot error (" . $bin->error . ") from retrieve(). "
                . "If the message says that page ID doesn't exist then"
                . " PLEASE send an email to zoffix\@cpan.org "
                . " saying that WWW::Imagebin::Retrieve needs "
                . " its test suite updated. Thank you!\n\n"
                . "---(sleeping for 10 seconds)\n\n\n\n";
        sleep 10;
        skip "Got error on retrieve()", 14;
    }
    is(
        $full_info->{what},
        $Test_ID,
        '{what} key',
    );
    is(
        $full_info->{what},
        $bin->what,
        '{what} and what() must match',
    );
    
    is(
        "$full_info->{page_id}",
        $Test_ID,
        '{page_id} contains ID of the page',
    );
    is(
        $full_info->{page_id},
        $bin->page_id,
        '{page_id} and ->page_id() must match',
    );

    isa_ok($full_info->{page_uri}, 'URI');
    is(
        "$full_info->{page_uri}",
        "http://imagebin.ca/view/$Test_ID.html",
        '{page_uri} must contain URI to the page',
    );
    is(
        $full_info->{page_uri},
        $bin->page_uri,
        '{page_uri} and ->page_uri must match',
    );

    isa_ok($full_info->{image_uri}, 'URI');
    can_ok($full_info->{image_uri}, qw(path_segments));
    is(
        "$full_info->{image_uri}",
        "http://imagebin.ca/img/$Test_ID$Image_extension",
        '{image_uri} must have direct URI to the image',
    );
    is(
        $full_info->{image_uri},
        $bin->image_uri,
        '{image_uri} and ->image_uri must match',
    );

    is(
        $full_info->{description},
        $Image_description,
        '{description} must contain the description of the image',
    );
    is(
        $full_info->{description},
        $bin->description,
        '{description} and ->description() must match',
    );
    
    like(
        $full_info->{where},
        qr{t[\\/]test$Image_extension},
        '{where} must contain the local location of the image',
    );
    is(
        $full_info->{where},
        $bin->where,
        '{where} and ->where() must match',
    );
}