upping versions and prep release
[catagits/Catalyst-Runtime.git] / t / psgi_utils.t
CommitLineData
9c7b6768 1use warnings;
2use strict;
3
4# Make it easier to mount PSGI apps under catalyst
5
6{
7 package MyApp::Controller::User;
8
9 use base 'Catalyst::Controller';
10 use Plack::Request;
11 use Catalyst::Utils;
12
13 my $psgi_app = sub {
14 my $req = Plack::Request->new(shift);
15 return [200,[],[$req->path]];
16 };
17
18 sub local_example :Local {
19 my ($self, $c) = @_;
20 my $env = $self->get_env($c);
21 $c->res->from_psgi_response(
22 $psgi_app->($env));
23 }
24
25 sub local_example_args1 :Local Args(1) {
26 my ($self, $c) = @_;
27 my $env = $self->get_env($c);
28 $c->res->from_psgi_response(
29 $psgi_app->($env));
30 }
31
32 sub path_example :Path('path-example') {
33 my ($self, $c) = @_;
34 my $env = $self->get_env($c);
35 $c->res->from_psgi_response(
36 $psgi_app->($env));
37 }
38
39 sub path_example_args1 :Path('path-example-args1') {
40 my ($self, $c) = @_;
41 my $env = $self->get_env($c);
42 $c->res->from_psgi_response(
43 $psgi_app->($env));
44 }
45
46 sub chained :Chained(/) PathPrefix CaptureArgs(0) { }
47
48 sub from_chain :Chained('chained') PathPart('') CaptureArgs(0) {}
49
50 sub end_chain :Chained('from_chain') PathPath(abc-123) Args(1)
51 {
52 my ($self, $c) = @_;
53 my $env = $self->get_env($c);
54 $c->res->from_psgi_response(
55 $psgi_app->($env));
56 }
57
58 sub get_env {
59 my ($self, $c) = @_;
60 if($c->req->query_parameters->{path_prefix}) {
61 return $c->Catalyst::Utils::env_at_path_prefix;
62 } elsif($c->req->query_parameters->{env_path}) {
63 return $c->Catalyst::Utils::env_at_action;
64 } elsif($c->req->query_parameters->{path}) {
65 return $c->Catalyst::Utils::env_at_request_uri;
66 } else {
67 return $c->req->env;
68 }
69 }
70
71 $INC{'MyApp/Controller/User.pm'} = __FILE__;
72
73 package MyApp;
74 use Catalyst;
75 MyApp->setup;
76
77}
78
79use Test::More;
80use Catalyst::Test 'MyApp';
81
82# BEGIN [user/local_example]
83{
84 my ($res, $c) = ctx_request('/user/local_example');
85 is $c->action, 'user/local_example';
86 is $res->content, '/user/local_example';
87 is_deeply $c->req->args, [];
88}
89
90{
91 my ($res, $c) = ctx_request('/user/local_example/111/222');
92 is $c->action, 'user/local_example';
93 is $res->content, '/user/local_example/111/222';
94 is_deeply $c->req->args, [111,222];
95}
96
97{
98 my ($res, $c) = ctx_request('/user/local_example?path_prefix=1');
99 is $c->action, 'user/local_example';
100 is $res->content, '/local_example';
101 is_deeply $c->req->args, [];
102}
103
104{
105 my ($res, $c) = ctx_request('/user/local_example/111/222?path_prefix=1');
106 is $c->action, 'user/local_example';
107 is $res->content, '/local_example/111/222';
108 is_deeply $c->req->args, [111,222];
109}
110
111{
112 my ($res, $c) = ctx_request('/user/local_example?env_path=1');
113 is $c->action, 'user/local_example';
114 is $res->content, '/';
115 is_deeply $c->req->args, [];
116}
117
118{
119 my ($res, $c) = ctx_request('/user/local_example/111/222?env_path=1');
120 is $c->action, 'user/local_example';
121 is $res->content, '/111/222';
122 is_deeply $c->req->args, [111,222];
123}
124
125{
126 my ($res, $c) = ctx_request('/user/local_example?path=1');
127 is $c->action, 'user/local_example';
128 is $res->content, '/';
129 is_deeply $c->req->args, [];
130}
131
132{
133 my ($res, $c) = ctx_request('/user/local_example/111/222?path=1');
134 is $c->action, 'user/local_example';
135 is $res->content, '/';
136 is_deeply $c->req->args, [111,222];
137}
138
139# END [user/local_example]
140
141# BEGIN [/user/local_example_args1/***/]
142
143{
144 my ($res, $c) = ctx_request('/user/local_example_args1/333');
145 is $c->action, 'user/local_example_args1';
146 is $res->content, '/user/local_example_args1/333';
147 is_deeply $c->req->args, [333];
148}
149
150{
151 my ($res, $c) = ctx_request('/user/local_example_args1/333?path_prefix=1');
152 is $c->action, 'user/local_example_args1';
153 is $res->content, '/local_example_args1/333';
154 is_deeply $c->req->args, [333];
155}
156
157{
158 my ($res, $c) = ctx_request('/user/local_example_args1/333?env_path=1');
159 is $c->action, 'user/local_example_args1';
160 is $res->content, '/333';
161 is_deeply $c->req->args, [333];
162}
163
164{
165 my ($res, $c) = ctx_request('/user/local_example_args1/333?path=1');
166 is $c->action, 'user/local_example_args1';
167 is $res->content, '/';
168 is_deeply $c->req->args, [333];
169}
170
171# END [/user/local_example_args1/***/]
172
173# BEGIN [/user/path-example]
174
175{
176 my ($res, $c) = ctx_request('/user/path-example');
177 is $c->action, 'user/path_example';
178 is $res->content, '/user/path-example';
179 is_deeply $c->req->args, [];
180}
181
182{
183 my ($res, $c) = ctx_request('/user/path-example?path_prefix=1');
184 is $c->action, 'user/path_example';
185 is $res->content, '/path-example';
186 is_deeply $c->req->args, [];
187}
188
189{
190 my ($res, $c) = ctx_request('/user/path-example?env_path=1');
191 is $c->action, 'user/path_example';
192 is $res->content, '/';
193 is_deeply $c->req->args, [];
194}
195
196{
197 my ($res, $c) = ctx_request('/user/path-example?path=1');
198 is $c->action, 'user/path_example';
199 is $res->content, '/';
200 is_deeply $c->req->args, [];
201}
202
203
204{
205 my ($res, $c) = ctx_request('/user/path-example/111/222');
206 is $c->action, 'user/path_example';
207 is $res->content, '/user/path-example/111/222';
208 is_deeply $c->req->args, [111,222];
209}
210
211{
212 my ($res, $c) = ctx_request('/user/path-example/111/222?path_prefix=1');
213 is $c->action, 'user/path_example';
214 is $res->content, '/path-example/111/222';
215 is_deeply $c->req->args, [111,222];
216}
217
218{
219 my ($res, $c) = ctx_request('/user/path-example/111/222?env_path=1');
220 is $c->action, 'user/path_example';
221 is $res->content, '/111/222';
222 is_deeply $c->req->args, [111,222];
223}
224
225{
226 my ($res, $c) = ctx_request('/user/path-example/111/222?path=1');
227 is $c->action, 'user/path_example';
228 is $res->content, '/';
229 is_deeply $c->req->args, [111,222];
230}
231
232{
233 my ($res, $c) = ctx_request('/user/path-example-args1/333');
234 is $c->action, 'user/path_example_args1';
235 is $res->content, '/user/path-example-args1/333';
236 is_deeply $c->req->args, [333];
237}
238
239{
240 my ($res, $c) = ctx_request('/user/path-example-args1/333?path_prefix=1');
241 is $c->action, 'user/path_example_args1';
242 is $res->content, '/path-example-args1/333';
243 is_deeply $c->req->args, [333];
244}
245
246{
247 my ($res, $c) = ctx_request('/user/path-example-args1/333?env_path=1');
248 is $c->action, 'user/path_example_args1';
249 is $res->content, '/333';
250 is_deeply $c->req->args, [333];
251}
252
253{
254 my ($res, $c) = ctx_request('/user/path-example-args1/333?path=1');
255 is $c->action, 'user/path_example_args1';
256 is $res->content, '/';
257 is_deeply $c->req->args, [333];
258}
259
260# Chaining test /user/end_chain/*
261#
262#
263
264{
265 my ($res, $c) = ctx_request('/user/end_chain/444');
266 is $c->action, 'user/end_chain';
267 is $res->content, '/user/end_chain/444';
268 is_deeply $c->req->args, [444];
269}
270
271{
272 my ($res, $c) = ctx_request('/user/end_chain/444?path_prefix=1');
273 is $c->action, 'user/end_chain';
274 is $res->content, '/end_chain/444';
275 is_deeply $c->req->args, [444];
276}
277
278{
279 my ($res, $c) = ctx_request('/user/end_chain/444?env_path=1');
280 is $c->action, 'user/end_chain';
281 is $res->content, '/444';
282 is_deeply $c->req->args, [444];
283}
284
285{
286 my ($res, $c) = ctx_request('/user/end_chain/444?path=1');
287 is $c->action, 'user/end_chain';
288 is $res->content, '/';
289 is_deeply $c->req->args, [444];
290}
291
292
293done_testing();
294
295__END__
296
297
298use Plack::App::URLMap;
299use HTTP::Request::Common;
300use HTTP::Message::PSGI;
301
302my $urlmap = Plack::App::URLMap->new;
303
304my $app1 = sub {
305 my $env = shift;
306 return [200, [], [
307 "REQUEST_URI: $env->{REQUEST_URI}, FROM: $env->{MAP_TO}, PATH_INFO: $env->{PATH_INFO}, SCRIPT_NAME $env->{SCRIPT_NAME}"]];
308};
309
310$urlmap->map("/" => sub { my $env = shift; $env->{MAP_TO} = '/'; $app1->($env)});
311$urlmap->map("/foo" => sub { my $env = shift; $env->{MAP_TO} = '/foo'; $app1->($env)});
312$urlmap->map("/bar/baz" => sub { my $env = shift; $env->{MAP_TO} = '/foo/bar'; $app1->($env)});
313
314my $app = $urlmap->to_app;
315
316warn $app->(req_to_psgi(GET '/'))->[2]->[0];
317warn $app->(req_to_psgi(GET '/111'))->[2]->[0];
318warn $app->(req_to_psgi(GET '/foo'))->[2]->[0];
319warn $app->(req_to_psgi(GET '/foo/222'))->[2]->[0];
320warn $app->(req_to_psgi(GET '/bar/baz'))->[2]->[0];
321warn $app->(req_to_psgi(GET '/bar/baz/333'))->[2]->[0];
322