1 package t::lib::Mocks::Logger;
3 # This file is part of Koha.
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
20 use base 'Test::Builder::Module';
21 use base qw(Class::Accessor);
26 my $CLASS = __PACKAGE__;
30 t::lib::Mocks::Logger - A library to mock Koha::Logger for testing
38 my $logger = t::lib::Mocks::Logger->new();
40 Mocks the Koha::Logger for testing purposes. The mocked subs (log levels)
41 return the passed string, in case we want to test the debugging string contents.
46 my ( $class, $params ) = @_;
48 my $mocked_logger_class = Test::MockModule->new("Koha::Logger");
49 my $mocked_logger = Test::MockObject->new();
51 $mocked_logger_class->mock(
54 return $mocked_logger;
58 my $self = $class->SUPER::new(
59 { logger => $mocked_logger_class,
70 foreach my $level (levels()) {
75 push @{ $self->{$level} }, $message;
86 $logger->debug_is($expected);
88 Method for testing a message was written to the 'debug' log level.
93 my ( $self, $expect, $name ) = @_; $self->generic_is( 'debug', $expect, $name ); return $self;
98 $logger->error_is($expected);
100 Method for testing a message was written to the 'error' log level.
105 my ( $self, $expect, $name ) = @_; $self->generic_is( 'error', $expect, $name ); return $self;
110 $logger->fatal_is($expected);
112 Method for testing a message was written to the 'fatal' log level.
117 my ( $self, $expect, $name ) = @_; $self->generic_is( 'fatal', $expect, $name ); return $self;
122 $logger->info_is($expected);
124 Method for testing a message was written to the 'info' log level.
129 my ( $self, $expect, $name ) = @_; $self->generic_is( 'info', $expect, $name ); return $self;
134 $logger->trace_is($expected);
136 Method for testing a message was written to the 'trace' log level.
141 my ( $self, $expect, $name ) = @_; $self->generic_is( 'trace', $expect, $name ); return $self;
146 $logger->warn_is($expected);
148 Method for testing a message was written to the 'warn' log level.
153 my ( $self, $expect, $name ) = @_; $self->generic_is( 'warn', $expect, $name ); return $self;
158 $logger->debug_like($expected);
160 Method for testing a message matching a regex was written to the 'debug' log level.
165 my ( $self, $expect, $name ) = @_; $self->generic_like( 'debug', $expect, $name ); return $self;
170 $logger->error_like($expected);
172 Method for testing a message matching a regex was written to the 'error' log level.
177 my ( $self, $expect, $name ) = @_; $self->generic_like( 'error', $expect, $name ); return $self;
182 $logger->fatal_like($expected);
184 Method for testing a message matching a regex was written to the 'fatal' log level.
189 my ( $self, $expect, $name ) = @_; $self->generic_like( 'fatal', $expect, $name ); return $self;
194 $logger->info_like($expected);
196 Method for testing a message matching a regex was written to the 'info' log level.
201 my ( $self, $expect, $name ) = @_; $self->generic_like( 'info', $expect, $name ); return $self;
206 $logger->trace_like($expected);
208 Method for testing a message matching a regex was written to the 'trace' log level.
213 my ( $self, $expect, $name ) = @_; $self->generic_like( 'trace', $expect, $name ); return $self;
218 $logger->warn_like($expected);
220 Method for testing a message matching a regex was written to the 'warn' log level.
225 my ( $self, $expect, $name ) = @_; $self->generic_like( 'warn', $expect, $name ); return $self;
230 is( $logger->count( [ $level ] ), 0 'No logs!' );
232 Method for counting the generated messages. An optional I<$level> parameter
233 can be passed to restrict the count to the passed level.
238 my ( $self, $level ) = @_;
243 map { $sum += scalar @{$self->{$_}} } levels();
248 return scalar @{ $self->{$level} };
253 $logger->debug_is( "Something", "Something was sent to 'debug'" )
254 ->warn_like( qr/^Something$/, "Something was sent to 'warn" )
255 ->clear( [ $level ] );
257 A method for resetting the mocked I<$logger> object buffer. Useful to avoid inter-tests
263 my ( $self, $level ) = @_;
266 $self->{$level} = [];
269 foreach my $l (levels()) {
277 =head2 Internal methods
281 Internal method to be used to build log level-specific exact string test methods.
286 my ( $self, $level, $expect, $name ) = @_;
288 local $Test::Builder::Level = $Test::Builder::Level + 1;
290 my $string = shift @{ $self->{$level} };
292 my $tb = $CLASS->builder;
293 return $tb->is_eq( $string, $expect, $name);
298 Internal method to be used to build log level-specific regex string test methods.
303 my ( $self, $level, $expect, $name ) = @_;
305 local $Test::Builder::Level = $Test::Builder::Level + 1;
307 my $string = shift @{ $self->{$level} };
309 my $tb = $CLASS->builder;
310 return $tb->like( $string, $expect, $name);
315 Internal method that returns a list of valid log levels.
320 return qw(trace debug info warn error fatal);