use strict;
use warnings;
use Test::More tests => 11;
use Test::Exception;
use HTTP::Session;
use HTTP::Session::Store::Test;
use HTTP::Session::State::Cookie;
use HTTP::Response;
use HTTP::Request;
use HTTP::Headers;
use CGI;
my $store = HTTP::Session::Store::Test->new(
data => {
bar => {}
}
);
sub {
local %ENV = (
HTTP_COOKIE => 'http_session_sid=bar; path=/;',
);
my $session = HTTP::Session->new(
store => $store,
state => HTTP::Session::State::Cookie->new(),
request => CGI->new
);
is $session->session_id(), 'bar';
my $res = HTTP::Response->new(200, 'foo');
$session->response_filter($res);
is $res->header('Set-Cookie'), 'http_session_sid=bar; path=/';
}->();
sub {
my $session = HTTP::Session->new(
store => $store,
state => HTTP::Session::State::Cookie->new(),
request => HTTP::Request->new(
'GET',
'/',
HTTP::Headers->new(
Cookie => 'http_session_sid=bar; path=/;',
),
),
);
is $session->session_id(), 'bar';
}->();
sub {
local $ENV{HTTP_COOKIE} = '';
my $session = HTTP::Session->new(
store => $store,
state => HTTP::Session::State::Cookie->new(),
request => CGI->new
);
like $session->session_id(), qr/^[a-z0-9]{32}$/, 'cookie not found';
}->();
sub {
local $ENV{HTTP_COOKIE} = 'foo_sid=bar; path=/admin/;';
my $session = HTTP::Session->new(
store => $store,
state => HTTP::Session::State::Cookie->new(
name => 'foo_sid',
path => '/admin/',
domain => 'example.com',
),
request => CGI->new
);
is $session->session_id, 'bar';
my $res = HTTP::Response->new(200, 'foo');
$session->response_filter($res);
is $res->header('Set-Cookie'), 'foo_sid=bar; domain=example.com; path=/admin/';
}->();
sub {
local $ENV{HTTP_COOKIE} = 'foo_sid=bar; path=/admin/;';
my $session = HTTP::Session->new(
store => $store,
state => HTTP::Session::State::Cookie->new(
expires => '+1M',
name => 'foo_sid',
),
request => CGI->new
);
is $session->session_id, 'bar';
{
my $res = HTTP::Response->new(200, 'foo');
$session->response_filter($res);
like $res->header('Set-Cookie'), qr!foo_sid=bar; path=/; expires=[A-Z][a-z]{2}, \d+-[A-Z][a-z]{2}-\d{4} \d\d:\d\d:\d\d GMT!;
}
{
my $res = HTTP::Response->new(200, 'foo');
$session->header_filter($res);
like $res->header('Set-Cookie'), qr!foo_sid=bar; path=/; expires=[A-Z][a-z]{2}, \d+-[A-Z][a-z]{2}-\d{4} \d\d:\d\d:\d\d GMT!;
}
}->();
sub {
local $ENV{HTTP_COOKIE} = 'foo_sid=bar; path=/admin/;';
my $session = HTTP::Session->new(
store => $store,
state => HTTP::Session::State::Cookie->new(),
request => CGI->new
);
throws_ok {$session->state->response_filter() } qr/missing session_id/;
}->();
sub {
local $ENV{HTTP_COOKIE} = 'foo_sid=bar; path=/admin/;';
my $session = HTTP::Session->new(
store => $store,
state => HTTP::Session::State::Cookie->new(),
request => CGI->new
);
is $session->html_filter('foo'), 'foo', 'html_filter';
}->();