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

use strict;
use warnings;

use Test::More;

BEGIN {
    eval { require Catalyst::Plugin::Session::State::Cookie; Catalyst::Plugin::Session::State::Cookie->VERSION(0.03) }
      or plan skip_all =>
      "Catalyst::Plugin::Session::State::Cookie 0.03 or higher is required for this test";

    eval { require Test::WWW::Mechanize::Catalyst }
      or plan skip_all =>
      "Test::WWW::Mechanize::Catalyst is required for this test";

    plan tests => 16;
}

use lib "t/lib";

use Test::WWW::Mechanize::Catalyst qw/DynamicExpiryApp/;

my $m = Test::WWW::Mechanize::Catalyst->new;

$m->get_ok("http://localhost/foo/counter");
$m->content_is( 1, "counter worked" );

$m->get_ok("http://localhost/foo/counter");
$m->content_is( 2, "counter worked" );

my $num_cookies = 0;
my $cookie_expires;

$m->cookie_jar->scan( sub {
    $num_cookies++;
    my ( $version, $key, $val, $path, $domain, $port, $path_spec, $secure, $expires, $discard, $hash ) = @_;
    $cookie_expires = $expires;
});

is( $num_cookies, 1, "one cookie" );
ok( defined($cookie_expires), "expiry time defined" );

$m->get_ok("http://localhost/foo/remember_me");
$m->content_is( 3, "counter worked" );

$num_cookies = 0;
my $long_cookie_expires;

$m->cookie_jar->scan( sub {
    $num_cookies++;
    my ( $version, $key, $val, $path, $domain, $port, $path_spec, $secure, $expires, $discard, $hash ) = @_;
    $long_cookie_expires = $expires;
});

is( $num_cookies, 1, "one cookie" );
ok( defined($long_cookie_expires), "expiry time defined" );

cmp_ok(
    ($long_cookie_expires - $cookie_expires),
    ">",
    60 * 60 * 24 * 360,
    "the difference between the expiry times is big",
);

$m->get_ok("http://localhost/foo/counter");
$m->content_is( 4, "counter worked" );

$num_cookies = 0;

$m->cookie_jar->scan( sub {
    $num_cookies++;
    my ( $version, $key, $val, $path, $domain, $port, $path_spec, $secure, $expires, $discard, $hash ) = @_;
    $long_cookie_expires = $expires;
});

is( $num_cookies, 1, "one cookie" );
ok( defined($long_cookie_expires), "expiry time defined" );

cmp_ok(
    ($long_cookie_expires - $cookie_expires),
    ">",
    60 * 60 * 24 * 360,
    "the difference between the expiry times is still big",
);