Perltidy + pod tests for all session plugins
[catagits/Catalyst-Plugin-Session.git] / t / 02_session_data.t
CommitLineData
9e447f9d 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More tests => 19;
7use Test::MockObject;
8use Test::Deep;
9
45c0711b 10my $m;
11BEGIN { use_ok( $m = "Catalyst::Plugin::Session" ) }
9e447f9d 12
13my %config;
45c0711b 14my $log = Test::MockObject->new;
15my $req = Test::MockObject->new;
9e447f9d 16my @mock_isa = ();
17my %session;
18
19$log->set_true(qw/fatal warn/);
20
45c0711b 21$req->set_always( address => "127.0.0.1" );
9e447f9d 22
23{
45c0711b 24
25 package MockCxt;
26 use base $m;
27 sub new { bless {}, $_[0] }
28 sub config { \%config }
29 sub log { $log }
30 sub request { $req }
31 sub debug { 0 }
32 sub isa { 1 } # subvert the plugin tests, we're faking them
33 sub get_session_data { \%session }
34 sub store_session_data { }
35 sub delete_session_data { }
9e447f9d 36}
37
38{
45c0711b 39 my $c = MockCxt->new;
40 $c->setup;
9e447f9d 41
45c0711b 42 $c->prepare_action;
43 ok( !$c->{session}, "without a session ID prepare doesn't load a session" );
9e447f9d 44}
45
46{
45c0711b 47 %config = ( session => { expires => 100 } );
9e447f9d 48
45c0711b 49 %session = (
50 __expires => time() + 1000,
51 __created => time(),
52 __updated => time(),
53 __address => "127.0.0.1",
54 );
9e447f9d 55
45c0711b 56 my $c = MockCxt->new;
57 $c->setup;
9e447f9d 58
45c0711b 59 $c->sessionid("the_session");
60 $c->prepare_action;
9e447f9d 61
45c0711b 62 ok( $c->{session}, 'session "restored" with session id' );
9e447f9d 63}
64
65{
45c0711b 66 %session = (
67 __expires => time() - 100, # a while ago
68 __created => time() - 1000,
69 __udpated => time() - 1000,
70 __address => "127.0.0.1",
71 );
72
73 my $c = MockCxt->new;
74 $c->setup;
75
76 $c->sessionid("the_session");
77 $c->prepare_action;
78
79 ok( !$c->{session}, "expired sessions are deleted" );
80 like( $c->session_delete_reason, qr/expire/i, "with appropriate reason" );
81 ok( !$c->sessionid, "sessionid is also cleared" );
9e447f9d 82}
83
84{
45c0711b 85 %session = (
86 __expires => time() + 1000,
87 __created => time(),
88 __updated => time(),
89 __address => "unlocalhost",
90 );
91
92 my $c = MockCxt->new;
93 $c->setup;
94
95 $c->sessionid("the_session");
96 $c->prepare_action;
97
98 ok( !$c->{session}, "hijacked sessions are deleted" );
99 like( $c->session_delete_reason, qr/mismatch/, "with appropriate reason" );
100 ok( !$c->sessionid, "sessionid is also cleared" );
9e447f9d 101}
102
103{
45c0711b 104 %session = (
105 __expires => time() + 1000,
106 __created => time(),
107 __updated => time(),
108 __address => "unlocalhost",
109 );
9e447f9d 110
45c0711b 111 $config{session}{verify_address} = 0;
9e447f9d 112
45c0711b 113 my $c = MockCxt->new;
114 $c->setup;
9e447f9d 115
45c0711b 116 $c->sessionid("the_session");
117 $c->prepare_action;
9e447f9d 118
45c0711b 119 ok( $c->{session}, "address mismatch is OK if verify_address is disabled" );
9e447f9d 120}
121
122{
45c0711b 123 %session = ();
124 %config = ();
125
126 my $now = time;
127
128 my $c = MockCxt->new;
129 $c->setup;
130 $c->prepare_action;
131
132 ok( $c->session, "creating a session works" );
133 ok( $c->sessionid, "session id generated" );
134
135 cmp_ok( $c->session->{__created}, ">=", $now, "__created time is logical" );
136 cmp_ok( $c->session->{__updated}, ">=", $now, "__updated time is logical" );
137 cmp_ok(
138 $c->session->{__expires},
139 ">=",
140 ( $now + $config{session}{expires} ),
141 "__expires time is logical"
142 );
143 is( $c->session->{__address},
144 $c->request->address, "address is also correct" );
145
146 cmp_deeply(
147 [ keys %{ $c->{session} } ],
148 bag(qw/__expires __created __updated __address/),
149 "initial keys in session are all there",
150 );
9e447f9d 151}
152
9e447f9d 153{
45c0711b 154 %session = (
155 __expires => time() + 1000,
156 __created => time(),
157 __updated => time(),
158 __address => "127.0.0.1",
159 );
160
161 $config{session}{expires} = 2000;
9e447f9d 162
45c0711b 163 my $c = MockCxt->new;
164 $c->setup;
9e447f9d 165
45c0711b 166 my $now = time();
9e447f9d 167
45c0711b 168 $c->sessionid("the_session");
169 $c->prepare_action;
170 $c->finalize;
9e447f9d 171
45c0711b 172 ok( $c->{session},
173 "session is still alive after 1/2 expired and finalized" );
9e447f9d 174
45c0711b 175 cmp_ok(
176 $c->session->{__expires},
177 ">=",
178 $now + 2000,
179 "session expires time extended"
180 );
9e447f9d 181}
182