#!/usr/bin/perl
use strict;
use warnings;
use lib "t/lib";
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 => 46;
}
use Test::WWW::Mechanize::Catalyst "RewritingTestApp";
foreach my $use_cookies (1, 0) {
my $m = Test::WWW::Mechanize::Catalyst->new( $use_cookies ? () : ( cookie_jar => undef ) );
$m->get_ok( "http://localhost/first_request", "initial request" );
$m->content_like( qr/counter: 1\b/, "counter at 1" );
my $second = $m->find_link( text => "second");
# the first request *always* gets rewritten links because we don't know if the UA supports cookies yet
like( $second->URI, qr{/-/}, "uri was rewritten for first request" );
$m->follow_link_ok( { text => "second" }, "go to second page" );
$m->content_like( qr/counter: 2\b/, "counter at 2" );
my $third = $m->find_link( text => "third" );
if ( $use_cookies) {
unlike( $third->URI, qr{/-/}, "uri has not been rewritten because a cookie was sent" );
} else {
like( $third->URI, qr{/-/}, "uri was rewritten" );
}
$m->follow_link_ok( { text => "third" }, "go to third page" );
$m->content_like( qr/counter: 3\b/, "counter at 3" );
no warnings 'redefine', 'once';
local *Test::WWW::Mechanize::redirect_ok = sub { 0 };
$m->get( "http://localhost/redirect", "got redirect" );
my $resp = $m->response;
is( $resp->code, 302, "got a 302 response" );
unless ($use_cookies) {
like( $resp->header("Location"), qr{/-/.+$},
"Location header has session id with redirect" );
}
$m->get( "http://localhost/only_rewrite_redirect", "got redirect" );
$resp = $m->response;
is( $resp->code, 302, "got a 302 response" );
unless ($use_cookies) {
like( $resp->header("Location"), qr{/-/.+$},
"Location header has session id with redirect and rewrite_redirect true" );
}
$m->get( "http://localhost/dont_rewrite_redirect", "got redirect" );
$resp = $m->response;
is( $resp->code, 302, "got a 302 response" );
unlike( $resp->header("Location"), qr{/-/.+$},
"Location header does not have session id with redirect and rewrite_redirect false" );
unless ($use_cookies) {
$m->get_ok( "http://localhost/only_rewrite_body", "get only_rewrite_body" );
my $third = $m->find_link( text => "third" );
like( $third->URI, qr{/-/},
"body uri was rewritten" );
$m->get_ok( "http://localhost/dont_rewrite_body", "get dont_rewrite_body" );
$third = $m->find_link( text => "third" );
unlike( $third->URI, qr{/-/},
"body uri was not rewritten" );
}
}
{
my $m = Test::WWW::Mechanize::Catalyst->new( cookie_jar => undef );
$m->get_ok("http://localhost/text_request?plain=0", "get text req as non plaintext");
$m->content_like( qr/counter: 42\b/, "counter in body" );
$m->content_like( qr{/-/}, "body rewritten" );
$m->get_ok("http://localhost/text_request?plain=1", "get text req as plain text");
$m->content_like( qr/counter: 42\b/, "counter in body" );
$m->content_unlike( qr{/-/}, "body not rewritten because of wrong content type" );
}