Add test for logging via psgi env
[catagits/Catalyst-Runtime.git] / t / psgi-log.t
1 use strict;
2 use warnings;
3 no warnings 'once';
4 use FindBin;
5 use lib "$FindBin::Bin/lib";
6
7 use Test::More;
8
9 use File::Spec;
10 use File::Temp qw/ tempdir /;
11
12 use TestApp;
13
14 use Plack::Builder;
15 use Plack::Test;
16 use HTTP::Request::Common;
17
18 {
19     package MockHandle;
20     use Moose;
21
22     has 'log' => (is => 'ro', isa => 'ArrayRef', traits => ['Array'], default => sub { [] },
23         handles => {
24             'logs' => 'elements',
25             'print' => 'push',
26         }
27     );
28
29     no Moose;
30 }
31
32
33 subtest "psgi.errors" => sub{
34
35     my $handle = MockHandle->new();
36     my $app = builder {
37
38         enable sub {
39             my $app = shift;
40             sub {
41                 my $env = shift;
42                 $env->{'psgi.errors'} = $handle;
43                 my $res = $app->($env);
44                 return $res;
45             };
46         };
47         TestApp->psgi_app;
48     };
49
50
51     test_psgi $app, sub {
52         my $cb = shift;
53         my $res = $cb->(GET "/log/debug");
54         my @logs = $handle->logs;
55         is(scalar(@logs), 1, "one event output");
56         like($logs[0], qr/debug$/, "event matches test data");
57     };
58 };
59
60 subtest "psgix.logger" => sub {
61
62     my @logs;
63     my $logger = sub {
64         push(@logs, @_);
65     };
66     my $app = builder {
67         enable sub {
68             my $app = shift;
69             sub {
70                 my $env = shift;
71                 $env->{'psgix.logger'} = $logger;
72                 $app->($env);
73             };
74         };
75         TestApp->psgi_app;
76     };
77
78     test_psgi $app, sub {
79         my $cb = shift;
80         my $res = $cb->(GET "/log/debug");
81         is(scalar(@logs), 1, "one event logged");
82         is_deeply($logs[0], { level => 'debug', message => "debug" }, "right stuff");
83     };
84 };
85
86
87
88 done_testing;