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

use strict;
use warnings;

use File::Spec;
use File::Temp qw(tempdir);

use lib File::Spec->catdir(File::Spec->curdir(), "t", "lib");

use Test::More tests => 5;

use XML::Grammar::ProductsSyndication::Mock;

use XML::Grammar::ProductsSyndication;

my $ps = XML::Grammar::ProductsSyndication->new(
    {
        'source' =>
        {
            'file' =>
                File::Spec->catfile(
                    "t", "data", "valid-xmls", "images-test.xml"
                ),
        },
        'data_dir' => File::Spec->catdir("blib", "extradata"),
    },
);

# Fails on some places due to "t" being read-only sometimes.
#
# my $images_dir = File::Spec->catdir(File::Spec->curdir(), "t", "output", "images");
#
# This should work better.
my $images_dir = tempdir ( CLEANUP => 1);

sub get_jpgs
{
    my $images_fh;
    opendir $images_fh, $images_dir;
    my @files = (grep { !(($_ eq ".") || ($_ eq "..")) } readdir($images_fh));
    closedir ($images_fh);
    return [sort { $a cmp $b } grep { /\.jpg$/ } @files];
}

sub cleanup
{
    foreach my $f (@{get_jpgs()})
    {
        unlink File::Spec->catfile($images_dir, $f);
    }
}

sub name_file
{
    my $args = shift;

    return File::Spec->catfile($images_dir, $args->{'id'} . ".jpg");
}

cleanup();

$ps->update_cover_images(
    {
        'size' => "l",
        'resize_to' => { 'width' => 100, 'height' => 100 },
        'name_cb' => \&name_file,
        'amazon_token' => "Foobar",
        'amazon_associate' => "shlomifishhom-20",
    }
);

# TEST
is_deeply (
    \@XML::Amazon::got_new_params,
    [
        [ token => "Foobar", associate => "shlomifishhom-20", ],
    ],
    "Testing for init of XML::Amazon",
);

# TEST
is_deeply (
    \@LWP::UserAgent::got_get_params,
    [
        [ "http://www.amazon.com/image-for/size=l/asin=0451529308/" ],
        [ "http://www.amazon.com/image-for/size=l/asin=014036711X/"],
        [ "http://www.amazon.com/image-for/size=l/asin=0596000278/"],
    ],
    "Testing for fetching the URLs.",
);

# TEST
is_deeply(
    get_jpgs(),
    [ qw(
        around_the_world_in_80_days.jpg
        little_women.jpg
        programming_perl.jpg
        ) 
    ],
    "Testing for the existence of the jpegs",
);

@LWP::UserAgent::got_get_params = ();

$ps->update_cover_images(
    {
        'size' => "l",
        'resize_to' => { 'width' => 100, 'height' => 100 },
        'name_cb' => \&name_file,
        'amazon_token' => "Foobar",
        'amazon_associate' => "shlomifishhom-20",
    }
);


# TEST
is_deeply (
    \@LWP::UserAgent::got_get_params,
    [
    ],
    "Testing for not fetching the URLs upon update.",
);


$ps->update_cover_images(
    {
        'size' => "l",
        'resize_to' => { 'width' => 100, 'height' => 100 },
        'name_cb' => \&name_file,
        'amazon_token' => "Foobar",
        'amazon_associate' => "shlomifishhom-20",
        'overwrite' => 1,
    }
);

# TEST
is_deeply (
    \@LWP::UserAgent::got_get_params,
    [
        [ "http://www.amazon.com/image-for/size=l/asin=0451529308/" ],
        [ "http://www.amazon.com/image-for/size=l/asin=014036711X/"],
        [ "http://www.amazon.com/image-for/size=l/asin=0596000278/"],
    ],
    "Testing for overwriting the files.",
);

cleanup();