Skip to content

Commit be18e37

Browse files
authored
Merge pull request #94 from tonysm/pending-streams-macroables
Make turbo streams macroable
2 parents 9184381 + c1d8263 commit be18e37

File tree

3 files changed

+59
-0
lines changed

3 files changed

+59
-0
lines changed

src/Http/PendingTurboStreamResponse.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,16 @@
88
use Illuminate\Contracts\View\View;
99
use Illuminate\Database\Eloquent\Model;
1010
use Illuminate\Support\HtmlString;
11+
use Illuminate\Support\Traits\Macroable;
1112
use Tonysm\TurboLaravel\Broadcasting\Rendering;
1213

1314
use function Tonysm\TurboLaravel\dom_id;
1415
use Tonysm\TurboLaravel\Models\Naming\Name;
1516

1617
class PendingTurboStreamResponse implements Responsable, Htmlable, Renderable
1718
{
19+
use Macroable;
20+
1821
private string $useAction;
1922
private ?string $useTarget = null;
2023
private ?string $useTargets = null;
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
namespace Tonysm\TurboLaravel\Tests\Http;
4+
5+
use Illuminate\Support\Facades\View;
6+
use Tonysm\TurboLaravel\Http\PendingTurboStreamResponse;
7+
use Tonysm\TurboLaravel\Testing\AssertableTurboStream;
8+
use Tonysm\TurboLaravel\Testing\InteractsWithTurbo;
9+
use Tonysm\TurboLaravel\Testing\TurboStreamMatcher;
10+
use Tonysm\TurboLaravel\Tests\TestCase;
11+
12+
class MacroablePendingStreamTest extends TestCase
13+
{
14+
use InteractsWithTurbo;
15+
16+
public function setUp(): void
17+
{
18+
parent::setUp();
19+
20+
View::addLocation(__DIR__ . '/../Stubs/views');
21+
}
22+
23+
protected function defineRoutes($router)
24+
{
25+
$router->get('/testing/macroable-streams', function () {
26+
if (request()->wantsTurboStream()) {
27+
return turbo_stream()->flash('Hello World');
28+
}
29+
30+
return 'No Turbo Stream';
31+
})->name('testing.macroable-streams');
32+
}
33+
34+
/** @test */
35+
public function turbo_stream_can_be_macroable()
36+
{
37+
PendingTurboStreamResponse::macro('flash', function (string $message) {
38+
return $this->append('notifications', view('notification', [
39+
'message' => $message,
40+
]));
41+
});
42+
43+
$this->turbo()
44+
->get(route('testing.macroable-streams'))
45+
->assertTurboStream(fn (AssertableTurboStream $streams) => (
46+
$streams->hasTurboStream(fn (TurboStreamMatcher $stream) => (
47+
$stream->where('action', 'append')
48+
->where('target', 'notifications')
49+
->see('Hello World')
50+
))
51+
));
52+
}
53+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<div>
2+
{{ $message }}
3+
</div>

0 commit comments

Comments
 (0)