|
20 | 20 | use Illuminate\Http\Client\ResponseSequence;
|
21 | 21 | use Illuminate\Http\Response as HttpResponse;
|
22 | 22 | use Illuminate\Support\Arr;
|
| 23 | +use Illuminate\Support\Carbon; |
23 | 24 | use Illuminate\Support\Collection;
|
24 | 25 | use Illuminate\Support\Fluent;
|
25 | 26 | use Illuminate\Support\Str;
|
|
28 | 29 | use OutOfBoundsException;
|
29 | 30 | use PHPUnit\Framework\AssertionFailedError;
|
30 | 31 | use PHPUnit\Framework\TestCase;
|
| 32 | +use Psr\Http\Message\ResponseInterface; |
31 | 33 | use RuntimeException;
|
32 | 34 | use Symfony\Component\VarDumper\VarDumper;
|
33 | 35 |
|
@@ -2374,4 +2376,125 @@ public function testTheTransferStatsAreCustomizableOnFake(): void
|
2374 | 2376 |
|
2375 | 2377 | $this->assertTrue($onStatsFunctionCalled);
|
2376 | 2378 | }
|
| 2379 | + |
| 2380 | + public function testItCanAddGlobalMiddleware() |
| 2381 | + { |
| 2382 | + Carbon::setTestNow(now()->startOfDay()); |
| 2383 | + $requests = []; |
| 2384 | + $responses = []; |
| 2385 | + $this->factory->fake(function ($r) use (&$requests) { |
| 2386 | + $requests[] = $r; |
| 2387 | + |
| 2388 | + Carbon::setTestNow(now()->addSeconds(6 * count($requests))); |
| 2389 | + |
| 2390 | + return $this->factory::response('expected content'); |
| 2391 | + }); |
| 2392 | + |
| 2393 | + $this->factory->globalMiddleware(Middleware::mapRequest(function ($request) { |
| 2394 | + // Test manipulating headers on outgoing request... |
| 2395 | + return $request->withHeader('User-Agent', 'Laravel Framework/1.0') |
| 2396 | + ->withAddedHeader('shared', 'global') |
| 2397 | + ->withHeader('list', ['item-1', 'item-2']) |
| 2398 | + ->withAddedHeader('list', ['item-3']); |
| 2399 | + }))->globalMiddleware(Middleware::mapResponse(function ($response) use (&$requests) { |
| 2400 | + // Test adding headers in incoming response.. |
| 2401 | + return $response->withHeader('X-Count', (string) count($requests)); |
| 2402 | + }))->globalMiddleware(function ($handler) { |
| 2403 | + // Test wrapping request in timing function... |
| 2404 | + return function ($request, $options) use ($handler) { |
| 2405 | + $startedAt = now(); |
| 2406 | + |
| 2407 | + return $handler($request, $options)->then(function (ResponseInterface $response) use ($startedAt) { |
| 2408 | + return $response->withHeader('X-Duration', "{$startedAt->diffInSeconds(now())} seconds"); |
| 2409 | + }); |
| 2410 | + }; |
| 2411 | + }); |
| 2412 | + $responses[] = $this->factory->post('http://forge.laravel.com'); |
| 2413 | + $responses[] = $this->factory->withHeader('shared', 'local')->post('http://vapor.laravel.com'); |
| 2414 | + |
| 2415 | + $this->assertCount(2, $requests); |
| 2416 | + $this->assertCount(2, $responses); |
| 2417 | + |
| 2418 | + $this->assertSame(['Laravel Framework/1.0'], $requests[0]->header('User-Agent')); |
| 2419 | + $this->assertSame(['item-1', 'item-2', 'item-3'], $requests[0]->header('list')); |
| 2420 | + $this->assertSame(['global'], $requests[0]->header('shared')); |
| 2421 | + $this->assertSame('1', $responses[0]->header('X-Count')); |
| 2422 | + $this->assertSame('6 seconds', $responses[0]->header('X-Duration')); |
| 2423 | + |
| 2424 | + $this->assertSame(['Laravel Framework/1.0'], $requests[1]->header('User-Agent')); |
| 2425 | + $this->assertSame(['item-1', 'item-2', 'item-3'], $requests[1]->header('list')); |
| 2426 | + $this->assertSame(['local', 'global'], $requests[1]->header('shared')); |
| 2427 | + $this->assertSame('2', $responses[1]->header('X-Count')); |
| 2428 | + $this->assertSame('12 seconds', $responses[1]->header('X-Duration')); |
| 2429 | + } |
| 2430 | + |
| 2431 | + public function testItCanAddGlobalRequestMiddleware() |
| 2432 | + { |
| 2433 | + $requests = []; |
| 2434 | + $this->factory->fake(function ($r) use (&$requests) { |
| 2435 | + $requests[] = $r; |
| 2436 | + |
| 2437 | + return Factory::response('expected content'); |
| 2438 | + }); |
| 2439 | + |
| 2440 | + $this->factory->globalRequestMiddleware(function ($request) { |
| 2441 | + return $request->withHeader('User-Agent', 'Laravel Framework/1.0'); |
| 2442 | + }); |
| 2443 | + $this->factory->post('http://forge.laravel.com'); |
| 2444 | + $this->factory->post('http://laravel.com'); |
| 2445 | + |
| 2446 | + $this->assertSame(['Laravel Framework/1.0'], $requests[0]->header('User-Agent')); |
| 2447 | + $this->assertSame(['Laravel Framework/1.0'], $requests[1]->header('User-Agent')); |
| 2448 | + } |
| 2449 | + |
| 2450 | + public function testItCanAddGlobalResponseMiddleware() |
| 2451 | + { |
| 2452 | + $responses = []; |
| 2453 | + $this->factory->fake(function ($r) use (&$request) { |
| 2454 | + return Factory::response('expected content'); |
| 2455 | + }); |
| 2456 | + |
| 2457 | + $this->factory->globalResponseMiddleware(function ($response) { |
| 2458 | + return $response->withHeader('X-Foo', 'Bar'); |
| 2459 | + }); |
| 2460 | + $responses[] = $this->factory->post('http://forge.laravel.com'); |
| 2461 | + $responses[] = $this->factory->post('http://laravel.com'); |
| 2462 | + |
| 2463 | + $this->assertSame('Bar', $responses[0]->header('X-Foo')); |
| 2464 | + $this->assertSame('Bar', $responses[1]->header('X-Foo')); |
| 2465 | + } |
| 2466 | + |
| 2467 | + public function testItCanAddRequestMiddleware() |
| 2468 | + { |
| 2469 | + $requests = []; |
| 2470 | + $this->factory->fake(function ($r) use (&$requests) { |
| 2471 | + $requests[] = $r; |
| 2472 | + |
| 2473 | + return Factory::response('expected content'); |
| 2474 | + }); |
| 2475 | + |
| 2476 | + $this->factory->withRequestMiddleware(function ($request) { |
| 2477 | + return $request->withHeader('User-Agent', 'Laravel Framework/1.0'); |
| 2478 | + })->post('http://forge.laravel.com'); |
| 2479 | + $this->factory->post('http://laravel.com'); |
| 2480 | + |
| 2481 | + $this->assertSame(['Laravel Framework/1.0'], $requests[0]->header('User-Agent')); |
| 2482 | + $this->assertSame(['GuzzleHttp/7'], $requests[1]->header('User-Agent')); |
| 2483 | + } |
| 2484 | + |
| 2485 | + public function testItCanAddResponseMiddleware() |
| 2486 | + { |
| 2487 | + $responses = []; |
| 2488 | + $this->factory->fake(function ($r) use (&$request) { |
| 2489 | + return Factory::response('expected content'); |
| 2490 | + }); |
| 2491 | + |
| 2492 | + $responses[] = $this->factory->withResponseMiddleware(function ($response) { |
| 2493 | + return $response->withHeader('X-Foo', 'Bar'); |
| 2494 | + })->post('http://forge.laravel.com'); |
| 2495 | + $responses[] = $this->factory->post('http://laravel.com'); |
| 2496 | + |
| 2497 | + $this->assertSame('Bar', $responses[0]->header('X-Foo')); |
| 2498 | + $this->assertSame('', $responses[1]->header('X-Foo')); |
| 2499 | + } |
2377 | 2500 | }
|
0 commit comments