Commit | Line | Data |
dd4e6fd2 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use FindBin; |
42da66a9 |
5 | use lib "$FindBin::Bin/../lib"; |
dd4e6fd2 |
6 | |
c7e57864 |
7 | use Test::More tests => 56; |
dd4e6fd2 |
8 | use Catalyst::Test 'TestApp'; |
9 | |
10 | use Catalyst::Request; |
11 | use HTTP::Headers; |
12 | use 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; |
88e5a8b0 |
117 | |
b44833b8 |
118 | my $body_parameters = { |
5c2c224d |
119 | a => 1, |
120 | blank => '', |
fbcc39ad |
121 | }; |
b44833b8 |
122 | my $query_parameters = { |
123 | 'query string' => undef |
124 | }; |
125 | my $parameters = { |
126 | %$body_parameters, |
127 | %$query_parameters |
128 | }; |
fbcc39ad |
129 | |
130 | my $request = POST( |
3b4d1251 |
131 | 'http://localhost/dump/request/a/b?query+string', |
b44833b8 |
132 | 'Content' => $body_parameters, |
fbcc39ad |
133 | 'Content-Type' => 'application/x-www-form-urlencoded' |
134 | ); |
88e5a8b0 |
135 | |
fbcc39ad |
136 | ok( my $response = request($request), 'Request' ); |
137 | ok( eval '$creq = ' . $response->content, 'Unserialize Catalyst::Request' ); |
6680c772 |
138 | is( $creq->uri->query, 'query+string', 'Catalyst::Request POST query_string' ); |
3b4d1251 |
139 | is( $creq->query_keywords, 'query string', 'Catalyst::Request query_keywords' ); |
5f1c2808 |
140 | is_deeply( $creq->query_parameters, $query_parameters, 'Catalyst::Request query_parameters' ); |
141 | is_deeply( $creq->body_parameters, $body_parameters, 'Catalyst::Request body_parameters' ); |
6680c772 |
142 | is_deeply( $creq->parameters, $parameters, 'Catalyst::Request parameters' ); |
88e5a8b0 |
143 | |
fbcc39ad |
144 | ok( $response = request('http://localhost/dump/request/a/b?x=1&y=1&z=1'), 'Request' ); |
145 | ok( eval '$creq = ' . $response->content, 'Unserialize Catalyst::Request' ); |
6680c772 |
146 | is( $creq->uri->query, 'x=1&y=1&z=1', 'Catalyst::Request GET query_string' ); |
c2e37e59 |
147 | } |
2f381252 |
148 | |
149 | { |
150 | my $creq; |
151 | ok( my $response = request("http://localhost/dump/request?&&q="), |
152 | 'Request' ); |
153 | ok( $response->is_success, 'Response Successful 2xx' ); |
154 | is( $response->content_type, 'text/plain', 'Response Content-Type' ); |
155 | ok( eval '$creq = ' . $response->content ); |
156 | is( keys %{$creq->{parameters}}, 1, 'remove empty parameter' ); |
157 | is( $creq->{parameters}->{q}, '', 'empty parameter' ); |
158 | } |
159 | |
160 | { |
161 | my $creq; |
162 | ok( my $response = request("http://localhost/dump/request?&0&q="), |
163 | 'Request' ); |
164 | ok( $response->is_success, 'Response Successful 2xx' ); |
165 | is( $response->content_type, 'text/plain', 'Response Content-Type' ); |
166 | ok( eval '$creq = ' . $response->content ); |
167 | is( keys %{$creq->{parameters}}, 2, 'remove empty parameter' ); |
168 | is( $creq->{parameters}->{q}, '', 'empty parameter' ); |
169 | ok( !defined $creq->{parameters}->{0}, 'empty parameter' ); |
170 | } |