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");
    
}