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

# For more info on why these tests are important, see RT #56757 and RT #5705

use strict;
use warnings;
use lib 't';

use Find::Lib;
use File::Spec;
use Path::Class qw(file);
use Test::More tests => 64;
use TestCache;

BEGIN {
    use_ok('WWW::Mechanize::Cached');
}

my $cache = TestCache->new();
isa_ok( $cache, 'TestCache' );

my $mech = WWW::Mechanize::Cached->new( cache => $cache, autocheck => 1, );
isa_ok( $mech, 'WWW::Mechanize::Cached' );

ok(
    !$mech->ref_in_cache_key,
    "Referring URLs in cache key disabled by default"
);

my @iter = ( 1 .. 10 );
foreach my $i (@iter) {
    $mech->get( page_url($i) );
    cmp_ok( $mech->content, '==', $i, "page $i has correct content" );
    ok( !$mech->is_cached, "page $i NOT in cache" );
}

check_cache(@iter);

diag("reversing page order");

check_cache( reverse @iter );

sub check_cache {

    my @pages = @_;
    foreach my $i (@pages) {
        $mech->get( page_url($i) );
        cmp_ok(
            $mech->content, 'eq', 'DUMMY',
            "page $i has correct content"
        );
        ok( $mech->is_cached, "page $i IS in cache" );
    }
}

sub page_url {

    my $i      = shift;
    my $prefix = 'file://';
    $prefix .= '/' if $^O =~ m{Win};
    return $prefix
        . File::Spec->catfile( Find::Lib::base(), 'pages', "$i.html" );

}