Clarify the comment here, it was causing confusion
[catagits/Catalyst-Plugin-Session.git] / lib / Catalyst / Plugin / Session / Test / Store.pm
1 #!/usr/bin/perl
2
3 package Catalyst::Plugin::Session::Test::Store;
4
5 use strict;
6 use warnings;
7
8 use utf8;
9
10 use Test::More;
11 use File::Temp;
12 use File::Spec;
13
14 use Catalyst ();
15
16 sub import {
17     shift;
18     my %args = @_;
19
20     plan tests => 19 + ($args{extra_tests} || 0);
21
22     my $backend = $args{backend};
23     my $cfg     = $args{config};
24
25     my $p = "Session::Store::$backend";
26     use_ok( my $m = "Catalyst::Plugin::$p" );
27
28     isa_ok( bless( {}, $m ), "Catalyst::Plugin::Session::Store" );
29
30     {
31         package # Hide from PAUSE
32             Catalyst::Plugin::SessionStateTest;
33         use base qw/Catalyst::Plugin::Session::State/;
34
35         no strict 'refs';
36
37         sub get_session_id {
38             my $c = shift;
39             ${ ref($c) . "::session_id" };
40         }
41
42         sub set_session_id {
43             my ( $c, $sid ) = @_;
44             ${ ref($c) . "::session_id" } = $sid;
45         }
46
47         sub delete_session_id {
48             my $c = shift;
49             undef ${ ref($c) . "::session_id" };
50         }
51     }
52
53     {
54
55         package # Hide from PAUSE
56             SessionStoreTest;
57         use Catalyst qw/Session SessionStateTest/;
58         push our (@ISA), $m;
59
60         use strict;
61         use warnings;
62
63         use Test::More;
64
65         sub create_session : Global {
66             my ( $self, $c ) = @_;
67             ok( !$c->session_is_valid, "no session id yet" );
68             ok( $c->session,           "session created" );
69             ok( $c->session_is_valid,  "with a session id" );
70
71             $c->session->{magic} = "møøse";
72         }
73
74         sub recover_session : Global {
75             my ( $self, $c ) = @_;
76             ok( $c->session_is_valid, "session id exists" );
77             is( $c->sessionid, our $session_id,
78                 "and is the one we saved in the last action" );
79             ok( $c->session, "a session exists" );
80             is( $c->session->{magic},
81                 "møøse",
82                 "and it contains what we put in on the last attempt" );
83             $c->delete_session("user logout");
84         }
85
86         sub after_session : Global {
87             my ( $self, $c ) = @_;
88             ok( !$c->session_is_valid,      "no session id" );
89             ok( !$c->session->{magic},      "session data not restored" );
90             ok( !$c->session_delete_reason, "no reason for deletion" );
91         }
92
93         @{ __PACKAGE__->config->{'Plugin::Session'} }{ keys %$cfg } = values %$cfg;
94
95         { __PACKAGE__->setup; }; # Extra block here is an INSANE HACK to get inlined constructor
96                                  # (i.e. to make B::Hooks::EndOfScope fire)
97     }
98
99     {
100
101         package # Hide from PAUSE
102             SessionStoreTest2;
103         use Catalyst qw/Session SessionStateTest/;
104         push our (@ISA), $m;
105
106         our $VERSION = "123";
107
108         use Test::More;
109
110         sub create_session : Global {
111             my ( $self, $c ) = @_;
112
113             $c->session->{magic} = "møøse";
114         }
115
116         sub recover_session : Global {
117             my ( $self, $c ) = @_;
118
119             ok( !$c->session_is_valid, "session is gone" );
120
121             is(
122                 $c->session_delete_reason,
123                 "session expired",
124                 "reason is that the session expired"
125             );
126
127             ok( !$c->session->{magic}, "no saved data" );
128         }
129
130         __PACKAGE__->config->{'Plugin::Session'}{expires} = 0;
131
132         @{ __PACKAGE__->config->{'Plugin::Session'} }{ keys %$cfg } = values %$cfg;
133
134         { __PACKAGE__->setup; }; # INSANE HACK (the block - as above)
135     }
136
137     use Test::More;
138
139     can_ok( $m, "get_session_data" );
140     can_ok( $m, "store_session_data" );
141     can_ok( $m, "delete_session_data" );
142     can_ok( $m, "delete_expired_sessions" );
143
144     {
145
146         package # Hide from PAUSE
147             t1;
148         use Catalyst::Test "SessionStoreTest";
149
150         # idiotic void context warning workaround
151         
152         my $x = get("/create_session");
153         $x = get("/recover_session");
154         $x = get("/after_session");
155     }
156
157     {
158
159         package # Hide fram PAUSE
160             t2;
161         use Catalyst::Test "SessionStoreTest2";
162
163         my $x = get("/create_session");
164         sleep 1;    # let the session expire
165         $x = get("/recover_session");
166     }
167 }
168
169 __PACKAGE__;
170
171 __END__
172
173 =pod
174
175 =head1 NAME
176
177 Catalyst::Plugin::Session::Test::Store - Reusable sanity for session storage
178 engines.
179
180 =head1 SYNOPSIS
181
182     #!/usr/bin/perl
183
184     use Catalyst::Plugin::Session::Test::Store (
185         backend => "FastMmap",
186         config => {
187             storage => "/tmp/foo",
188         },
189     );
190
191 =head1 DESCRIPTION
192
193 =cut
194
195