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