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