Test for cookie expiration and extension behavior, add cookie_expires, disable condit...
[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 );
c3f2575c 30$cxt->set_always( session => { __expires => 123 } );
1a776a0c 31$cxt->set_false("debug");
32my $sessionid;
33$cxt->mock( sessionid => sub { shift; $sessionid = shift if @_; $sessionid } );
34
7acfe95d 35can_ok( $m, "setup_session" );
36
37$cxt->setup_session;
38
c3f2575c 39is( $cxt->config->{session}{cookie_name},
40 "session", "default cookie name is set" );
7acfe95d 41
1a776a0c 42can_ok( $m, "prepare_cookies" );
43
44$cxt->prepare_cookies;
45ok( !$cxt->called("sessionid"),
46 "didn't try setting session ID when there was nothing to set it by" );
47
48$cxt->clear;
49
50%req_cookies = ( session => $cookie );
51
52ok( !$cxt->sessionid, "no session ID yet" );
53$cxt->prepare_cookies;
54is( $cxt->sessionid, "the session id", "session ID was restored from cookie" );
55
56$cxt->clear;
57$res->clear;
58
d52e5079 59can_ok( $m, "finalize_cookies" );
60$cxt->finalize_cookies;
db1cda22 61{ local $TODO = "This check is a pain to write, should be done by catalyst itself";
1a776a0c 62ok( !$res->called("cookies"),
63 "response cookie was not set since res cookie is already there" );
db1cda22 64}
1a776a0c 65
66$cxt->clear;
67$sessionid = undef;
68$res->clear;
69
d52e5079 70$cxt->finalize_cookies;
1a776a0c 71ok( !$res->called("cookies"),
72"response cookie was not set when sessionid was deleted, even if req cookie is still there"
73);
74
75$sessionid = "some other ID";
76$cxt->clear;
77$res->clear;
78
d52e5079 79$cxt->finalize_cookies;
1a776a0c 80$res->called_ok( "cookies", "response cookie was set when sessionid changed" );
81is_deeply(
82 \%res_cookies,
c3f2575c 83 { session => { value => $sessionid, expires => 123 } },
1a776a0c 84 "cookie was set correctly"
85);
86
87$cxt->clear;
88$res->clear;
89%req_cookies = ();
90%res_cookies = ();
91$sessionid = undef;
92
d52e5079 93$cxt->finalize_cookies;
1a776a0c 94ok( !$res->called("cookies"),
95 "response cookie was not set when there is no sessionid or request cookie"
96);
97
98$cxt->clear;
99$sessionid = "123";
100%res_cookies = ();
101$res->clear;
102
d52e5079 103$cxt->finalize_cookies;
1a776a0c 104
105$res->called_ok( "cookies",
106 "response cookie was set when session was created" );
107is_deeply(
108 \%res_cookies,
c3f2575c 109 { session => { value => $sessionid, expires => 123 } },
1a776a0c 110 "cookie was set correctly"
111);
112