diff --git a/system/Debug/Toolbar/Collectors/Logs.php b/system/Debug/Toolbar/Collectors/Logs.php index c6e22fc0bbd2..f9fdabecbff1 100644 --- a/system/Debug/Toolbar/Collectors/Logs.php +++ b/system/Debug/Toolbar/Collectors/Logs.php @@ -47,7 +47,7 @@ class Logs extends BaseCollector * * @var list */ - protected $data; + protected $data = []; /** * Returns the data of this collector to be formatted in the toolbar. @@ -68,7 +68,7 @@ public function isEmpty(): bool { $this->collectLogs(); - return $this->data !== []; + return $this->data === []; } /** diff --git a/tests/system/Debug/Toolbar/Collectors/LogsTest.php b/tests/system/Debug/Toolbar/Collectors/LogsTest.php new file mode 100644 index 000000000000..c239d0d422ba --- /dev/null +++ b/tests/system/Debug/Toolbar/Collectors/LogsTest.php @@ -0,0 +1,71 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace CodeIgniter\Debug\Toolbar\Collectors; + +use CodeIgniter\Log\Logger; +use CodeIgniter\Test\CIUnitTestCase; +use Config\Logger as LoggerConfig; +use Config\Services; +use PHPUnit\Framework\Attributes\Group; + +/** + * @internal + */ +#[Group('Others')] +final class LogsTest extends CIUnitTestCase +{ + private Logger $logger; + + protected function setUp(): void + { + parent::setUp(); + + // The logs collector relies on the logger being in debug mode + // so it would populate logCache. + $this->logger = new Logger(new LoggerConfig(), debug: true); + Services::injectMock('logger', $this->logger); + } + + public function testDisplay(): void + { + // log_message() always creates a new TestLogger instance while + // testing, so we need to log directly to our instance. + $this->logger->error('Test error'); + $this->logger->info('Test info'); + + $collector = new Logs(); + $result = $collector->display(); + + $this->assertArrayHasKey('logs', $result); + $this->assertCount(2, $result['logs']); + $this->assertSame('error', $result['logs'][0]['level']); + $this->assertSame('Test error', $result['logs'][0]['msg']); + $this->assertSame('info', $result['logs'][1]['level']); + $this->assertSame('Test info', $result['logs'][1]['msg']); + } + + public function testEmpty(): void + { + $collector = new Logs(); + $this->assertTrue($collector->isEmpty()); + } + + public function testNotEmpty(): void + { + $this->logger->warning('Test warning'); + + $collector = new Logs(); + $this->assertFalse($collector->isEmpty()); + } +} diff --git a/user_guide_src/source/changelogs/v4.6.4.rst b/user_guide_src/source/changelogs/v4.6.4.rst index 98dba2bff6d5..31b799f69c19 100644 --- a/user_guide_src/source/changelogs/v4.6.4.rst +++ b/user_guide_src/source/changelogs/v4.6.4.rst @@ -44,6 +44,7 @@ Bugs Fixed - **Forge:** Fixed a bug in ``Postgre`` and ``SQLSRV`` where changing a column's default value using ``Forge::modifyColumn()`` method produced incorrect SQL syntax. - **Model:** Fixed a bug in ``Model::replace()`` where ``created_at`` field (when available) wasn't set correctly. - **Model:** Fixed a bug in ``Model::insertBatch()`` and ``Model::updateBatch()`` where casts were not applied to inserted or updated values. +- **Toolbar:** Fixed bugs in ``Collectors\Logs`` that were preventing the "Logs" tab from appearing on the Debug Toolbar. - **Validation:** Fixed a bug in the ``FormatRules::valid_base64()`` validation rule that caused a TypeError when checking invalid base64 strings. See the repo's