Release commit for 0.18
[catagits/Catalyst-Plugin-Session-State-Cookie.git] / t / live_app.t
1 use strict;
2 use warnings;
3
4 use FindBin qw/$Bin/;
5 use lib "$Bin/lib";
6
7 use Test::More;
8
9 use HTTP::Cookies;
10 use Catalyst::Utils ();
11
12 use Catalyst::Test qw(CookieTestApp);
13
14 my $jar = HTTP::Cookies->new;
15 my %cookie;
16 my $get = sub {
17     my $url = shift;
18     my $req = Catalyst::Utils::request($url);
19     $jar->add_cookie_header($req);
20     my $res = request($req);
21     $jar->extract_cookies($res);
22
23     $jar->scan( sub {
24         if ($_[1] eq 'cookietestapp_session') {
25             @cookie{qw(
26                 version
27                 key
28                 val
29                 path
30                 domain
31                 port
32                 path_spec
33                 secure
34                 expires
35                 discard
36                 hash
37             )} = @_;
38         }
39     } );
40
41     return $res;
42 };
43
44 my $res;
45
46 $res = $get->('/stream');
47 ok $res->is_success, 'get page';
48 like $res->content, qr/hit number 1/, 'session data created';
49
50 my $expired = $cookie{expires};
51
52 $res = $get->('/page');
53 ok $res->is_success, 'get page';
54 like $res->content, qr/hit number 2/, 'session data restored';
55
56 $res = $get->('/page');
57 ok $res->is_success, 'get page';
58 like $res->content, qr/hit number 3/, 'session data restored';
59
60 sleep 1;
61
62 $res = $get->('/page');
63 ok $res->is_success, 'get page';
64 like $res->content, qr/hit number 4/, 'session data restored';
65
66 cmp_ok $expired, '<', $cookie{expires}, 'cookie expiration was extended';
67 $expired = $cookie{expires};
68
69 $res = $get->('/page');
70 ok $res->is_success, 'get page';
71 like $res->content, qr/hit number 5/, 'session data restored';
72
73 sleep 1;
74
75 $res = $get->('/stream');
76 ok $res->is_success, 'get stream';
77 like $res->content, qr/hit number 6/, 'session data restored';
78
79 cmp_ok $expired, '<', $cookie{expires}, 'streaming also extends cookie';
80
81 $res = $get->('/deleteme');
82 ok $res->is_success, 'get page';
83 is $res->content, '1', 'session id changed';
84
85 $res = $get->('https://localhost/page');
86 ok $res->is_success, 'get page over HTTPS - init session';
87 like $res->content, qr/hit number 1/, 'first hit';
88
89 $res = $get->('http://localhost/page');
90 ok $res->is_success, 'get page again over HTTP';
91 like $res->content, qr/hit number 1/, 'first hit again - cookie not sent';
92
93 $res = $get->('https://localhost/page');
94 ok $res->is_success, 'get page over HTTPS';
95 like $res->content, qr/hit number 2/, 'second hit';
96
97 done_testing;