Fixed C::P::Session::State::Cookie expires behavior
[catagits/Catalyst-Plugin-Session-State-Cookie.git] / t / basic.t
CommitLineData
1a776a0c 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
7acfe95d 6use Test::More tests => 15;
1a776a0c 7use Test::MockObject;
8use Test::MockObject::Extends;
9
10my $m;
11BEGIN { use_ok( $m = "Catalyst::Plugin::Session::State::Cookie" ) }
12
13my $cookie = Test::MockObject->new;
14$cookie->set_always( value => "the session id" );
15
16my $req = Test::MockObject->new;
17my %req_cookies;
18$req->set_always( cookies => \%req_cookies );
19
20my $res = Test::MockObject->new;
21my %res_cookies;
22$res->set_always( cookies => \%res_cookies );
23
24my $cxt =
25 Test::MockObject::Extends->new("Catalyst::Plugin::Session::State::Cookie");
26
c3f2575c 27$cxt->set_always( config => {} );
1a776a0c 28$cxt->set_always( request => $req );
29$cxt->set_always( response => $res );
74586782 30$cxt->set_always( session => { } );
31$cxt->set_always( session_expires => 123 );
1a776a0c 32$cxt->set_false("debug");
33my $sessionid;
34$cxt->mock( sessionid => sub { shift; $sessionid = shift if @_; $sessionid } );
35
7acfe95d 36can_ok( $m, "setup_session" );
37
38$cxt->setup_session;
39
74586782 40like( $cxt->config->{session}{cookie_name},
41 qr/_session$/, "default cookie name is set" );
42
43$cxt->config->{session}{cookie_name} = "session";
7acfe95d 44
1a776a0c 45can_ok( $m, "prepare_cookies" );
46
47$cxt->prepare_cookies;
48ok( !$cxt->called("sessionid"),
49 "didn't try setting session ID when there was nothing to set it by" );
50
51$cxt->clear;
52
53%req_cookies = ( session => $cookie );
54
55ok( !$cxt->sessionid, "no session ID yet" );
56$cxt->prepare_cookies;
57is( $cxt->sessionid, "the session id", "session ID was restored from cookie" );
58
59$cxt->clear;
60$res->clear;
61
d52e5079 62can_ok( $m, "finalize_cookies" );
63$cxt->finalize_cookies;
58730edc 64{
65 local $TODO =
66 "This check is a pain to write, should be done by catalyst itself";
67 ok( !$res->called("cookies"),
68 "response cookie was not set since res cookie is already there" );
db1cda22 69}
1a776a0c 70
71$cxt->clear;
72$sessionid = undef;
73$res->clear;
74
d52e5079 75$cxt->finalize_cookies;
1a776a0c 76ok( !$res->called("cookies"),
77"response cookie was not set when sessionid was deleted, even if req cookie is still there"
78);
79
80$sessionid = "some other ID";
81$cxt->clear;
82$res->clear;
83
d52e5079 84$cxt->finalize_cookies;
1a776a0c 85$res->called_ok( "cookies", "response cookie was set when sessionid changed" );
86is_deeply(
87 \%res_cookies,
c3f2575c 88 { session => { value => $sessionid, expires => 123 } },
1a776a0c 89 "cookie was set correctly"
90);
91
92$cxt->clear;
93$res->clear;
94%req_cookies = ();
95%res_cookies = ();
96$sessionid = undef;
97
d52e5079 98$cxt->finalize_cookies;
1a776a0c 99ok( !$res->called("cookies"),
100 "response cookie was not set when there is no sessionid or request cookie"
101);
102
103$cxt->clear;
104$sessionid = "123";
105%res_cookies = ();
106$res->clear;
107
d52e5079 108$cxt->finalize_cookies;
1a776a0c 109
110$res->called_ok( "cookies",
111 "response cookie was set when session was created" );
112is_deeply(
113 \%res_cookies,
c3f2575c 114 { session => { value => $sessionid, expires => 123 } },
1a776a0c 115 "cookie was set correctly"
116);
117