use warnings; use strict; use Test::More; plan skip_all => "Test Cases are Sketch for next release"; __END__ # Test case to check that we now send scalar and filehandle like # bodys directly to the PSGI engine, rather than call $writer->write # or unroll the filehandle ourselves. { package MyApp::Controller::User; use base 'Catalyst::Controller'; use JSON::MaybeXS; my %user = ( name => 'John', age => 44, ); sub get_user :Chained(/) PathPrefix CaptureArgs(0) { pop->stash(user=>\%user); } sub show :GET Chained(get_user) PathPart('') Args(0) { my ($self, $c) = @_; my $user = $c->stash->{user}; $c->res->format( 'application/json' => sub { encode_json $user }, 'text/html' => sub { "

Hi I'm $user->{name} and my age is $user->{age}

" } ); } sub post_user :POST Chained(root) PathPart('') Args(0) Consumes(HTMLForm,JSON) { my ($self, $c) = @_; %user = (%user, %{$c->req->body_data}); $c->res->status(201); $c->res->location($c->uri_for( $self->action_for('show'))); } $INC{'MyApp/Controller/User.pm'} = __FILE__; package MyApp; use Catalyst; use HTTP::Headers::ActionPack; my $cn = HTTP::Headers::ActionPack->new ->get_content_negotiator; sub Catalyst::Response::format { my $self = shift; my %formats = @_; my @formats = keys %formats; my $accept = $self->_context->req->header('Accept') || $format{default} || $_[0]; $self->headers->header('Vary' => 'Accept'); $self->headers->header('Accepts' => (join ',', @formats)); if(my $which = $cn->choose_media_type(\@formats, $accept)) { $self->content_type($which); if(my $possible_body = $formats{$which}->($self)) { $self->body($possible_body) unless $self->has_body || $self->has_write_fh; } } else { $self->status(406); $self->body("Method Not Acceptable"); } } MyApp->setup; } use HTTP::Request::Common; use Catalyst::Test 'MyApp'; ok my($res, $c) = ctx_request('/'); done_testing();