Catalyst::Plugin::Session::State::Cookie - doc cleanup + coverage
[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 => 15;
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
27 $cxt->set_always( config => { } );
28 $cxt->set_always( request  => $req );
29 $cxt->set_always( response => $res );
30 $cxt->set_false("debug");
31 my $sessionid;
32 $cxt->mock( sessionid => sub { shift; $sessionid = shift if @_; $sessionid } );
33
34
35 can_ok( $m, "setup_session" );
36
37 $cxt->setup_session;
38
39 is( $cxt->config->{session}{cookie_name}, "session", "default cookie name is set" );
40
41
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
59 can_ok( $m, "finalize" );
60 $cxt->finalize;
61 ok( !$res->called("cookies"),
62     "response cookie was not set since res cookie is already there" );
63
64 $cxt->clear;
65 $sessionid = undef;
66 $res->clear;
67
68 $cxt->finalize;
69 ok( !$res->called("cookies"),
70 "response cookie was not set when sessionid was deleted, even if req cookie is still there"
71 );
72
73 $sessionid = "some other ID";
74 $cxt->clear;
75 $res->clear;
76
77 $cxt->finalize;
78 $res->called_ok( "cookies", "response cookie was set when sessionid changed" );
79 is_deeply(
80     \%res_cookies,
81     { session => { value => $sessionid } },
82     "cookie was set correctly"
83 );
84
85 $cxt->clear;
86 $res->clear;
87 %req_cookies = ();
88 %res_cookies = ();
89 $sessionid   = undef;
90
91 $cxt->finalize;
92 ok( !$res->called("cookies"),
93     "response cookie was not set when there is no sessionid or request cookie"
94 );
95
96 $cxt->clear;
97 $sessionid   = "123";
98 %res_cookies = ();
99 $res->clear;
100
101 $cxt->finalize;
102
103 $res->called_ok( "cookies",
104     "response cookie was set when session was created" );
105 is_deeply(
106     \%res_cookies,
107     { session => { value => $sessionid } },
108     "cookie was set correctly"
109 );
110