The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
BEGIN {
  unless ($ENV{REAL_AVATARS}) {
    $ENV{DEFAULT_AVATAR_URL}  = '/image/%s';
    $ENV{GRAVATAR_AVATAR_URL} = '/image/%s';
  }
}
use t::Helper;
use File::Spec ();
use Mojo::JSON;
use Mojo::DOM;

plan skip_all => '/tmp/convos is required' unless -d '/tmp' and -w '/tmp';

my %gif = map { $_ => Mojo::Util::slurp($t->app->home->rel_file("public/image/avatar-$_.gif")) } 404, 500;
my $fresh = $t->app->home->rel_file('/public/image/a0196c429a4c02c1cc96afed12a0ed0c');
my ($host, $port) = map { $t->ua->server->url->$_ } qw( host port );

unlink glob($fresh);
redis_do(
  [hmset => 'user:doe', digest => 'E2G3goEIb8gpw', email => ''],
  [zadd => 'user:doe:conversations', time, 'magnet:00:23convos', time - 1, 'magnet:00batman'],
  [sadd => 'user:doe:connections',   'magnet'],
  [hmset => 'user:doe:connection:magnet', 'nick' => 'doe', avatar => 'jhthorsen'],
);

{
  diag 'invalid request';
  $t->get_ok('/avatar?user=jhthorsen&host=convos.by')->status_is(200)->header_is('Content-Type', 'image/gif')
    ->content_is($gif{500}, 'Cannot discover avatar unless logged in');
  unlink glob('/tmp/convos/*');
}

{
  diag 'loopback avatar';
  redis_do([hset => 'convos:host2convos', '1.2.3.4' => 'loopback']);
  Mojo::Util::spurt('fresh', $fresh);
  $t->get_ok('/avatar?user=marcus&host=1.2.3.4')->status_is(200)->content_is('fresh', 'avatar from 3rd party');

  Mojo::Util::spurt('cached',
    File::Spec->catdir(File::Spec->tmpdir, 'convos/_image_a0196c429a4c02c1cc96afed12a0ed0c.jpg'));
  $t->get_ok('/avatar?user=marcus&host=1.2.3.4')->status_is(200)->content_is('cached', 'avatar from cache');
  unlink glob('/tmp/convos/*');
  unlink $fresh;
}

{
  diag 'login...';
  $t->post_ok('/login', form => {login => 'doe', password => 'barbar'})->status_is(302);
  $t->get_ok('/')->status_is(302)->header_is(Location => '/magnet/%23convos');
}

{
  local $TODO = 'Need to run WHOIS and figure out the real identity';
  $t->get_ok('/avatar?user=jhthorsen&host=convos.by')->status_is(302)
    ->header_is(Location => '/image/deebdae9dacaf91b89f9cb8bed87993e');
}

{
  diag 'custom loopback avatar';
  $fresh = $t->app->home->rel_file('/public/image/6f68bd7cac66e7333e083d94c96428e7');
  Mojo::Util::spurt('custom', $fresh);
  $t->get_ok('/avatar?user=doe&host=1.2.3.4')->status_is(200)->content_is('custom', 'custom loopback avatar');
  unlink $fresh;
}

{
  local $TODO = 'This test does not work, since it loops';
  diag 'remote avatar';
  redis_do([hset => 'convos:host2convos', '1.2.3.4' => " http : //$host : $port "]);
  $t->get_ok('/avatar?user=jhthorsen&host=1.2.3.4');
  unlink glob('/tmp/convos/*');
}

done_testing;