e2dba17f8926dc2365da292529886417cb8c70af
[catagits/Catalyst-Runtime.git] / t / aggregate / unit_core_setup_log.t
1 use strict;
2 use warnings;
3
4 use Test::More tests => 30;
5 use Test::Exception;
6
7 use Catalyst ();
8
9 sub mock_app {
10     my $name = shift;
11     my $meta = Moose->init_meta( for_class => $name );
12     $meta->superclasses('Catalyst');
13     return $meta->name;
14 }
15
16 sub test_log_object {
17     my ($log, %expected) = @_;
18     foreach my $level (keys %expected) {
19         my $method_name = "is_$level";
20         if ($expected{$level}) {
21             ok( $log->$method_name(), "Level $level on" );
22         }
23         else {
24             ok( !$log->$method_name(), "Level $level off" );
25         }
26     }
27 }
28
29 local %ENV = %ENV;
30
31 # Remove all relevant env variables to avoid accidental fail
32 foreach my $name (grep { /^(CATALYST|TESTAPP)/ } keys %ENV) {
33     delete $ENV{$name};
34 }
35
36 {
37     my $app = mock_app('TestAppParseLogLevels');
38     $app->setup_log('error,warn');
39     ok !$app->debug, 'Not in debug mode';
40     test_log_object($app->log,
41         fatal => 1,
42         error => 1,
43         warn => 1,
44         info => 0,
45         debug => 0,
46     );
47 }
48 {
49     local %ENV = %ENV;
50     $ENV{CATALYST_DEBUG} = 1;
51     my $app = mock_app('TestAppLogDebugEnvSet');
52     $app->setup_log('');
53     ok $app->debug, 'In debug mode';
54     test_log_object($app->log,
55         fatal => 1,
56         error => 1,
57         warn => 1,
58         info => 1,
59         debug => 1,
60     );
61 }
62 {
63     local %ENV = %ENV;
64     $ENV{CATALYST_DEBUG} = 0;
65     my $app = mock_app('TestAppLogDebugEnvUnset');
66     $app->setup_log('warn');
67     ok !$app->debug, 'Not In debug mode';
68     test_log_object($app->log,
69         fatal => 1,
70         error => 1,
71         warn => 1,
72         info => 0,
73         debug => 0,
74     );
75 }
76 {
77     my $app = mock_app('TestAppLogEmptyString');
78     $app->setup_log('');
79     ok !$app->debug, 'Not In debug mode';
80     # Note that by default, you get _all_ the log levels turned on
81     test_log_object($app->log,
82         fatal => 1,
83         error => 1,
84         warn => 1,
85         info => 1,
86         debug => 1,
87     );
88 }
89 {
90     my $app = mock_app('TestAppLogDebugOnly');
91     $app->setup_log('debug');
92     ok $app->debug, 'In debug mode';
93     test_log_object($app->log,
94         fatal => 1,
95         error => 1,
96         warn => 1,
97         info => 1,
98         debug => 1,
99     );
100 }