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