Version 0.07
[catagits/Catalyst-Plugin-RequireSSL.git] / t / 04ssl.t
1 #!perl\r
2 \r
3 use strict;\r
4 use warnings;\r
5 \r
6 use FindBin;\r
7 use lib "$FindBin::Bin/lib";\r
8 \r
9 use Test::More tests => 19;\r
10 use Catalyst::Test 'TestApp';\r
11 use HTTP::Request::Common;\r
12 \r
13 # test an SSL redirect\r
14 ok( my $res = request('http://localhost/ssl/secured'), 'request ok' );\r
15 is( $res->code, 302, 'redirect code ok' );\r
16 is( $res->header('location'), 'https://localhost/ssl/secured', 'redirect uri ok' );\r
17 isnt( $res->content, 'Secured', 'no content displayed on secure page, ok' );\r
18 \r
19 # test redirection params\r
20 ok( $res = request('http://localhost/ssl/secured?a=1&a=2&b=3&c=4'), 'request ok' );\r
21 is( $res->header('location'), 'https://localhost/ssl/secured?a=1&a=2&b=3&c=4', 'redirect with params ok' );\r
22 \r
23 # test that it does not redirect for actions where SSL mode is optional\r
24 ok( $res = request('http://localhost/ssl/maybe_secured'), 'request ok' );\r
25 is( $res->code, 200, 'no redirect for optional SSL action' );\r
26 \r
27 # test that it doesn't redirect on POST\r
28 my $request = POST( 'http://localhost/ssl/secured', \r
29     'Content'      => '',\r
30     'Content-Type' => 'application/x-www-form-urlencoded'\r
31 );\r
32 ok( $res = request($request), 'request ok' );\r
33 is( $res->code, 200, 'POST ok' );\r
34 \r
35 # test that it doesn't redirect if already in SSL mode\r
36 SKIP:\r
37 {\r
38     if ( Catalyst->VERSION < 5.5 ) {\r
39         skip "These tests require Catalyst >= 5.5", 7;\r
40     }\r
41     ok( $res = request('https://localhost/ssl/secured'), 'request ok' );\r
42     is( $res->code, 200, 'SSL request, ok' );\r
43     \r
44     # test redirect back to http mode\r
45     ok( $res = request('https://localhost/ssl/unsecured'), 'request ok' );\r
46     is( $res->code, 302, 'redirect back to http ok' );\r
47     is( $res->header('location'), 'http://localhost/ssl/unsecured', 'redirect uri ok' );\r
48     \r
49     # test redirection params\r
50     ok( $res = request('https://localhost/ssl/unsecured?a=1&a=2&b=3&c=4'), 'request ok' );\r
51     is( $res->header('location'), 'http://localhost/ssl/unsecured?a=1&a=2&b=3&c=4', 'redirect with params ok' );\r
52 \r
53     # test that it does not redirect for actions where SSL mode is optional\r
54     ok( $res = request('https://localhost/ssl/maybe_secured'), 'request ok' );\r
55     is( $res->code, 200, 'no redirect for optional SSL action' );\r
56 }\r
57 \r