Added tests for WebGUI PSGI app exceptions

This commit is contained in:
Patrick Donelan 2010-04-13 18:50:03 -04:00
parent 7ef963e74f
commit 82ce3331b7
3 changed files with 113 additions and 25 deletions

View file

@ -42,6 +42,9 @@ sub call {
my $session = try {
$env->{'webgui.session'} = WebGUI::Session->open( $config->getWebguiRoot, $config, $env );
} catch {
# We don't have a logger object, so for now just warn() the error
warn "Unable to instantiate WebGUI::Session - $_";
};
if ( !$session ) {
@ -49,7 +52,11 @@ sub call {
# We don't have access to a db connection to find out if the user is allowed to see
# a verbose error message or not, so resort to a generic Internal Server Error
# (using the error_docs mapping)
return Plack::Middleware::ErrorDocument->wrap( sub { [ 500, [], [] ] }, %{ $self->error_docs } )->($env);
if ($self->error_docs) {
return Plack::Middleware::ErrorDocument->wrap( sub { [ 500, [], [] ] }, %{ $self->error_docs } )->($env);
} else {
return [ 500, [ 'Content-Type' => 'text/plain' ], [ 'Internal Server Error' ] ];
}
}
my $debug = $session->log->canShowDebug;

View file

@ -272,27 +272,7 @@ Returns a reference to the logger.
=cut
sub getLogger {
my $self = shift;
if ($self->session->request) {
return $self->session->request->logger;
} else {
# Thanks to Plack, wG has been decoupled from Log4Perl
# However when called outside a web context, we currently still fall back to Log4perl
# (pending a better idea)
if (!$self->{_logger}) {
Log::Log4perl->init_once( $self->session->config->getWebguiRoot."/etc/log.conf" );
my $logger = Log::Log4perl->get_logger($self->session->config->getFilename);
$self->{_logger} = sub {
my $args = shift;
my $level = $args->{level};
$logger->$level($args->{message});
};
}
return $self->{_logger};
}
}
sub getLogger { $_[0]->{_logger} }
#-------------------------------------------------------------------
@ -349,9 +329,25 @@ An active WebGUI::Session object.
=cut
sub new {
my $class = shift;
my $session = shift;
bless {_queryCount=>0, _session=>$session}, $class;
my $class = shift;
my $session = shift;
my $logger = $session->request && $session->request->logger;
if ( !$logger ) {
# Thanks to Plack, wG has been decoupled from Log4Perl
# However when called outside a web context, we currently still fall back to Log4perl
# (pending a better idea)
Log::Log4perl->init_once( $session->config->getWebguiRoot . "/etc/log.conf" );
my $log4perl = Log::Log4perl->get_logger( $session->config->getFilename );
$logger = sub {
my $args = shift;
my $level = $args->{level};
$log4perl->$level( $args->{message} );
};
}
bless { _queryCount => 0, _session => $session, _logger => $logger }, $class;
}
#----------------------------------------------------------------------------