diff --git a/tests/LoggerTest.php b/tests/LoggerTest.php index b4eb77c..ddcb544 100644 --- a/tests/LoggerTest.php +++ b/tests/LoggerTest.php @@ -2,7 +2,10 @@ namespace yii1tech\psr\log\test; +use CLogger; +use Psr\Log\LogLevel; use yii1tech\psr\log\Logger; +use yii1tech\psr\log\test\support\ArrayLogger; class LoggerTest extends TestCase { @@ -16,4 +19,105 @@ public function testSetUpYiiLogEnabled(): void $logger->enableYiiLog(true); $this->assertTrue($logger->yiiLogEnabled); } + + public function testSetupPsrLogger(): void + { + $logger = new Logger(); + + $psrLogger = new ArrayLogger(); + + $logger->setPsrLogger($psrLogger); + + $this->assertSame($psrLogger, $logger->getPsrLogger()); + + $logger->setPsrLogger([ + 'class' => ArrayLogger::class, + ]); + + $this->assertTrue($logger->getPsrLogger() instanceof ArrayLogger); + } + + public function testWritePsrLog(): void + { + $psrLogger = new ArrayLogger(); + + $logger = (new Logger()) + ->setPsrLogger($psrLogger); + + $logger->log('test message', CLogger::LEVEL_INFO, 'test-category'); + + $logs = $psrLogger->flush(); + $this->assertFalse(empty($logs[0])); + $this->assertSame(LogLevel::INFO, $logs[0]['level']); + $this->assertSame('test message', $logs[0]['message']); + $this->assertSame(['category' => 'test-category'], $logs[0]['context']); + + $logger->log('test message', CLogger::LEVEL_INFO, ['category' => 'context-category']); + + $logs = $psrLogger->flush(); + $this->assertFalse(empty($logs[0])); + $this->assertSame(['category' => 'context-category'], $logs[0]['context']); + + $logger->log('test message', CLogger::LEVEL_INFO, ['foo' => 'bar']); + + $logs = $psrLogger->flush(); + $this->assertFalse(empty($logs[0])); + $this->assertSame( + [ + 'foo' => 'bar', + 'category' => 'application', + ], + $logs[0]['context'] + ); + } + + public function testWriteYiiLog(): void + { + $logger = (new Logger()) + ->enableYiiLog(true); + + $logger->log('test message', CLogger::LEVEL_INFO, 'test-category'); + + $logs = $logger->getLogs(); + $logger->flush(); + + $this->assertFalse(empty($logs[0])); + $this->assertSame('test message', $logs[0][0]); + $this->assertSame(LogLevel::INFO, $logs[0][1]); + $this->assertSame('test-category', $logs[0][2]); + + $logger->log('test message', CLogger::LEVEL_INFO, ['category' => 'context-category']); + + $logs = $logger->getLogs(); + $logger->flush(); + + $this->assertFalse(empty($logs[0])); + $this->assertSame('context-category', $logs[0][2]); + + $logger->log('test message', CLogger::LEVEL_INFO, ['foo' => 'bar']); + + $logs = $logger->getLogs(); + $logger->flush(); + + $this->assertFalse(empty($logs[0])); + $this->assertSame('application', $logs[0][2]); + + $logger->log('test message', LogLevel::INFO, 'test-category'); + + $logs = $logger->getLogs(); + $logger->flush(); + + $this->assertFalse(empty($logs[0])); + $this->assertSame(LogLevel::INFO, $logs[0][1]); + } + + public function testDisableYiiLog(): void + { + $logger = (new Logger()) + ->enableYiiLog(false); + + $logger->log('test message', CLogger::LEVEL_INFO, 'test-category'); + + $this->assertEmpty($logger->getLogs()); + } } \ No newline at end of file diff --git a/tests/support/AbstractArrayLogger.php b/tests/support/AbstractArrayLogger.php new file mode 100644 index 0000000..330d322 --- /dev/null +++ b/tests/support/AbstractArrayLogger.php @@ -0,0 +1,39 @@ +logs[] = [ + 'level' => $level, + 'message' => $message, + 'context' => $context, + ]; + } + + public function flush(): array + { + $logs = $this->logs; + + $this->logs = []; + + return $logs; + } +} \ No newline at end of file diff --git a/tests/support/ArrayLogger.php b/tests/support/ArrayLogger.php new file mode 100644 index 0000000..6a297f9 --- /dev/null +++ b/tests/support/ArrayLogger.php @@ -0,0 +1,21 @@ +=')) { + class ArrayLogger extends AbstractArrayLogger + { + public function log($level, string|\Stringable $message, array $context = []): void + { + $this->baseLog($level, $message, $context); + } + } +} else { + class ArrayLogger extends AbstractArrayLogger + { + public function log($level, $message, array $context = []): void + { + $this->baseLog($level, $message, $context); + } + } +} \ No newline at end of file