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 FindBin;
use lib "$FindBin::Bin/lib";
use Test::More;
use File::Path;


BEGIN {
    my $reason;
    eval "use Catalyst::Plugin::I18N";
    $reason .= 'Needs Catalyst::Plugin::I18N for this test. ' if $@;

    eval "use Catalyst::Plugin::Cache::FileCache";
    $reason .= 'Needs Catalyst::Plugin::Cache::FileCache for testing.' if $@;

    plan $reason
        ? ( skip_all => $reason )
        : ( tests => 25 );
}

# remove previous cache
rmtree 't/var' if -d 't/var';

use Catalyst::Test 'TestAppI18N';

run_tests();

sub run_tests {
# cache a page localized for a language
    {
        my $expected = 'hello 1';
        my $request  =
            HTTP::Request->new( GET => 'http://localhost:3000/cache/count' );

        $request->header( 'Accept-Language' => 'en' );

        ok( my $response = request($request), 'Request' );
        ok( $response->is_success, 'Response Successful 2xx' );
        is( $response->code, 200, 'Response Code' );

        is( $response->content, $expected, 'content is "hello 1"' );

    }
    
# request the same page with same language
    {
        my $expected = 'hello 1';
        my $request  =
            HTTP::Request->new( GET => 'http://localhost:3000/cache/count' );

        $request->header( 'Accept-Language' => 'en' );

        ok( my $response = request($request), 'Request' );
        ok( $response->is_success, 'Response Successful 2xx' );
        is( $response->code, 200, 'Response Code' );

        is( $response->content, $expected, 'Content still "hello 1" from cache' );

    }

# request same page, different language.
    {
        my $expected = 'hola 2';
        my $request  =
            HTTP::Request->new( GET => 'http://localhost:3000/cache/count' );

        $request->header( 'Accept-Language' => 'es' );

        ok( my $response = request($request), 'Request' );
        ok( $response->is_success, 'Response Successful 2xx' );
        is( $response->code, 200, 'Response Code' );

        is( $response->content, $expected, 'Content is "hola 2"' );

    }

# request the same page with same language different from first...
    {
        my $expected = 'hola 2';
        my $request  =
            HTTP::Request->new( GET => 'http://localhost:3000/cache/count' );

        $request->header( 'Accept-Language' => 'es' );

        ok( my $response = request($request), 'Request' );
        ok( $response->is_success, 'Response Successful 2xx' );
        is( $response->code, 200, 'Response Code' );

        is( $response->content, $expected, 'Content still "hola 2" from cache' );

    }

# clearing the cached page should affect *both* languages
    {
        my $request = 
            HTTP::Request->new( GET => 'http://localhost:3000/cache/clear_cache' );
        ok( my $response = request($request), 'request ok' );
    }

# the previous request to clear_cache also incremented the counter so we skip that one.

# first ask for a fresh copy for 'en'
    {
        my $expected = 'hello 4';
        my $request  =
            HTTP::Request->new( GET => 'http://localhost:3000/cache/count' );

        $request->header( 'Accept-Language' => 'en' );

        ok( my $response = request($request), 'Request' );
        ok( $response->is_success, 'Response Successful 2xx' );
        is( $response->code, 200, 'Response Code' );

        is( $response->content, $expected, 'content is "hello 4"' );

    }

# next ask for a fresh copy for 'es'
    {
        my $expected = 'hola 5';
        my $request  =
            HTTP::Request->new( GET => 'http://localhost:3000/cache/count' );

        $request->header( 'Accept-Language' => 'es' );

        ok( my $response = request($request), 'Request' );
        ok( $response->is_success, 'Response Successful 2xx' );
        is( $response->code, 200, 'Response Code' );

        is( $response->content, $expected, 'content is "hola 5"' );

    }
}