X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=t%2Fquery_constraints.t;h=81e3e1d4ebba479f0debeefa7e6e8c3d59a43e4a;hp=0eba004ec7a415b0e03639c44f38680838585897;hb=a8020c62d2a52f96f14d288f5b81c6940be858b4;hpb=8748abc507b9025f3bb4c806800e28cef79f1c0a diff --git a/t/query_constraints.t b/t/query_constraints.t index 0eba004..81e3e1d 100644 --- a/t/query_constraints.t +++ b/t/query_constraints.t @@ -41,7 +41,8 @@ BEGIN { use Moose; use MooseX::MethodAttributes; - use MyApp::Types qw/Tuple Int Str StrMatch ArrayRef Enum UserId Heart/; + use Types::Standard 'slurpy'; + use MyApp::Types qw/Dict Tuple Int StrMatch HashRef ArrayRef Enum UserId Heart/; extends 'Catalyst::Controller'; @@ -51,6 +52,23 @@ BEGIN { $c->res->body("page ${\$c->req->query_parameters->{page}}, user ${\$c->req->query_parameters->{user}[1]}"); } + sub user_slurps :Local Args(1) + Query(page=>Int,user=>Tuple[Enum['a','b'],Int],...) { + my ($self, $c, $int) = @_; + $c->res->body("page ${\$c->req->query_parameters->{page}}, user ${\$c->req->query_parameters->{user}[1]}"); + } + + sub string_types :Local Query(q=>'Str',age=>'Int') { pop->res->body('string_type') } + + sub as_ref :Local Query(Dict[age=>Int,sex=>Enum['f','m','o'], slurpy HashRef[Int]]) { pop->res->body('as_ref') } + + sub utf8 :Local Query(utf8=>Heart) { pop->res->body("heart") } + + sub chain :Chained(/) CaptureArgs(0) Query(age=>Int,...) { } + + sub big :Chained(chain) PathPart('') Args(0) Query(size=>Int,...) { pop->res->body('big') } + sub small :Chained(chain) PathPart('') Args(0) Query(size=>UserId,...) { pop->res->body('small') } + sub default :Default { my ($self, $c, $int) = @_; $c->res->body('default'); @@ -71,4 +89,89 @@ use Catalyst::Test 'MyApp'; is $res->content, 'page 10, user 100'; } +{ + my $res = request '/user/1?page=10&user=d&user=100'; + is $res->content, 'default'; +} + +{ + my $res = request '/user/1?page=string&user=a&user=100'; + is $res->content, 'default'; +} + +{ + my $res = request '/user/1?page=10&user=a&user=100&foo=bar'; + is $res->content, 'default'; +} + +{ + my $res = request '/user/1?page=10&user=a&user=100&user=bar'; + is $res->content, 'default'; +} + +{ + my $res = request '/user_slurps/1?page=10&user=a&user=100&foo=bar'; + is $res->content, 'page 10, user 100'; +} + +{ + my $res = request '/string_types?q=sssss&age=10'; + is $res->content, 'string_type'; +} + +{ + my $res = request '/string_types?w=sssss&age=10'; + is $res->content, 'default'; +} + +{ + my $res = request '/string_types?q=sssss&age=string'; + is $res->content, 'default'; +} + +{ + my $res = request '/as_ref?q=sssss&age=string'; + is $res->content, 'default'; +} + +{ + my $res = request '/as_ref?age=10&sex=o&foo=bar&baz=bot'; + is $res->content, 'default'; +} + +{ + my $res = request '/as_ref?age=10&sex=o&foo=122&baz=300'; + is $res->content, 'as_ref'; +} + +{ + my $res = request '/utf8?utf8=♥'; + is $res->content, 'heart'; +} + +{ + my $res = request '/chain?age=string&size=2'; + is $res->content, 'default'; +} + +{ + my $res = request '/chain?age=string&size=string'; + is $res->content, 'default'; +} + +{ + my $res = request '/chain?age=50&size=string'; + is $res->content, 'default'; +} + +{ + my $res = request '/chain?age=10&size=100'; + is $res->content, 'big'; +} + +{ + my $res = request '/chain?age=10&size=2'; + is $res->content, 'small'; +} + done_testing;