File: 08_errors.t

package info (click to toggle)
libdancer-perl 1.3521%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 2,460 kB
  • sloc: perl: 7,436; xml: 2,211; sh: 54; makefile: 32; sql: 5
file content (59 lines) | stat: -rw-r--r-- 1,786 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use Test::More;
use Dancer ':syntax', ':tests';
use Dancer::Test;
use Dancer::Error;
use Dancer::ModuleLoader;

plan tests => 12;

set show_errors => 1;

my $error = Dancer::Error->new(code => 500);
ok defined($error) => "error is defined";
ok $error->title   => "title is set";

SKIP: {
    skip "JSON is required", 10 unless Dancer::ModuleLoader->load('JSON');
    set 'serializer' => 'JSON';
    my $error = Dancer::Error->new( code => 400, message => { foo => 'bar' } );
    ok defined($error) => "error is defined";

    my $response = $error->render();
    isa_ok $response => 'Dancer::Response';

    is     $response->{status}  => 400;
    like   $response->{content} => qr/foo/;

    # FIXME: i think this is a bug where serializer cannot be set to 'undef'
    # without the Serializer.pm trying to load JSON as a default serializer

    ##  Error Templates

    set(serializer => undef,
        warnings => 1,
        error_template => "error.tt",
        views => path(dirname(__FILE__), 'views'));

    get '/warning'        => sub { my $a = undef; @$a; };
    get '/warning/:param' => sub { my $a = undef; @$a; };

    response_content_like [GET => '/warning'],
      qr/ERROR: Runtime Error/,
      "template is used";

    response_content_like [GET => '/warning'],
      qr/PERL VERSION: $]/, "perl_version is available";

    response_content_like [GET => '/warning'],
      qr/DANCER VERSION: $Dancer::VERSION/, "dancer_version is available";

    response_content_like [GET => '/warning'],
      qr/ERROR TEMPLATE: error.tt/, "settings are available";

    response_content_like [GET => '/warning'],
      qr/REQUEST METHOD: GET/, "request is available";

    response_content_like [GET => '/warning/value'],
      qr/PARAM VALUE: value/, "params are available";
};