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

use strict;
use warnings;
use autodie;

use FindBin;
use Test::More;
use Test::WWW::Mechanize::Catalyst;
use File::Spec;
use lib "$FindBin::Bin/../lib", "$FindBin::Bin/lib";
my $root = File::Spec->catfile($FindBin::Bin,qw{lib TestApp root});
mkdir $root unless -e $root;

my $mech = Test::WWW::Mechanize::Catalyst->new(catalyst_app => 'TestApp');
$mech->get_ok('/test', 'get works when uncached');
$mech->content_is('big fat output', '... and the output is correct');
ok stat File::Spec->catfile($root, 'foo.txt'), '... and the file is cached as expected';
$mech->get_ok('/test', 'get works when cached');
$mech->content_is('big fat output', '... and the output is still correct');
use Catalyst::Test 'TestApp';
{
   action_redirect('/test', '... and it is done with a redirect');
   content_like('/test', qr{href="/foo\.txt"}, '... and it redirects to the right place');
   get('/test2'); #prime the pump
   content_like('/test2', qr{href="/static/foo\.txt"}, 'action redirects to the right place with a more complex config');
   ok stat File::Spec->catfile($root, 'bar.txt'), '... and the file is cached as expected, in the configured location';
};
done_testing;

END {
   # for some reason unlinking doesn't work for tmp files in windows
   unless ($^O eq 'Win32') {
      my ($f1, $f2) = map File::Spec->catfile($root, "$_.txt"), qw(foo bar);
      unlink $f1 if -e $f1;
      unlink $f2 if -e $f2;
      rmdir $root if -e $root;
   }
}