11ef840f9abdb1a1abd870c04909ec9b9d7b1da9
[catagits/Catalyst-Runtime.git] / t / unit_core_setup_stats.t
1 use strict;
2 use warnings;
3
4 use Test::More tests => 5;
5 use Class::MOP::Class;
6
7 use Catalyst ();
8
9 my %log_messages; # TODO - Test log messages as expected.
10 my $mock_log = Class::MOP::Class->create_anon_class(
11     methods => {
12         map { my $level = $_;
13             $level => sub {
14                 $log_messages{$level} ||= [];
15                 push(@{ $log_messages{$level} }, $_[1]);
16             },
17         }
18         qw/debug info warn error fatal/,
19     },
20 )->new_object;
21
22 sub mock_app {
23     my $name = shift;
24     %log_messages = (); # Flatten log messages.
25     my $meta = Moose->init_meta( for_class => $name );
26     $meta->superclasses('Catalyst');
27     $meta->add_method('log', sub { $mock_log }); 
28     return $meta->name;
29 }
30
31 local %ENV = %ENV;
32
33 # Remove all relevant env variables to avoid accidental fail
34 foreach my $name (grep { /^(CATALYST|TESTAPP)/ } keys %ENV) {
35     delete $ENV{$name};
36 }
37
38 {
39     my $app = mock_app('TestAppNoStats');
40     $app->setup_stats();
41     ok !$app->use_stats, 'stats off by default';
42 }
43 {
44     my $app = mock_app('TestAppStats');
45     $app->setup_stats(1);
46     ok $app->use_stats, 'stats on if you say >setup_stats(1)';
47 }
48 {
49     my $app = mock_app('TestAppStatsDebugTurnsStatsOn');
50     $app->meta->add_method('debug' => sub { 1 });
51     $app->setup_stats();
52     ok $app->use_stats, 'debug on turns stats on';
53 }
54 {
55     local %ENV = %ENV;
56     $ENV{CATALYST_STATS} = 1;
57     my $app = mock_app('TestAppStatsEnvSet');
58     $app->setup_stats();
59     ok $app->use_stats, 'ENV turns stats on';
60 }
61 {
62     local %ENV = %ENV;
63     $ENV{CATALYST_STATS} = 0;
64     my $app = mock_app('TestAppStatsEnvUnset');
65     $app->meta->add_method('debug' => sub { 1 });
66     $app->setup_stats(1);
67     ok !$app->use_stats, 'ENV turns stats off, even when debug on and ->setup_stats(1)';
68 }
69