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