$c->res->body('Body');
}
+
+sub test_redirect :Global {
+ my ($self, $c) = @_;
+ # Don't set content_type
+ # Don't set body
+ $c->res->redirect('/go_here');
+}
+
+sub test_redirect_with_contenttype :Global {
+ my ($self, $c) = @_;
+ # set content_type but don't set body
+ $c->res->content_type('image/jpeg');
+ $c->res->redirect('/go_here');
+}
+
+sub test_redirect_with_content :Global {
+ my ($self, $c) = @_;
+ $c->res->content_type('text/plain');
+ $c->res->body('Please kind sir, I beg you to go to /go_here.');
+ $c->res->redirect('/go_here');
+}
+
sub end : Private {
my ($self,$c) = @_;
}
--- /dev/null
+use FindBin;
+use lib "$FindBin::Bin/lib";
+use Catalyst::Test 'TestApp', {default_host => 'default.com'};
+use Catalyst::Request;
+
+use Test::More tests => 12;
+
+ # test redirect
+ {
+ my $request =
+ HTTP::Request->new( GET => 'http://localhost:3000/test_redirect' );
+
+ ok( my $response = request($request), 'Request' );
+ is( $response->code, 302, 'Response Code' );
+
+ # When no body and no content_type has been set, redirecting should set both.
+ is( $response->header( 'Content-Type' ), 'text/html; charset=utf-8', 'Content Type' );
+ like( $response->content, qr/<body>/, 'Content contains HTML body' );
+ }
+
+ # test redirect without a body and but with a content_type set explicitly by the developer
+ {
+ my $request =
+ HTTP::Request->new( GET => 'http://localhost:3000/test_redirect_with_contenttype' );
+
+ ok( my $response = request($request), 'Request' );
+ is( $response->code, 302, 'Response Code' );
+
+ # When the developer has not set content body, we set it. The content type must always match the body, so it should be overwritten.
+ is( $response->header( 'Content-Type' ), 'text/html; charset=utf-8', 'Content Type' );
+ like( $response->content, qr/<body>/, 'Content contains HTML body' );
+ }
+
+ # test redirect without a body and but with a content_type set explicitly by the developer
+ {
+ my $request =
+ HTTP::Request->new( GET => 'http://localhost:3000/test_redirect_with_content' );
+
+ ok( my $response = request($request), 'Request' );
+ is( $response->code, 302, 'Response Code' );
+
+ # When the developer sets both the content body and content type, the set content body and content_type should get through.
+ is( $response->header( 'Content-Type' ), 'text/plain', 'Content Type' );
+ like( $response->content, qr/kind sir/, 'Content contains content set by the Controller' );
+ }