Skip to content

Commit b6029f5

Browse files
committed
Ensure formatForTelescope method is used in request watcher
1 parent 3c82891 commit b6029f5

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

src/Watchers/RequestWatcher.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,9 @@ protected function extractDataFromView($view)
238238
} elseif (is_object($value)) {
239239
return [
240240
'class' => get_class($value),
241-
'properties' => json_decode(json_encode($value), true),
241+
'properties' => method_exists($value, 'formatForTelescope')
242+
? $value->formatForTelescope()
243+
: json_decode(json_encode($value), true),
242244
];
243245
} else {
244246
return json_decode(json_encode($value), true);

tests/Watchers/RequestWatchersTest.php

+28
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Illuminate\Http\UploadedFile;
66
use Illuminate\Support\Facades\Response;
77
use Illuminate\Support\Facades\Route;
8+
use Illuminate\Support\Facades\View;
89
use Laravel\Telescope\EntryType;
910
use Laravel\Telescope\Tests\FeatureTestCase;
1011
use Laravel\Telescope\Watchers\RequestWatcher;
@@ -176,4 +177,31 @@ public function test_request_watcher_plain_text_response()
176177
$this->assertSame(200, $entry->content['response_status']);
177178
$this->assertSame('plain telescope response', $entry->content['response']);
178179
}
180+
181+
public function test_request_watcher_calls_format_for_telescope_method_if_it_exists()
182+
{
183+
View::addNamespace('tests', __DIR__.'/../stubs/views');
184+
185+
Route::get('/fake-view', function () {
186+
return Response::make(
187+
View::make('tests::fake-view', ['items' => new FormatForTelescopeClass])
188+
);
189+
});
190+
191+
$this->get('/fake-view')->assertSuccessful();
192+
193+
$entry = $this->loadTelescopeEntries()->first();
194+
$this->assertSame(EntryType::REQUEST, $entry->type);
195+
$this->assertEquals(['Telescope', 'Laravel', 'PHP'], $entry->content['response']['data']['items']['properties']);
196+
}
197+
}
198+
199+
class FormatForTelescopeClass
200+
{
201+
public function formatForTelescope(): array
202+
{
203+
return [
204+
'Telescope', 'Laravel', 'PHP',
205+
];
206+
}
179207
}

tests/stubs/views/fake-view.blade.php

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@foreach($items as $item)
2+
<div>{{ $item }}</div>
3+
@endforeach

0 commit comments

Comments
 (0)