Commit | Line | Data |
1a776a0c |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
7acfe95d |
6 | use Test::More tests => 15; |
1a776a0c |
7 | use Test::MockObject; |
8 | use Test::MockObject::Extends; |
9 | |
10 | my $m; |
11 | BEGIN { use_ok( $m = "Catalyst::Plugin::Session::State::Cookie" ) } |
12 | |
13 | my $cookie = Test::MockObject->new; |
14 | $cookie->set_always( value => "the session id" ); |
15 | |
16 | my $req = Test::MockObject->new; |
17 | my %req_cookies; |
18 | $req->set_always( cookies => \%req_cookies ); |
19 | |
20 | my $res = Test::MockObject->new; |
21 | my %res_cookies; |
22 | $res->set_always( cookies => \%res_cookies ); |
23 | |
24 | my $cxt = |
25 | Test::MockObject::Extends->new("Catalyst::Plugin::Session::State::Cookie"); |
26 | |
c3f2575c |
27 | $cxt->set_always( config => {} ); |
1a776a0c |
28 | $cxt->set_always( request => $req ); |
29 | $cxt->set_always( response => $res ); |
c3f2575c |
30 | $cxt->set_always( session => { __expires => 123 } ); |
1a776a0c |
31 | $cxt->set_false("debug"); |
32 | my $sessionid; |
33 | $cxt->mock( sessionid => sub { shift; $sessionid = shift if @_; $sessionid } ); |
34 | |
7acfe95d |
35 | can_ok( $m, "setup_session" ); |
36 | |
37 | $cxt->setup_session; |
38 | |
c3f2575c |
39 | is( $cxt->config->{session}{cookie_name}, |
40 | "session", "default cookie name is set" ); |
7acfe95d |
41 | |
1a776a0c |
42 | can_ok( $m, "prepare_cookies" ); |
43 | |
44 | $cxt->prepare_cookies; |
45 | ok( !$cxt->called("sessionid"), |
46 | "didn't try setting session ID when there was nothing to set it by" ); |
47 | |
48 | $cxt->clear; |
49 | |
50 | %req_cookies = ( session => $cookie ); |
51 | |
52 | ok( !$cxt->sessionid, "no session ID yet" ); |
53 | $cxt->prepare_cookies; |
54 | is( $cxt->sessionid, "the session id", "session ID was restored from cookie" ); |
55 | |
56 | $cxt->clear; |
57 | $res->clear; |
58 | |
d52e5079 |
59 | can_ok( $m, "finalize_cookies" ); |
60 | $cxt->finalize_cookies; |
58730edc |
61 | { |
62 | local $TODO = |
63 | "This check is a pain to write, should be done by catalyst itself"; |
64 | ok( !$res->called("cookies"), |
65 | "response cookie was not set since res cookie is already there" ); |
db1cda22 |
66 | } |
1a776a0c |
67 | |
68 | $cxt->clear; |
69 | $sessionid = undef; |
70 | $res->clear; |
71 | |
d52e5079 |
72 | $cxt->finalize_cookies; |
1a776a0c |
73 | ok( !$res->called("cookies"), |
74 | "response cookie was not set when sessionid was deleted, even if req cookie is still there" |
75 | ); |
76 | |
77 | $sessionid = "some other ID"; |
78 | $cxt->clear; |
79 | $res->clear; |
80 | |
d52e5079 |
81 | $cxt->finalize_cookies; |
1a776a0c |
82 | $res->called_ok( "cookies", "response cookie was set when sessionid changed" ); |
83 | is_deeply( |
84 | \%res_cookies, |
c3f2575c |
85 | { session => { value => $sessionid, expires => 123 } }, |
1a776a0c |
86 | "cookie was set correctly" |
87 | ); |
88 | |
89 | $cxt->clear; |
90 | $res->clear; |
91 | %req_cookies = (); |
92 | %res_cookies = (); |
93 | $sessionid = undef; |
94 | |
d52e5079 |
95 | $cxt->finalize_cookies; |
1a776a0c |
96 | ok( !$res->called("cookies"), |
97 | "response cookie was not set when there is no sessionid or request cookie" |
98 | ); |
99 | |
100 | $cxt->clear; |
101 | $sessionid = "123"; |
102 | %res_cookies = (); |
103 | $res->clear; |
104 | |
d52e5079 |
105 | $cxt->finalize_cookies; |
1a776a0c |
106 | |
107 | $res->called_ok( "cookies", |
108 | "response cookie was set when session was created" ); |
109 | is_deeply( |
110 | \%res_cookies, |
c3f2575c |
111 | { session => { value => $sessionid, expires => 123 } }, |
1a776a0c |
112 | "cookie was set correctly" |
113 | ); |
114 | |