There is the `Psr\Log\LogLevel` class defining loglevel constants, to be fully compatible we should at least support those logging levels. Moreover this is the last part that was still required from `ILogger` interface, as we did not have alternatives for the loglevel constants. Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>pull/47293/head
parent
a751ff7b93
commit
81df2d2c12
@ -0,0 +1,88 @@ |
||||
<?php |
||||
|
||||
declare(strict_types=1); |
||||
|
||||
/** |
||||
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors |
||||
* SPDX-License-Identifier: AGPL-3.0-or-later |
||||
*/ |
||||
|
||||
namespace Test\Log; |
||||
|
||||
use OC\Log; |
||||
use OC\Log\PsrLoggerAdapter; |
||||
use OCP\ILogger; |
||||
use PHPUnit\Framework\MockObject\MockObject; |
||||
use Psr\Log\InvalidArgumentException; |
||||
use Psr\Log\LogLevel; |
||||
use Test\TestCase; |
||||
|
||||
class PsrLoggerAdapterTest extends TestCase { |
||||
protected Log&MockObject $logger; |
||||
protected PsrLoggerAdapter $loggerAdapter; |
||||
|
||||
protected function setUp(): void { |
||||
parent::setUp(); |
||||
|
||||
$this->logger = $this->createMock(Log::class); |
||||
$this->loggerAdapter = new PsrLoggerAdapter($this->logger); |
||||
} |
||||
|
||||
/** |
||||
* @dataProvider dataPsrLoggingLevels |
||||
*/ |
||||
public function testLoggingWithPsrLogLevels(string $level, int $expectedLevel): void { |
||||
$this->logger->expects(self::once()) |
||||
->method('log') |
||||
->with($expectedLevel, 'test message', ['app' => 'test']); |
||||
$this->loggerAdapter->log($level, 'test message', ['app' => 'test']); |
||||
} |
||||
|
||||
/** |
||||
* @dataProvider dataPsrLoggingLevels |
||||
*/ |
||||
public function testLogLevelToInt(string $level, int $expectedLevel): void { |
||||
$this->assertEquals($expectedLevel, PsrLoggerAdapter::logLevelToInt($level)); |
||||
} |
||||
|
||||
public function dataPsrLoggingLevels(): array { |
||||
return [ |
||||
[LogLevel::ALERT, ILogger::ERROR], |
||||
[LogLevel::CRITICAL, ILogger::ERROR], |
||||
[LogLevel::DEBUG, ILogger::DEBUG], |
||||
[LogLevel::EMERGENCY, ILogger::FATAL], |
||||
[LogLevel::ERROR, ILogger::ERROR], |
||||
[LogLevel::INFO, ILogger::INFO], |
||||
[LogLevel::NOTICE, ILogger::INFO], |
||||
[LogLevel::WARNING, ILogger::WARN], |
||||
]; |
||||
} |
||||
|
||||
/** |
||||
* @dataProvider dataInvalidLoggingLevel |
||||
*/ |
||||
public function testInvalidLoggingLevel($level): void { |
||||
$this->logger->expects(self::never()) |
||||
->method('log'); |
||||
$this->expectException(InvalidArgumentException::class); |
||||
|
||||
$this->loggerAdapter->log($level, 'valid message'); |
||||
} |
||||
|
||||
public function dataInvalidLoggingLevel(): array { |
||||
return [ |
||||
// invalid string |
||||
['this is not a level'], |
||||
// int out of range |
||||
[ILogger::DEBUG - 1], |
||||
[ILogger::FATAL + 1], |
||||
// float is not allowed |
||||
[1.2345], |
||||
// boolean is not a level |
||||
[true], |
||||
[false], |
||||
// |
||||
[null], |
||||
]; |
||||
} |
||||
} |
||||
Loading…
Reference in new issue