Remove getStatus and setStatus in Session::Http, and replace them with status, from $session->status.

This commit is contained in:
Colin Kuskie 2010-11-21 21:11:41 -08:00
parent b830bd8e71
commit e5adc07a05
27 changed files with 88 additions and 129 deletions

View file

@ -284,3 +284,14 @@ WebGUI::Session::Var
==========================
WebGUI::Session::Var was removed, and all of its code merged into WebGUI::Session. Any call that used to be
made to $session->var should now go directly to $session.
WebGUI::Session::Http
==========================
getStatus and setStatus have been removed. To set or get the status of an HTTP response
generated by WebGUI, access the WebGUI::Response object in the session:
OLD: $session->http->getStatus();
NEW: $session->response->status();
OLD: $session->http->setStatus(200);
NEW: $session->response->status(200);

View file

@ -180,7 +180,7 @@ sub handle {
return;
}
# Keep processing for success codes
elsif ($session->http->getStatus < 200 || $session->http->getStatus > 299) {
elsif ($session->response->status < 200 || $session->response->status > 299) {
$session->http->sendHeader;
return;
}

View file

@ -619,7 +619,7 @@ sub checkView {
return "chunked";
}
elsif ($self->get("state") ne "published") { # tell em it doesn't exist anymore
$http->setStatus(410);
$session->response->status(410);
my $notFound = WebGUI::Asset->getNotFound($self->session);
$self->session->asset($notFound);
return $notFound->www_view;

View file

@ -615,7 +615,7 @@ sub www_view {
# Check to make sure it's not in the trash or some other weird place
if ($self->state ne "published") {
my $i18n = WebGUI::International->new($session,'Asset_File');
$session->http->setStatus(404);
$session->response->status(404);
return sprintf($i18n->get("file not found"), $self->getUrl());
}

View file

@ -466,7 +466,7 @@ sub www_view {
$self->session->http->setRedirect($self->getUrl("func=manageClipboard"));
return undef;
} else { # tell em it doesn't exist anymore
$self->session->http->setStatus(410);
$self->session->response->status(410);
return WebGUI::Asset->getNotFound($self->session)->www_view;
}
}

View file

@ -1624,7 +1624,7 @@ sub www_deleteThingDataViaAjax {
$session->http->setMimeType("application/json");
unless ($thingId && $thingDataId) {
$session->http->setStatus(400);
$session->response->status(400);
return JSON->new->encode({message => "Can't get thing data without a thingId and a thingDataId."});
}
@ -1639,7 +1639,7 @@ sub www_deleteThingDataViaAjax {
return JSON->new->encode({message => "Data with thingDataId $thingDataId was deleted."});
}
else {
$session->http->setStatus(404);
$session->response->status(404);
return JSON->new->encode({message => "The thingId you specified can not be found."});
}
}
@ -2583,7 +2583,7 @@ sub www_editThingDataSaveViaAjax {
my $i18n = WebGUI::International->new($self->session, "Asset_Thingy");
unless ($thingId && $thingDataId) {
$session->http->setStatus(400);
$session->response->status(400);
return JSON->new->encode({message => "Can't get thing data without a thingId and a thingDataId."});
}
@ -2593,22 +2593,22 @@ sub www_editThingDataSaveViaAjax {
,$thingProperties);
if($thingDataId eq 'new' && $self->hasEnteredMaxPerUser($thingId)){
$session->http->setStatus(400);
$session->response->status(400);
return JSON->new->encode({message => $i18n->get("has entered max per user message")});
}
my ($newThingDataId,$errors) = $self->editThingDataSave($thingId,$thingDataId);
if (@{ $errors }) {
$session->http->setStatus(400);
$session->response->status(400);
return JSON->new->encode($errors);
}
$session->http->setStatus("200");
$session->response->status("200");
return '{}';
}
else {
$session->log->warn("thingId ".$thingProperties->{thingId}." not found in thingProperties");
$session->http->setStatus(404);
$session->response->status(404);
return JSON->new->encode({message => "The thingId you requested can not be found."});
}
}
@ -2707,7 +2707,7 @@ sub www_getThingViaAjax {
$session->http->setMimeType("application/json");
unless ($thingId) {
$session->http->setStatus(400);
$session->response->status(400);
return JSON->new->encode({message => "Can't return thing properties without a thingId."});
}
@ -2729,7 +2729,7 @@ sub www_getThingViaAjax {
return JSON->new->encode($thingProperties);
}
else {
$session->http->setStatus(404);
$session->response->status(404);
return JSON->new->encode({message => "The thingId you requested can not be found."});
}
}
@ -2763,7 +2763,7 @@ sub www_getThingsViaAjax {
return JSON->new->encode(\@visibleThings);
}
else {
$session->http->setStatus(404);
$session->response->status(404);
return JSON->new->encode({message => "No visible Things were found in this Thingy."});
}
}
@ -3123,7 +3123,7 @@ sub www_searchViaAjax {
my $i18n = WebGUI::International->new($self->session,"Asset_Thingy");
unless ($thingId) {
$session->http->setStatus(400);
$session->response->status(400);
return JSON->new->encode({message => "Can't perform search without a thingId."});
}
@ -3138,7 +3138,7 @@ sub www_searchViaAjax {
return JSON->new->encode($var);
}
else {
$session->http->setStatus(404);
$session->response->status(404);
return JSON->new->encode({message => "The thingId you requested can not be found."});
}
}
@ -3557,7 +3557,7 @@ sub www_viewThingDataViaAjax {
$session->http->setMimeType("application/json");
unless ($thingId && $thingDataId) {
$session->http->setStatus(400);
$session->response->status(400);
return JSON->new->encode({message => "Can't get thing data without a thingId and a thingDataId."});
}
@ -3572,12 +3572,12 @@ sub www_viewThingDataViaAjax {
return JSON->new->encode($output);
}
else{
$session->http->setStatus(404);
$session->response->status(404);
return JSON->new->encode({message => "The thingDataId you requested can not be found."});
}
}
else {
$session->http->setStatus(404);
$session->response->status(404);
return JSON->new->encode({message => "The thingId you requested can not be found."});
}
}

View file

@ -94,7 +94,7 @@ sub addChild {
my $temp = WebGUI::Asset->newByPropertyHashRef($session, $properties) || croak "Couldn't create a new $properties->{className} asset!";
my $newAsset = $temp->addRevision($properties, $now, $options);
$self->updateHistory("added child ".$id);
$session->http->setStatus(201);
$session->response->status(201);
return $newAsset;
}

View file

@ -975,7 +975,7 @@ sub www_createAccountSave {
return undef;
}
else {
$self->session->http->setStatus(201);
$self->session->response->status(201);
}
return undef;

View file

@ -786,7 +786,7 @@ sub www_displayLogin {
sub www_login {
my $self = shift;
if(!$self->authenticate($self->session->form->process("username"),$self->session->form->process("identifier"))){
$self->session->http->setStatus(401);
$self->session->response->status(401);
$self->session->log->security("login to account ".$self->session->form->process("username")." with invalid information.");
my $i18n = WebGUI::International->new($self->session);
return $self->www_displayLogin("<h1>".$i18n->get(70)."</h1>".$self->error);

View file

@ -70,7 +70,7 @@ sub dispatch {
# display from cache if page hasn't been modified.
if ($session->user->isVisitor
&& !$session->http->ifModifiedSince($asset->getContentLastModified, $session->setting->get('maxCacheTimeout'))) {
$session->http->setStatus("304","Content Not Modified");
$session->response->status("304");
$session->http->sendHeader;
return "chunked";
}

View file

@ -46,7 +46,7 @@ The content handler for this package.
sub handler {
my ($session) = @_;
$session->http->setStatus(404);
$session->response->status(404);
my $output = "";
my $notFound = WebGUI::Asset->getNotFound($session);
if (defined $notFound) {

View file

@ -47,7 +47,7 @@ The content handler for this package.
sub handler {
my ($session) = @_;
if ($session->request->env->{"HTTP_X_MOZ"} eq "prefetch") { # browser prefetch is a bad thing
$session->http->setStatus(403);
$session->response->status(403);
}
return undef;
}

View file

@ -354,7 +354,7 @@ sub www_ajaxCreateUser {
# Verify access
if ( !canAdd($session) || !canUseService($session) ) {
# We need an automatic way to send a request for an http basic auth
$session->http->setStatus(401);
$session->response->status(401);
return createServiceResponse( $outputFormat, {
error => "WebGUI::Error::Unauthorized",
message => "",
@ -441,7 +441,7 @@ sub www_ajaxDeleteUser {
# Verify access
if ( !canEdit($session) || !canUseService($session) ) {
# We need an automatic way to send a request for an http basic auth
$session->http->setStatus(401);
$session->response->status(401);
return createServiceResponse( $outputFormat, {
error => "WebGUI::Error::Unauthorized",
message => "",
@ -458,7 +458,7 @@ sub www_ajaxDeleteUser {
} );
}
elsif ( $userId eq "1" || $userId eq "3" ) {
$session->http->setStatus(403);
$session->response->status(403);
return createServiceResponse( $outputFormat, {
error => 'WebGUI::Error::InvalidParam',
param => 'userId',
@ -508,7 +508,7 @@ sub www_ajaxUpdateUser {
# Verify access
if ( !canEdit($session) || !canUseService($session) ) {
# We need an automatic way to send a request for an http basic auth
$session->http->setStatus(401);
$session->response->status(401);
return createServiceResponse( $outputFormat, {
error => "WebGUI::Error::Unauthorized",
message => "",

View file

@ -156,7 +156,7 @@ sub _httpBasicLogin {
$self->session->request->headers_out->set(
'WWW-Authenticate' => 'Basic realm="'.$self->session->setting->get('companyName').'"'
);
$self->session->http->setStatus(401);
$self->session->response->status(401);
$self->session->http->sendHeader;
return '';
}

View file

@ -42,7 +42,6 @@ This package allows the manipulation of HTTP protocol information.
$http->sendHeader();
$mimetype = $http->getMimeType();
$code = $http->getStatus();
$boolean = $http->isRedirect();
$http->setCookie($name,$value);
@ -138,22 +137,6 @@ sub getRedirectLocation {
}
#-------------------------------------------------------------------
=head2 getStatus ( ) {
Returns the current HTTP status code. If no code has been set,
the code returned will be 200.
=cut
sub getStatus {
my $self = shift;
my $status = $self->{_http}{status} || "200";
return $status;
}
#-------------------------------------------------------------------
=head2 getStreamedFile ( ) {
@ -212,7 +195,7 @@ Returns a boolean value indicating whether the current page will redirect to som
sub isRedirect {
my $self = shift;
my $status = $self->getStatus;
my $status = $self->session->response->status;
return $status == 302 || $status == 301;
}
@ -264,7 +247,6 @@ sub sendHeader {
my %params;
if ($self->isRedirect()) {
$response->header(Location => $self->getRedirectLocation);
$response->status($self->getStatus);
} else {
$response->content_type($self->getMimeType);
my $cacheControl = $self->getCacheControl;
@ -297,7 +279,6 @@ sub sendHeader {
if ($self->getFilename) {
$response->header( 'Content-Disposition' => qq{attachment; filename="}.$self->getFilename().'"');
}
$response->status($self->getStatus());
}
return undef;
}
@ -311,7 +292,6 @@ sub _sendMinimalHeader {
"Pragma" => "no-cache",
"Cache-Control" => "no-cache",
);
$response->status($self->getStatus());
return undef;
}
@ -507,7 +487,7 @@ sub setRedirect {
return undef if ($url eq $self->session->url->page() && scalar(@params) < 1); # prevent redirecting to self
$self->session->log->info("Redirecting to $url");
$self->setRedirectLocation($url);
$self->setStatus($type);
$self->session->response->status($type);
$self->session->style->setMeta({"http-equiv"=>"refresh",content=>"0; URL=".$url});
}
@ -527,23 +507,6 @@ sub setRedirectLocation {
#-------------------------------------------------------------------
=head2 setStatus ( code )
Sets the HTTP status code.
=head3 code
An HTTP status code. It is a 3 digit status number.
=cut
sub setStatus {
my $self = shift;
$self->{_http}{status} = shift;
}
#-------------------------------------------------------------------
=head2 setStreamedFile ( ) {
Set a file to be streamed thru mod_perl.

View file

@ -60,7 +60,7 @@ Returns a message stating that this functionality can only be used by administra
sub adminOnly {
my $self = shift;
my $i18n = WebGUI::International->new($self->session);
$self->session->http->setStatus(401);
$self->session->response->status(401);
my $output = '<h1>'.$i18n->get(35).'</h1>';
$output .= $i18n->get(36);
return $self->session->style->userStyle($output);
@ -78,7 +78,7 @@ sub insufficient {
my $self = shift;
my $noStyle = shift;
my $i18n = WebGUI::International->new($self->session);
$self->session->http->setStatus(401);
$self->session->response->status(401);
my $output = '<h1>'.$i18n->get(37).'</h1>';
if ($noStyle) {
$self->session->style->useEmptyStyle(1);
@ -103,7 +103,7 @@ sub locked {
my $self = shift;
my $noStyle = shift;
my $i18n = WebGUI::International->new($self->session);
$self->session->http->setStatus(401);
$self->session->response->status(401);
my $output = '<h1>'.$i18n->get(37).'</h1>';
if ($noStyle) {
$self->session->style->useEmptyStyle(1);
@ -148,7 +148,7 @@ Returns a message stating that the user does not have the privileges necessary t
sub noAccess {
my $self = shift;
$self->session->http->setStatus(401);
$self->session->response->status(401);
if ($self->session->user->isVisitor) {
return WebGUI::Operation::Auth::www_auth($self->session, "init");
} else {
@ -171,7 +171,7 @@ Returns a message stating that the user they requested information about is no l
sub notMember {
my $self = shift;
my $i18n = WebGUI::International->new($self->session);
$self->session->http->setStatus(400);
$self->session->response->status(400);
my ($output);
$output = '<h1>'.$i18n->get(345).'</h1>';
$output .= $i18n->get(346);
@ -203,7 +203,7 @@ Returns a message stating that the user made a request to delete something that
sub vitalComponent {
my $self = shift;
my $i18n = WebGUI::International->new($self->session);
$self->session->http->setStatus(403);
$self->session->response->status(403);
my ($output);
$output = '<h1>'.$i18n->get(40).'</h1>';
$output .= $i18n->get(41);

View file

@ -715,7 +715,7 @@ sub www_processRecurringTransactionPostback {
# First check whether the original transaction actualy exists
if (WebGUI::Error->caught || !(defined $baseTransaction) ) {
$session->log->warn("Check recurring postback: No base transction for XID: [$originatingXid]");
$session->http->setStatus(500);
$session->response->status(500);
return "Check recurring postback. No base transction for XID: [$originatingXid]";
}

View file

@ -360,7 +360,7 @@ sub addFileFromFormPost {
my $attachmentLimit = shift || 99999;
my $session = $self->session;
return ""
if ($self->session->http->getStatus eq '413');
if ($self->session->response->status eq '413');
my $filename;
my $attachmentCount = 1;
foreach my $upload ($session->request->upload($formVariableName)) {

View file

@ -860,19 +860,19 @@ is $clippedAsset->get('state'), 'clipboard', '... clipped an asset';
$session->switchAdminOff;
$session->http->setRedirectLocation('');
$session->http->setStatus(200, 'OK');
$session->response->status(200, 'OK');
$trashedAsset->checkView();
is $session->http->getStatus, 410, '... status set to 410 for trashed asset';
is $session->response->status, 410, '... status set to 410 for trashed asset';
is $session->http->getRedirectLocation, '', '... no redirect set';
$session->http->setStatus(200, 'OK');
$session->response->status(200, 'OK');
$clippedAsset->checkView();
is $session->http->getStatus, 410, '... status set to 410 for cut asset';
is $session->response->status, 410, '... status set to 410 for cut asset';
is $session->http->getRedirectLocation, '', '... no redirect set';
$session->switchAdminOn;
$session->http->setStatus(200, 'OK');
$session->response->status(200, 'OK');
is $trashedAsset->checkView(), 'chunked', '... returns "chunked" when admin is on for trashed asset';
is $session->http->getRedirectLocation, $trashedAsset->getUrl('func=manageTrash'), '... trashed asset sets redirect to manageTrash';

View file

@ -353,26 +353,26 @@ is($printRemainingTicketsTemplateId, "hreA_bgxiTX-EzWCSZCZJw", 'Default print re
#Make sure permissions work on pages
my $data;
$session->user({userId => $crasher->getId});
$session->http->setStatus(201);
$session->response->status(201);
$data = $ems->www_viewSchedule();
is($session->http->getStatus, 401, 'www_viewSchedule: visitor may not see the schedule');
is($session->response->status, 401, 'www_viewSchedule: visitor may not see the schedule');
$data = $ems->www_printRemainingTickets();
is($session->http->getStatus, 401, 'www_printRemainingTickets: visitor may not print the remaining tickets');
is($session->response->status, 401, 'www_printRemainingTickets: visitor may not print the remaining tickets');
$session->http->setStatus(201);
$session->response->status(201);
$session->user({userId => $attender->getId});
$data = $ems->www_viewSchedule();
is($session->http->getStatus, 201, '... attender user can see the schedule');
is($session->response->status, 201, '... attender user can see the schedule');
$data = $ems->www_printRemainingTickets();
is($session->http->getStatus, 401, 'www_printRemainingTickets: attender may not print the remaining tickets');
is($session->response->status, 401, 'www_printRemainingTickets: attender may not print the remaining tickets');
$session->http->setStatus(201);
$session->response->status(201);
$session->user({userId => $registrar->getId});
$data = $ems->www_printRemainingTickets();
is($session->http->getStatus, 201, 'www_printRemainingTickets: registration staff may print the remaining tickets');
is($session->response->status, 201, 'www_printRemainingTickets: registration staff may print the remaining tickets');
$session->http->setStatus(201);
$session->response->status(201);
$session->user({userId => $crasher->getId});
my ($json, $records);
$json = $ems->www_getScheduleDataJSON();

View file

@ -172,7 +172,7 @@ cmp_deeply(from_json($surveyEnd), { type => 'forward', url => '/getting_started'
# Check a simple www_jumpTo request
$session->user( { userId => 3 } );
WebGUI::Test->getPage( $survey, 'www_jumpTo', { formParams => {id => '0'} } );
is( $session->http->getStatus, '201', 'Page request ok' ); # why is "201 - created" status used??
is( $session->response->status, '201', 'Page request ok' ); # why is "201 - created" status used??
is($survey->responseJSON->nextResponse, 0, 'S0 is the first response');
tie my %expectedSurveyOrder, 'Tie::IxHash';

View file

@ -430,10 +430,10 @@ $session->request->setup_body({
});
$session->user({userId => '3'});
$session->http->setStatus(200);
$session->response->status(200);
my $json = $thingy->www_editThingDataSaveViaAjax();
diag "json: ".$json;
is $json, '{}', 'www_editThingDataSaveViaAjax: Empty JSON hash';
is $session->http->getStatus, 200, '... http status=200';
is $session->response->status, 200, '... http status=200';
$session->request->setup_body({ });

View file

@ -224,14 +224,14 @@ WebGUI::Test->addToCleanup( $notModifiedSession );
my $output = WebGUI::Content::Asset::handler( $notModifiedSession );
is( $output, "chunked", "304 returns chunked" );
is( $notModifiedSession->http->getStatus, "304", "http status code set" );
is( $notModifiedSession->response->status, "304", "http status code set" );
ok( !$notModifiedSession->closed, "session is not closed" );
$notModifiedSession = WebGUI::Test->newSession( undef, $http_request);
WebGUI::Test->addToCleanup( $notModifiedSession );
$notModifiedSession->user({ userId => 3});
my $output = WebGUI::Content::Asset::handler( $notModifiedSession );
isnt( $notModifiedSession->http->getStatus, "304", "logged in user doesn't get 304" );
isnt( $notModifiedSession->response->status, "304", "logged in user doesn't get 304" );
ok( !$notModifiedSession->closed, "session is not closed" );
# Test that requesting a URL that doesn't exist, but one of the permutations does exist, returns undef

View file

@ -20,11 +20,12 @@ use Data::Dumper;
use Test::More; # increment this value for each test you create
use Test::Deep;
plan tests => 48;
plan tests => 46;
my $session = WebGUI::Test->session;
my $http = $session->http;
my $http = $session->http;
my $response = $session->response;
use Test::MockObject::Extends;
@ -38,37 +39,21 @@ $http->mock( getCookies => sub { return {$cookieName => $varId} } );
isa_ok($http, 'WebGUI::Session::Http', 'session has correct object type');
####################################################
#
# setStatus, getStatus
#
####################################################
$http->setStatus('123');
is($http->getStatus, '123', 'getStatus: returns correct code');
$http->setStatus('');
is($http->getStatus, '200', 'getStatus: returns default code');
$http->setStatus('', 'packets are great');
####################################################
#
# isRedirect
#
####################################################
$http->setStatus('200');
$response->status('200');
ok(!$http->isRedirect, 'isRedirect: 200 is not');
$http->setStatus('301');
$response->status('301');
ok($http->isRedirect, '... 301 is');
$http->setStatus('302');
$response->status('302');
ok($http->isRedirect, '... 302 is too');
$http->setStatus('200');
$response->status('200');
####################################################
#
@ -151,7 +136,7 @@ $http->setCacheControl(undef);
$session->request->uri('/here/later');
$http->setRedirect('/here/now');
is($http->getStatus, 302, 'setRedirect: sets HTTP status');
is($response->status, 302, 'setRedirect: sets HTTP status');
is($http->getRedirectLocation, '/here/now', 'setRedirect: redirect location');
$session->style->useEmptyStyle(1);
@ -234,7 +219,7 @@ is($http->sendHeader, undef, 'sendHeader returns undef when no request object is
my $guard = WebGUI::Test->cleanupGuard($session);
my $http = $session->http;
my $response = $session->response;
$http->setStatus(200, 'Just spiffy');
$response->status(200);
$http->setMimeType('');
$session->request->protocol('');
$http->setLastModified(1200);

View file

@ -83,7 +83,7 @@ my $i18n = WebGUI::International->new($session);
foreach my $test (@simpleTests) {
my $method = $test->{method};
my $output = $privilege->$method;
is($session->http->getStatus(), $test->{status}, "$method: status code");
is($session->response->status(), $test->{status}, "$method: status code");
my $title = $i18n->get($test->{titleCode});
like($output, qr{<h1>$title</h1>}, "$method: correct title");
like($output, qr{^USERSTYLE}, "$method: renders in WebGUI User Style");
@ -97,7 +97,7 @@ foreach my $test (@simpleTests) {
####################################################
my $output = $privilege->insufficient(1);
is($session->http->getStatus(), '401', 'insufficient: status code with Visitor');
is($session->response->status(), '401', 'insufficient: status code with Visitor');
my $title = $i18n->get(37);
unlike($output, qr{^USERSTYLE}, "insufficient: when noStyle is true the user style is not used");
like($output, qr{<h1>$title</h1>}, "insufficient: when noStyle is true the title is still okay");
@ -111,7 +111,7 @@ like($output, qr{<h1>$title</h1>}, "insufficient: when noStyle is true the title
$session->user({userId=>1});
my $output = $privilege->noAccess;
is($session->http->getStatus(), '401', 'noAccess: status code with Visitor');
is($session->response->status(), '401', 'noAccess: status code with Visitor');
##Is the auth screen returned, not validating the auth screen
is($output, WebGUI::Operation::Auth::www_auth($session, "init"), 'noAccess: visitor sees auth screen');

View file

@ -445,8 +445,8 @@ ok( ! $session->url->forceSecureConnection(), 'HTTPS must not be "on" to force S
ok( ! $session->url->forceSecureConnection('/test/url'), 'all conditions must be met, even if a URL is directly passed in');
##Validate the HTTP object state before we start
$session->http->setStatus('200', 'OK');
is($session->http->getStatus, 200, 'http status is okay, 200');
$session->response->status('200');
is($session->response->status, 200, 'http status is okay, 200');
is($session->http->getRedirectLocation, undef, 'redirect location is empty');
$env->{'psgi.url_scheme'} = "http";
@ -455,10 +455,10 @@ my $secureUrl = $session->url->getSiteURL . '/foo/bar/baz/buz';
$secureUrl =~ s/http:/https:/;
ok($session->url->forceSecureConnection('/foo/bar/baz/buz'), 'forced secure connection');
is($session->http->getStatus, 302, 'http status set to redirect, 302');
is($session->response->status, 302, 'http status set to redirect, 302');
is($session->http->getRedirectLocation, $secureUrl, 'redirect location set to proper passed in URL with SSL and sitename added');
$session->http->setStatus('200', 'OK');
$session->response->status('200', 'OK');
$session->http->setRedirectLocation(undef);
$secureUrl = $session->url->getSiteURL . $session->url->page();

View file

@ -482,10 +482,10 @@ cmp_bag(
#
####################################################
$session->http->setStatus(413);
$session->response->status(413);
is($fileStore->addFileFromFormPost(), '', 'addFileFromFormPost returns empty string when HTTP status is 413');
$session->http->setStatus(200);
$session->response->status(200);
$session->request->upload('files', []);
my $formStore = WebGUI::Storage->create($session);
addToCleanup($formStore);