1 package t::lib::TestSession;
6 use Test::Fatal qw(lives_ok);
7 use Plack::Middleware::Session;
16 $session = Plack::Session->new($env);
18 my $responder = shift;
19 $responder->([ 200, [], [] ]);
23 my $res = $mw->($app)->($env);
25 return ($session, $res);
43 my $m = sub { Plack::Middleware::Session->wrap($_[0], state => $state, store => $storage) };
45 $response_test ||= sub {
46 my($res_cb, $session_id, $check_expired) = @_;
47 $res_cb->(sub { my $res = shift });
52 my($s, $res) = create_session($m, $env_cb->());
56 ok(!$s->get('foo'), '... no value stored in foo for session');
59 $s->set( foo => 'bar' );
60 } '... set the value successfully in session';
62 is($s->get('foo'), 'bar', '... got the foo value back successfully from session');
64 ok(!$s->get('bar'), '... no value stored in foo for session');
67 $s->set( bar => 'baz' );
68 } '... set the value successfully in session';
70 is($s->get('bar'), 'baz', '... got the foo value back successfully from session');
72 is_deeply( $s->dump, { foo => 'bar', bar => 'baz' }, '... got the session dump we expected');
74 $response_test->($res, $sids[0]);
78 my($s, $res) = create_session($m, $env_cb->());
82 isnt($sids[0], $sids[1], "no same Session ID");
83 ok(!$s->get('foo'), '... no value stored for foo in session');
86 $s->set( foo => 'baz' );
87 } '... set the value successfully';
89 is($s->get('foo'), 'baz', '... got the foo value back successfully from session');
91 is_deeply( $s->dump, { foo => 'baz' }, '... got the session dump we expected');
93 $response_test->($res, $sids[1]);
97 my($s, $res) = create_session($m, $env_cb->({ plack_session => $sids[0] }));
98 is($s->id, $sids[0], '... got a basic session id');
100 is($s->get('foo'), 'bar', '... got the value for foo back successfully from session');
105 } '... removed the foo value successfully from session';
107 ok(!$s->get('foo'), '... no value stored for foo in session');
109 is_deeply( $s->dump, { bar => 'baz' }, '... got the session dump we expected');
111 $response_test->( $res, $sids[0] );
116 my($s, $res) = create_session($m, $env_cb->({ plack_session => $sids[1] }));
118 is($s->id, $sids[1], '... got a basic session id');
120 is($s->get('foo'), 'baz', '... got the foo value back successfully from session');
122 is_deeply( $s->dump, { foo => 'baz' }, '... got the session dump we expected');
124 $response_test->( $res, $sids[1] );
128 my($s, $res) = create_session($m, $env_cb->({ plack_session => $sids[0] }));
130 is($s->id, $sids[0], '... got a basic session id');
132 ok(!$s->get('foo'), '... no value stored for foo in session');
135 $s->set( baz => 'gorch' );
136 } '... set the bar value successfully in session';
138 is_deeply( $s->dump, { bar => 'baz', baz => 'gorch' }, '... got the session dump we expected');
140 $response_test->( $res, $sids[0] );
144 my($s, $res) = create_session($m, $env_cb->({ plack_session => $sids[0] }));
146 is($s->get('bar'), 'baz', '... got the bar value back successfully from session');
150 } '... expired session successfully';
152 $response_test->( $res, $sids[0], 1 );
154 is_deeply( $s->dump, {}, '... got the session dump we expected');
158 my($s, $res) = create_session($m, $env_cb->({ plack_session => $sids[0] }));
161 isnt($s->id, $sids[0], 'expired ... got a new session id');
163 ok(!$s->get('bar'), '... no bar value stored');
165 is_deeply( $s->dump, {}, '... got the session dump we expected');
167 $response_test->( $res, $sids[2] );
171 my($s, $res) = create_session($m, $env_cb->({ plack_session => $sids[1] }));
173 is($s->id, $sids[1], '... got a basic session id');
175 is($s->get('foo'), 'baz', '... got the foo value back successfully from session');
177 is_deeply( $s->dump, { foo => 'baz' }, '... got the session dump we expected');
179 $response_test->( $res, $sids[1] );
183 # wrong format session_id
184 my($s, $res) = create_session($m, $env_cb->({ plack_session => "../wrong" }));
186 isnt('../wrong' => $s->id, '... regenerate session id');
188 ok(!$s->get('foo'), '... no value stored for foo in session');
191 $s->set( foo => 'baz' );
192 } '... set the value successfully';
194 is($s->get('foo'), 'baz', '... got the foo value back successfully from session');
196 is_deeply( $s->dump, { foo => 'baz' }, '... got the session dump we expected');
198 $response_test->( $res, $s->id );