#!/usr/bin/perl
BEGIN { use_ok(
'Catalyst::Plugin::CustomErrorMessage'
) or
exit
};
exit
main();
sub
main {
can_ok(
'Catalyst::Plugin::CustomErrorMessage'
,
'finalize_error'
);
SKIP: {
eval
"use base 'Class::Accessor::Fast'"
;
skip
'no "Class::Accessor::Fast" installed skipping fake Catalyst tests.'
, 22
if
$EVAL_ERROR
;
my
$c
;
diag
'> in debug mode'
;
$c
= MyCatalyst->new(
'debug'
=> 1,
'error'
=> [
'error message1'
,
'error message2'
,
],
);
$c
->finalize_error();
ok(
$c
->finalize_error_called,
'check if finalize_error() was really called'
);
ok(!
$c
->finalize_error_called,
'check internal finalize_error()'
);
is(
$c
->flash->{
'finalize_error'
},
undef
,
'flash empty'
);
is(
$c
->response->body,
undef
,
'response body empty'
);
diag
'> no action set tests'
;
$c
= MyCatalyst->new(
'error'
=> [
'error message1'
,
'error message2'
,
],
);
$c
->finalize_error();
ok(
$c
->finalize_error_called,
'check if it was really called'
);
is(
$c
->response->redirect,
'/'
,
'default redirect is "/"'
);
is(
$c
->flash->{
'finalize_error'
},
'error message1<br/> error message2'
,
'check error message in flash'
);
$c
->config->{
'custom-error-message'
}->{
'uri-for-not-found'
} =
'/custom'
;
$c
->finalize_error();
ok(
$c
->finalize_error_called,
'check if it was really called'
);
is(
$c
->response->redirect,
'/custom'
,
'config redirect is "/custom"'
);
diag
'> action set tests'
;
$c
= MyCatalyst->new(
'action'
=> MyCatalyst::Action->new(),
'error'
=> [
'error message1'
,
'error message2'
,
],
);
$c
->finalize_error();
ok(
$c
->finalize_error_called,
'check if it was really called'
);
is(
$c
->view_name,
'TT'
,
'default view is TT'
);
is(
$c
->view->template_name,
'error.tt2'
,
'default template is error.tt2'
);
is(
$c
->response->content_type,
'text/html; charset=utf-8'
,
'default content type is "text/html; charset=utf-8"'
);
my
$view_name
=
'View'
;
my
$content_type
=
'text/plain; charset=utf-8'
;
my
$error_template
=
'my_error.tt2'
;
my
$response_status
= 0;
$c
->config->{
'custom-error-message'
}->{
'error-template'
} =
$error_template
;
$c
->config->{
'custom-error-message'
}->{
'content-type'
} =
$content_type
;
$c
->config->{
'custom-error-message'
}->{
'view-name'
} =
$view_name
;
$c
->config->{
'custom-error-message'
}->{
'response-status'
} =
$response_status
;
$c
->finalize_error();
ok(
$c
->finalize_error_called,
'check if it was really called'
);
is(
$c
->view_name,
$view_name
,
'now view is "'
.
$view_name
.
'"'
);
is(
$c
->view->template_name,
'my_error.tt2'
,
'now template is my_error.tt2'
);
is(
$c
->response->content_type,
$content_type
,
'now content type is "'
.
$content_type
.
'"'
);
is(
$c
->response->status,
$response_status
,
'now response status is "'
.
$response_status
.
'"'
);
$c
->config({});
$c
->config->{
'custom-error-message'
}->{
'view-name'
} =
'BrokenView'
;
$c
->flash->{
'finalize_error'
} =
undef
;
$c
->response->body(
undef
);
$c
->finalize_error();
ok(
$c
->finalize_error_called,
'check if it was really called'
);
is(
$c
->flash->{
'finalize_error'
},
undef
,
'flash empty'
);
is(
$c
->response->body,
undef
,
'response body empty'
);
like(
$c
->
log
->error,
qr{non_existing_function}
,
'error is logged'
);
}
return
0;
}
BEGIN {
eval
"use base 'Class::Accessor::Fast'"
;
if
(not
$EVAL_ERROR
) {
__PACKAGE__->mk_accessors(
qw{
view_name
config
debug
error
action
response
flash
stash
_save_flash
}
);
}
}
sub
new {
my
$class
=
shift
;
my
%args
=
@_
;
my
$self
=
$class
->
next
::method(\
%args
);
$self
->response(MyCatalyst::Response->new());
$self
->flash({})
if
not
defined
$self
->flash;
$self
->stash({})
if
not
defined
$self
->stash;
$self
->config({})
if
not
defined
$self
->config;
return
$self
;
}
sub
finalize_error {
my
$self
=
shift
;
$self
->
next
::method;
$self
->finalize_error_called(1);
}
sub
finalize_error_called {
my
$self
=
shift
;
if
(
@_
== 0) {
if
(
$self
->{
'finalize_error_called'
}) {
$self
->{
'finalize_error_called'
} = 0;
return
1;
}
else
{
return
0;
}
}
else
{
$self
->{
'finalize_error_called'
} =
shift
;
return
;
}
}
sub
view {
my
$self
=
shift
;
my
$view_name
=
shift
;
if
(
defined
$view_name
) {
$self
->view_name(
$view_name
);
$view_name
=
'MyCatalyst::'
.
$view_name
;
$self
->{
'last_view_object'
} =
$view_name
->new();
}
return
$self
->{
'last_view_object'
};
}
sub
uri_for {
my
$self
=
shift
;
my
$path
=
shift
;
return
$path
;
}
sub
log
{
my
$self
=
shift
;
return
$self
->logger;
}
sub
logger {
my
$self
=
shift
;
$self
->{
'logger'
} = MyCatalyst::Logger->new()
if
(not
$self
->{
'logger'
});
return
$self
->{
'logger'
};
}
1;
BEGIN {
eval
"use base 'Class::Accessor::Fast'"
;
if
(not
$EVAL_ERROR
) {
__PACKAGE__->mk_accessors(
qw{
fatal
error
warn
info
debug
}
);
}
}
1;
BEGIN {
eval
"use base 'Class::Accessor::Fast'"
;
if
(not
$EVAL_ERROR
) {
__PACKAGE__->mk_accessors(
qw{
template_name
}
);
}
}
sub
render {
my
$self
=
shift
;
my
$c
=
shift
;
my
$template_name
=
shift
;
croak
'pass template name'
if
not
defined
$template_name
;
$self
->template_name(
$template_name
);
}
1;
BEGIN {
eval
"use base 'Class::Accessor::Fast'"
;
if
(not
$EVAL_ERROR
) {
__PACKAGE__->mk_accessors(
qw{
template_name
}
);
}
}
sub
render {
my
$self
=
shift
;
my
$c
=
shift
;
my
$template_name
=
shift
;
croak
'pass template name'
if
not
defined
$template_name
;
$self
->template_name(
$template_name
);
}
1;
BEGIN {
eval
"use base 'Class::Accessor::Fast'"
;
if
(not
$EVAL_ERROR
) {
__PACKAGE__->mk_accessors(
qw{
template_name
}
);
}
}
sub
render {
my
$self
=
shift
;
my
$c
=
shift
;
my
$template_name
=
shift
;
croak
'pass template name'
if
not
defined
$template_name
;
$self
->non_existing_function;
}
1;
BEGIN {
eval
"use base 'Class::Accessor::Fast'"
;
if
(not
$EVAL_ERROR
) {
__PACKAGE__->mk_accessors(
qw{
content_type
body
redirect
status
}
);
}
}
1;
BEGIN {
eval
"use base 'Class::Accessor::Fast'"
;
if
(not
$EVAL_ERROR
) {
__PACKAGE__->mk_accessors(
qw{
reverse
}
);
}
}
sub
new {
my
$class
=
shift
;
my
$self
=
$class
->SUPER::new(
@_
);
$self
->
reverse
(
'MyReverse'
)
if
not
defined
$self
->
reverse
;
return
$self
;
}
1;