Merge cookie fix from 5.7
[catagits/Catalyst-Runtime.git] / t / aggregate / live_engine_response_cookies.t
1 #!perl
2
3 use strict;
4 use warnings;
5
6 use FindBin;
7 use lib "$FindBin::Bin/../lib";
8
9 use Test::More tests => 15;
10 use Catalyst::Test 'TestApp';
11 use HTTP::Headers::Util 'split_header_words';
12
13 my $expected = {
14     catalyst => [qw|catalyst cool path /bah|],
15     cool     => [qw|cool catalyst path /|]
16 };
17
18 {
19     ok( my $response = request('http://localhost/engine/response/cookies/one'),
20         'Request' );
21     ok( $response->is_success, 'Response Successful 2xx' );
22     is( $response->content_type, 'text/plain', 'Response Content-Type' );
23     is( $response->header('X-Catalyst-Action'),
24         'engine/response/cookies/one', 'Test Action' );
25
26     my $cookies = {};
27
28     for my $string ( $response->header('Set-Cookie') ) {
29         my $cookie = [ split_header_words $string];
30         $cookies->{ $cookie->[0]->[0] } = $cookie->[0];
31     }
32
33     is_deeply( $cookies, $expected, 'Response Cookies' );
34 }
35
36 {
37     ok( my $response = request('http://localhost/engine/response/cookies/two'),
38         'Request' );
39     ok( $response->is_redirect, 'Response Redirection 3xx' );
40     is( $response->code, 302, 'Response Code' );
41     is( $response->header('X-Catalyst-Action'),
42         'engine/response/cookies/two', 'Test Action' );
43
44     my $cookies = {};
45
46     for my $string ( $response->header('Set-Cookie') ) {
47         my $cookie = [ split_header_words $string];
48         $cookies->{ $cookie->[0]->[0] } = $cookie->[0];
49     }
50
51     is_deeply( $cookies, $expected, 'Response Cookies' );
52 }
53
54 {
55     ok( my $response = request('http://localhost/engine/response/cookies/three'),
56         'Request' );
57     ok( $response->is_success, 'Response Successful 2xx' );
58     is( $response->content_type, 'text/plain', 'Response Content-Type' );
59     is( $response->header('X-Catalyst-Action'),
60         'engine/response/cookies/three', 'Test Action' );
61
62     my $cookies = {};
63
64     for my $string ( $response->header('Set-Cookie') ) {
65         my $cookie = [ split_header_words $string];
66         $cookies->{ $cookie->[0]->[0] } = $cookie->[0];
67     }
68
69     is_deeply( $cookies, {
70         hash => [ qw(hash a&b&c path /) ],
71         this_is_the_real_name => [ qw(this_is_the_real_name foo&bar path /) ], # not "object"
72     }, 'Response Cookies' );
73 }