Skip to content

Commit 54d9fef

Browse files
test: add a test confirming terminable route middleware is called (#21)
1 parent 10732a5 commit 54d9fef

File tree

5 files changed

+63
-0
lines changed

5 files changed

+63
-0
lines changed

app/Http/Kernel.php

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace App\Http;
66

7+
use App\Http\Middleware\ApiAfter;
78
use App\Http\Middleware\Authenticate;
89
use App\Http\Middleware\EncryptCookies;
910
use App\Http\Middleware\PreventRequestsDuringMaintenance;
@@ -50,6 +51,7 @@ final class Kernel extends HttpKernel
5051
'api' => [
5152
'throttle:api',
5253
SubstituteBindings::class,
54+
ApiAfter::class,
5355
],
5456
];
5557

app/Http/Middleware/ApiAfter.php

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Http\Middleware;
6+
7+
use App\Jobs\SampleJob;
8+
use Closure;
9+
use Illuminate\Http\Request;
10+
use Symfony\Component\HttpFoundation\Response;
11+
12+
final class ApiAfter
13+
{
14+
public function handle(Request $request, Closure $next): Response
15+
{
16+
return $next($request);
17+
}
18+
19+
public function terminate(Request $request, Response $response): void
20+
{
21+
dispatch(new SampleJob());
22+
}
23+
}

app/Jobs/SampleJob.php

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace App\Jobs;
4+
5+
use Illuminate\Bus\Queueable;
6+
use Illuminate\Contracts\Queue\ShouldQueue;
7+
use Illuminate\Foundation\Bus\Dispatchable;
8+
use Illuminate\Queue\InteractsWithQueue;
9+
use Illuminate\Queue\SerializesModels;
10+
11+
class SampleJob implements ShouldQueue
12+
{
13+
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
14+
15+
public function handle()
16+
{
17+
}
18+
}

routes/api.php

+1
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@
1212
fn(Request $request) => $request->user()
1313
);
1414

15+
Route::get('/ping', fn(Request $request) => 'pong');
1516
Route::post('/upload-files', [TestController::class, 'uploadFiles']);

tests/Functional/MiddlewaresCest.php

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
namespace Tests\Functional;
4+
5+
use App\Jobs\SampleJob;
6+
use Illuminate\Support\Facades\Queue;
7+
use Tests\FunctionalTester;
8+
9+
class MiddlewaresCest
10+
{
11+
public function terminableRouteMiddlewareIsCalled(FunctionalTester $I): void
12+
{
13+
Queue::fake();
14+
15+
$I->amOnPage('/api/ping');
16+
17+
Queue::assertPushed(SampleJob::class);
18+
}
19+
}

0 commit comments

Comments
 (0)