Corrects minor error in prepare_query_parameters
[catagits/Catalyst-Runtime.git] / t / aggregate / live_engine_request_parameters.t
CommitLineData
dd4e6fd2 1use strict;
2use warnings;
3
4use FindBin;
42da66a9 5use lib "$FindBin::Bin/../lib";
dd4e6fd2 6
b76e3717 7use Test::More tests => 54;
dd4e6fd2 8use Catalyst::Test 'TestApp';
9
10use Catalyst::Request;
11use HTTP::Headers;
12use HTTP::Request::Common;
dd4e6fd2 13
14{
15 my $creq;
16
fbcc39ad 17 my $parameters = { 'a' => [qw(A b C d E f G)], };
18
b9e9fff6 19 my $query = join( '&', map { 'a=' . $_ } @{ $parameters->{a} } );
fbcc39ad 20
21 ok( my $response = request("http://localhost/dump/request?$query"),
22 'Request' );
b9e9fff6 23 ok( $response->is_success, 'Response Successful 2xx' );
24 is( $response->content_type, 'text/plain', 'Response Content-Type' );
fbcc39ad 25 like(
26 $response->content,
27 qr/^bless\( .* 'Catalyst::Request' \)$/s,
28 'Content is a serialized Catalyst::Request'
29 );
b9e9fff6 30 ok( eval '$creq = ' . $response->content, 'Unserialize Catalyst::Request' );
1e3b6963 31 isa_ok( $creq, 'Catalyst::Request' )
32 or fail("EXCEPTION: $@");
b9e9fff6 33 is( $creq->method, 'GET', 'Catalyst::Request method' );
6680c772 34 is_deeply( $creq->parameters, $parameters,
fbcc39ad 35 'Catalyst::Request parameters' );
b9e9fff6 36}
b9e9fff6 37{
38 my $creq;
7d22a537 39 ok( my $response = request("http://localhost/dump/request?q=foo%2bbar"),
40 'Request' );
41 ok( $response->is_success, 'Response Successful 2xx' );
42 is( $response->content_type, 'text/plain', 'Response Content-Type' );
43 ok( eval '$creq = ' . $response->content );
6680c772 44 is $creq->parameters->{q}, 'foo+bar', '%2b not double decoded';
7d22a537 45}
46
47{
48 my $creq;
e5542b70 49 ok( my $response = request("http://localhost/dump/request?q=foo=bar"),
50 'Request' );
51 ok( $response->is_success, 'Response Successful 2xx' );
52 is( $response->content_type, 'text/plain', 'Response Content-Type' );
53 ok( eval '$creq = ' . $response->content );
6680c772 54 is $creq->parameters->{q}, 'foo=bar', '= not ignored';
e5542b70 55}
56
57{
58 my $creq;
b9e9fff6 59
fbcc39ad 60 my $parameters = {
5c2c224d 61 'a' => [qw(A b C d E f G)],
62 '%' => [ '%', '"', '& - &' ],
63 'blank' => '',
dd4e6fd2 64 };
65
fbcc39ad 66 my $request = POST(
67 'http://localhost/dump/request/a/b?a=1&a=2&a=3',
dd4e6fd2 68 'Content' => $parameters,
69 'Content-Type' => 'application/x-www-form-urlencoded'
70 );
71
dd4e6fd2 72 ok( my $response = request($request), 'Request' );
73 ok( $response->is_success, 'Response Successful 2xx' );
74 is( $response->content_type, 'text/plain', 'Response Content-Type' );
fbcc39ad 75 like(
76 $response->content,
77 qr/^bless\( .* 'Catalyst::Request' \)$/s,
78 'Content is a serialized Catalyst::Request'
79 );
dd4e6fd2 80 ok( eval '$creq = ' . $response->content, 'Unserialize Catalyst::Request' );
81 isa_ok( $creq, 'Catalyst::Request' );
82 is( $creq->method, 'POST', 'Catalyst::Request method' );
b76e3717 83 is_deeply( $creq->body_parameters, $parameters,
84 'Catalyst::Request body_parameters' );
85 unshift( @{ $parameters->{a} }, 1, 2, 3 );
6680c772 86 is_deeply( $creq->parameters, $parameters,
fbcc39ad 87 'Catalyst::Request parameters' );
dd4e6fd2 88 is_deeply( $creq->arguments, [qw(a b)], 'Catalyst::Request arguments' );
6680c772 89 is_deeply( $creq->uploads, {}, 'Catalyst::Request uploads' );
fbcc39ad 90 is_deeply( $creq->cookies, {}, 'Catalyst::Request cookie' );
dd4e6fd2 91}
c2e37e59 92
c2e37e59 93# http://dev.catalyst.perl.org/ticket/37
94# multipart/form-data parameters that contain 'http://'
fbcc39ad 95# was an HTTP::Message bug, but HTTP::Body handles it properly now
c2e37e59 96{
97 my $creq;
98
99 my $parameters = {
5c2c224d 100 'url' => 'http://www.google.com',
101 'blank' => '',
c2e37e59 102 };
103
104 my $request = POST( 'http://localhost/dump/request',
105 'Content-Type' => 'multipart/form-data',
106 'Content' => $parameters,
107 );
108
109 ok( my $response = request($request), 'Request' );
110 ok( eval '$creq = ' . $response->content, 'Unserialize Catalyst::Request' );
6680c772 111 is_deeply( $creq->parameters, $parameters, 'Catalyst::Request parameters' );
fbcc39ad 112}
113
114# raw query string support
115{
116 my $creq;
117
118 my $parameters = {
5c2c224d 119 a => 1,
120 blank => '',
fbcc39ad 121 };
122
123 my $request = POST(
3b4d1251 124 'http://localhost/dump/request/a/b?query+string',
fbcc39ad 125 'Content' => $parameters,
126 'Content-Type' => 'application/x-www-form-urlencoded'
127 );
128
129 ok( my $response = request($request), 'Request' );
130 ok( eval '$creq = ' . $response->content, 'Unserialize Catalyst::Request' );
6680c772 131 is( $creq->uri->query, 'query+string', 'Catalyst::Request POST query_string' );
3b4d1251 132 is( $creq->query_keywords, 'query string', 'Catalyst::Request query_keywords' );
6680c772 133 is_deeply( $creq->parameters, $parameters, 'Catalyst::Request parameters' );
fbcc39ad 134
135 ok( $response = request('http://localhost/dump/request/a/b?x=1&y=1&z=1'), 'Request' );
136 ok( eval '$creq = ' . $response->content, 'Unserialize Catalyst::Request' );
6680c772 137 is( $creq->uri->query, 'x=1&y=1&z=1', 'Catalyst::Request GET query_string' );
c2e37e59 138}
2f381252 139
140{
141 my $creq;
142 ok( my $response = request("http://localhost/dump/request?&&q="),
143 'Request' );
144 ok( $response->is_success, 'Response Successful 2xx' );
145 is( $response->content_type, 'text/plain', 'Response Content-Type' );
146 ok( eval '$creq = ' . $response->content );
147 is( keys %{$creq->{parameters}}, 1, 'remove empty parameter' );
148 is( $creq->{parameters}->{q}, '', 'empty parameter' );
149}
150
151{
152 my $creq;
153 ok( my $response = request("http://localhost/dump/request?&0&q="),
154 'Request' );
155 ok( $response->is_success, 'Response Successful 2xx' );
156 is( $response->content_type, 'text/plain', 'Response Content-Type' );
157 ok( eval '$creq = ' . $response->content );
158 is( keys %{$creq->{parameters}}, 2, 'remove empty parameter' );
159 is( $creq->{parameters}->{q}, '', 'empty parameter' );
160 ok( !defined $creq->{parameters}->{0}, 'empty parameter' );
161}