#!/usr/bin/env perl use strict; use warnings; use Test::More; use Plack::Test; { package FooController; use Moose; sub foo { "foo" } sub bar { "bar" } sub baz { "baz" } } { package Foo; use OX; has foo => ( is => 'ro', isa => 'FooController', ); router as { route '/:action' => 'foo._' => ( action => { isa => 'Str' }, ); }; } test_psgi app => Foo->new->to_app, client => sub { my $cb = shift; { my $req = HTTP::Request->new(GET => 'http://localhost/foo'); my $res = $cb->($req); is($res->content, 'foo', "got the right content"); } { my $req = HTTP::Request->new(GET => 'http://localhost/bar'); my $res = $cb->($req); is($res->content, 'bar', "got the right content"); } { my $req = HTTP::Request->new(GET => 'http://localhost/baz'); my $res = $cb->($req); is($res->content, 'baz', "got the right content"); } { my $req = HTTP::Request->new(GET => 'http://localhost/quux'); my $res = $cb->($req); is($res->code, 500, "got the right code"); } }; { package Bar; use OX; use Moose::Util::TypeConstraints qw(enum); has foo => ( is => 'ro', isa => 'FooController', ); router as { route '/:action' => 'foo._' => ( action => { isa => enum(['foo', 'bar', 'baz']) }, ); }; } test_psgi app => Bar->new->to_app, client => sub { my $cb = shift; { my $req = HTTP::Request->new(GET => 'http://localhost/foo'); my $res = $cb->($req); is($res->content, 'foo', "got the right content"); } { my $req = HTTP::Request->new(GET => 'http://localhost/bar'); my $res = $cb->($req); is($res->content, 'bar', "got the right content"); } { my $req = HTTP::Request->new(GET => 'http://localhost/baz'); my $res = $cb->($req); is($res->content, 'baz', "got the right content"); } { my $req = HTTP::Request->new(GET => 'http://localhost/quux'); my $res = $cb->($req); is($res->code, 404, "got the right code"); } }; done_testing;