From 58c8f1ad07405629117a862b07bf91d527584eff Mon Sep 17 00:00:00 2001 From: Arman <407448+armanist@users.noreply.github.com> Date: Mon, 6 Jul 2026 21:14:30 +0400 Subject: [PATCH 1/2] [#532] Fix debugger replay for array payloads --- src/Debugger/Debugger.php | 2 +- tests/Unit/Debugger/DebuggerTest.php | 29 +++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/Debugger/Debugger.php b/src/Debugger/Debugger.php index bdd0adc6..fb9837fd 100644 --- a/src/Debugger/Debugger.php +++ b/src/Debugger/Debugger.php @@ -174,7 +174,7 @@ protected function createTab(string $type): void foreach ($messages as $message) { $fn = key($message); - $this->debugBar[$type]->$fn($message[$fn]); + $this->debugBar[$type]->log($fn, $message[$fn]); } } diff --git a/tests/Unit/Debugger/DebuggerTest.php b/tests/Unit/Debugger/DebuggerTest.php index ac7d0c3d..8821c9f0 100644 --- a/tests/Unit/Debugger/DebuggerTest.php +++ b/tests/Unit/Debugger/DebuggerTest.php @@ -108,7 +108,7 @@ public function testDebugbarRender(): void $this->debugger->initStore(); - $rendererMock = Mockery::mock('alias:' . JavascriptRenderer::class); + $rendererMock = Mockery::mock(JavascriptRenderer::class); $rendererMock->shouldReceive('setBaseUrl')->andReturnSelf(); $rendererMock->shouldReceive('addAssets')->andReturnSelf(); $rendererMock->shouldReceive('renderHead')->andReturn(''); @@ -124,6 +124,33 @@ public function testDebugbarRender(): void $this->assertStringContainsString('
Debug Bar
', $output); } + public function testDebugbarRenderReplaysArrayPayloadsThroughLog(): void + { + $this->debugger->initStore(); + $this->debugger->addToStoreCell(Debugger::ROUTES, LogLevel::INFO, ['Route' => '/welcome']); + + $collectorMock = Mockery::mock(MessagesCollector::class); + $collectorMock->shouldReceive('log') + ->once() + ->with(LogLevel::INFO, ['Route' => '/welcome']); + + $this->debugBarMock->shouldReceive('hasCollector') + ->with(Debugger::ROUTES) + ->andReturn(true); + $this->debugBarMock->shouldReceive('offsetGet') + ->with(Debugger::ROUTES) + ->andReturn($collectorMock); + + $method = new \ReflectionMethod($this->debugger, 'createTab'); + $method->setAccessible(true); + $method->invoke($this->debugger, Debugger::ROUTES); + + $this->assertEquals( + ['info' => ['Route' => '/welcome']], + $this->debuggerStore->get(Debugger::ROUTES)[0] + ); + } + public function testDebugbarRenderReturnsEmptyWhenDisabled(): void { config()->set('app.debug', false); From dfe79cc4ab8007a5b9a00a2caf9e12f987e7cf58 Mon Sep 17 00:00:00 2001 From: Arman <407448+armanist@users.noreply.github.com> Date: Mon, 6 Jul 2026 21:32:54 +0400 Subject: [PATCH 2/2] [#532] Type debugger message collectors --- src/Debugger/Debugger.php | 25 +++++++++++++++++++++---- tests/Unit/Debugger/DebuggerTest.php | 5 ++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/Debugger/Debugger.php b/src/Debugger/Debugger.php index fb9837fd..a42db167 100644 --- a/src/Debugger/Debugger.php +++ b/src/Debugger/Debugger.php @@ -166,16 +166,33 @@ public function render(): string */ protected function createTab(string $type): void { - if (!$this->debugBar->hasCollector($type)) { - $this->debugBar->addCollector(new MessagesCollector($type)); - } + $collector = $this->resolveMessagesCollector($type); $messages = $this->store->get($type); foreach ($messages as $message) { $fn = key($message); - $this->debugBar[$type]->log($fn, $message[$fn]); + $collector->log($fn, $message[$fn]); + } + } + + /** + * Ensures the requested debug tab collector can accept mixed message payloads. + * @throws DebugBarException + */ + protected function resolveMessagesCollector(string $type): MessagesCollector + { + if (!$this->debugBar->hasCollector($type)) { + $this->debugBar->addCollector(new MessagesCollector($type)); } + + $collector = $this->debugBar->getCollector($type); + + if (!$collector instanceof MessagesCollector) { + throw new DebugBarException("Collector '{$type}' must be a MessagesCollector instance"); + } + + return $collector; } /** diff --git a/tests/Unit/Debugger/DebuggerTest.php b/tests/Unit/Debugger/DebuggerTest.php index 8821c9f0..b73bcffe 100644 --- a/tests/Unit/Debugger/DebuggerTest.php +++ b/tests/Unit/Debugger/DebuggerTest.php @@ -117,6 +117,9 @@ public function testDebugbarRender(): void $this->debugBarMock->shouldReceive('getJavascriptRenderer')->andReturn($rendererMock); $this->debugBarMock->shouldReceive('hasCollector')->with(Mockery::any())->andReturn(true); + $this->debugBarMock->shouldReceive('getCollector') + ->with(Mockery::any()) + ->andReturn(Mockery::mock(MessagesCollector::class)); $output = $this->debugger->render(); @@ -137,7 +140,7 @@ public function testDebugbarRenderReplaysArrayPayloadsThroughLog(): void $this->debugBarMock->shouldReceive('hasCollector') ->with(Debugger::ROUTES) ->andReturn(true); - $this->debugBarMock->shouldReceive('offsetGet') + $this->debugBarMock->shouldReceive('getCollector') ->with(Debugger::ROUTES) ->andReturn($collectorMock);