60f1377c020345bcf3073ed16901d20b27093475
[catagits/Catalyst-Plugin-Session-State-Cookie.git] / t / basic.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 13;
7
8 use Catalyst::Plugin::Session;
9
10 my $m;
11 BEGIN { use_ok( $m = "Catalyst::Plugin::Session::State::Cookie" ) }
12
13 my $cookie_meta = Class::MOP::Class->create_anon_class( superclasses => ['Moose::Object'] );
14 my $cookie = $cookie_meta->name->new;
15 $cookie_meta->add_method( value => sub { "the session id" } );
16
17 my $req_meta = Class::MOP::Class->create_anon_class( superclasses => ['Moose::Object'] );
18 my %req_cookies;
19 $req_meta->add_method( cookies => sub { \%req_cookies } );
20 my $req = $req_meta->name->new;
21
22 my $res_meta = Class::MOP::Class->create_anon_class( superclasses => ['Moose::Object'] );
23 my %res_cookies;
24 my $cookies_called = 0;
25 $res_meta->add_method( cookies => sub { $cookies_called++; \%res_cookies });
26 my $res = $res_meta->name->new;
27
28 my $cxt_meta = Class::MOP::Class->create_anon_class(
29     superclasses => [qw/
30         Catalyst::Plugin::Session
31         Catalyst::Plugin::Session::State::Cookie
32         Moose::Object
33     /],
34 );
35
36 my $config = {};
37 $cxt_meta->add_method( config   => sub { $config });
38 $cxt_meta->add_method( request  => sub { $req });
39 $cxt_meta->add_method( response => sub { $res });
40 $cxt_meta->add_method( session  => sub { { } } );
41 $cxt_meta->add_method( session_expires => sub { 123 });
42 $cxt_meta->add_method("debug" => sub { 0 });
43 my $sessionid;
44 $cxt_meta->add_method( sessionid => sub { shift; $sessionid = shift if @_; $sessionid } );
45
46 can_ok( $m, "setup_session" );
47
48 my $cxt = $cxt_meta->name->new;
49 $cxt->setup_session;
50
51 like( $config->{'Plugin::Session'}{cookie_name},
52     qr/_session$/, "default cookie name is set" );
53
54 $config->{'Plugin::Session'}{cookie_name} = "session";
55
56 can_ok( $m, "get_session_id" );
57
58 ok( !$cxt->get_session_id, "no session id yet");
59
60 $cxt = $cxt_meta->name->new;
61
62 %req_cookies = ( session => $cookie );
63
64 is( $cxt->get_session_id, "the session id", "session ID was restored from cookie" );
65
66 $cxt_meta->name->new;
67 %res_cookies = ();
68
69 can_ok( $m, "set_session_id" );
70 $cxt->set_session_id("moose");
71
72 ok( $cookies_called, "created a cookie on set" );
73 $cookies_called = 0;
74
75 $cxt_meta->name->new;
76 %res_cookies = ();
77
78 $cxt->set_session_id($sessionid);
79
80 ok( $cookies_called, "response cookie was set when sessionid changed" );
81 is_deeply(
82     \%res_cookies,
83     { session => { value => $sessionid, httponly => 1, expires => 123 } },
84     "cookie was set correctly"
85 );
86
87 $cxt_meta->name->new;
88
89 can_ok( $m, "cookie_is_rejecting" );
90
91 %req_cookies = ( path => '/foo' );
92 my $path = '';
93 $req_meta->add_method( path => sub { $path } );
94 ok( $cxt->cookie_is_rejecting(\%req_cookies), "cookie is rejecting" );
95 $path = 'foo/bar';
96 ok( !$cxt->cookie_is_rejecting(\%req_cookies), "cookie is not rejecting" );
97