Version 0.16.
[catagits/Catalyst-Plugin-Session-State-Cookie.git] / t / basic.t
CommitLineData
1a776a0c 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
8bdcbb46 6use Test::More tests => 13;
1a776a0c 7
b6fda7bb 8use Catalyst::Plugin::Session;
9
1a776a0c 10my $m;
11BEGIN { use_ok( $m = "Catalyst::Plugin::Session::State::Cookie" ) }
12
679f4a58 13my $cookie_meta = Class::MOP::Class->create_anon_class( superclasses => ['Moose::Object'] );
14my $cookie = $cookie_meta->name->new;
15$cookie_meta->add_method( value => sub { "the session id" } );
1a776a0c 16
679f4a58 17my $req_meta = Class::MOP::Class->create_anon_class( superclasses => ['Moose::Object'] );
1a776a0c 18my %req_cookies;
679f4a58 19$req_meta->add_method( cookies => sub { \%req_cookies } );
20my $req = $req_meta->name->new;
1a776a0c 21
679f4a58 22my $res_meta = Class::MOP::Class->create_anon_class( superclasses => ['Moose::Object'] );
1a776a0c 23my %res_cookies;
679f4a58 24my $cookies_called = 0;
25$res_meta->add_method( cookies => sub { $cookies_called++; \%res_cookies });
26my $res = $res_meta->name->new;
27
b6fda7bb 28my $cxt_meta = Class::MOP::Class->create_anon_class(
29 superclasses => [qw/
30 Catalyst::Plugin::Session
31 Catalyst::Plugin::Session::State::Cookie
32 Moose::Object
33 /],
34);
679f4a58 35
36my $config = {};
37$cxt_meta->add_method( config => sub { $config });
38$cxt_meta->add_method( request => sub { $req });
39$cxt_meta->add_method( response => sub { $res });
40$cxt_meta->add_method( session => sub { { } } );
41$cxt_meta->add_method( session_expires => sub { 123 });
42$cxt_meta->add_method("debug" => sub { 0 });
1a776a0c 43my $sessionid;
679f4a58 44$cxt_meta->add_method( sessionid => sub { shift; $sessionid = shift if @_; $sessionid } );
1a776a0c 45
7acfe95d 46can_ok( $m, "setup_session" );
47
679f4a58 48my $cxt = $cxt_meta->name->new;
7acfe95d 49$cxt->setup_session;
50
b6fda7bb 51like( $config->{'Plugin::Session'}{cookie_name},
74586782 52 qr/_session$/, "default cookie name is set" );
53
b6fda7bb 54$config->{'Plugin::Session'}{cookie_name} = "session";
7acfe95d 55
2bde9162 56can_ok( $m, "get_session_id" );
1a776a0c 57
2bde9162 58ok( !$cxt->get_session_id, "no session id yet");
1a776a0c 59
679f4a58 60$cxt = $cxt_meta->name->new;
1a776a0c 61
62%req_cookies = ( session => $cookie );
63
2bde9162 64is( $cxt->get_session_id, "the session id", "session ID was restored from cookie" );
1a776a0c 65
679f4a58 66$cxt_meta->name->new;
67%res_cookies = ();
1a776a0c 68
2bde9162 69can_ok( $m, "set_session_id" );
70$cxt->set_session_id("moose");
1a776a0c 71
679f4a58 72ok( $cookies_called, "created a cookie on set" );
73$cookies_called = 0;
1a776a0c 74
679f4a58 75$cxt_meta->name->new;
76%res_cookies = ();
1a776a0c 77
2bde9162 78$cxt->set_session_id($sessionid);
1a776a0c 79
679f4a58 80ok( $cookies_called, "response cookie was set when sessionid changed" );
1a776a0c 81is_deeply(
82 \%res_cookies,
6a9ca807 83 { session => { value => $sessionid, httponly => 1, expires => 123 } },
1a776a0c 84 "cookie was set correctly"
85);
8bdcbb46 86
679f4a58 87$cxt_meta->name->new;
8bdcbb46 88
89can_ok( $m, "cookie_is_rejecting" );
90
91%req_cookies = ( path => '/foo' );
679f4a58 92my $path = '';
93$req_meta->add_method( path => sub { $path } );
8bdcbb46 94ok( $cxt->cookie_is_rejecting(\%req_cookies), "cookie is rejecting" );
679f4a58 95$path = 'foo/bar';
8bdcbb46 96ok( !$cxt->cookie_is_rejecting(\%req_cookies), "cookie is not rejecting" );
679f4a58 97