From 14e471dfe706627083258b15f257d02ec1016c75 Mon Sep 17 00:00:00 2001 From: Chris Morrell Date: Mon, 14 Dec 2020 10:39:10 -0500 Subject: [PATCH 1/3] Terminate each test request in proper order --- .../Testing/Concerns/MakesHttpRequests.php | 8 +-- .../Concerns/MakesHttpRequestsTest.php | 62 +++++++++++++++++++ 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php b/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php index 10e55aab1358..0be549f99cc2 100644 --- a/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php +++ b/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php @@ -508,12 +508,12 @@ public function call($method, $uri, $parameters = [], $cookies = [], $files = [] $request = Request::createFromBase($symfonyRequest) ); + $kernel->terminate($request, $response); + if ($this->followRedirects) { $response = $this->followRedirects($response); } - $kernel->terminate($request, $response); - return $this->createTestResponse($response); } @@ -623,12 +623,12 @@ protected function prepareCookiesForJsonRequest() */ protected function followRedirects($response) { + $this->followRedirects = false; + while ($response->isRedirect()) { $response = $this->get($response->headers->get('Location')); } - $this->followRedirects = false; - return $response; } diff --git a/tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php b/tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php index 277b6dedf8b2..2ba8d95f74a5 100644 --- a/tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php +++ b/tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php @@ -2,6 +2,9 @@ namespace Illuminate\Tests\Foundation\Testing\Concerns; +use Illuminate\Contracts\Routing\Registrar; +use Illuminate\Contracts\Routing\UrlGenerator; +use Illuminate\Http\RedirectResponse; use Orchestra\Testbench\TestCase; class MakesHttpRequestsTest extends TestCase @@ -114,6 +117,50 @@ public function testWithoutAndWithCredentials() $this->defaultCookies = ['foo' => 'bar']; $this->assertSame(['foo' => 'bar'], $this->prepareCookiesForJsonRequest()); } + + + public function testFollowingRedirects() + { + $router = $this->app->make(Registrar::class); + $url = $this->app->make(UrlGenerator::class); + + $router->get('from', function() use ($url) { + return new RedirectResponse($url->to('to')); + }); + + $router->get('to', function() { + return 'OK'; + }); + + $this->followingRedirects() + ->get('from') + ->assertOk() + ->assertSee('OK'); + } + + + public function testFollowingRedirectsTerminatesInExpectedOrder() + { + $router = $this->app->make(Registrar::class); + $url = $this->app->make(UrlGenerator::class); + + $callOrder = []; + TerminatingMiddleware::$callback = function($request) use (&$callOrder) { + $callOrder[] = $request->path(); + }; + + $router->get('from', function() use ($url) { + return new RedirectResponse($url->to('to')); + })->middleware(TerminatingMiddleware::class); + + $router->get('to', function() { + return 'OK'; + })->middleware(TerminatingMiddleware::class); + + $this->followingRedirects()->get('from'); + + $this->assertEquals([ 'from', 'to' ], $callOrder); + } } class MyMiddleware @@ -123,3 +170,18 @@ public function handle($request, $next) return $next($request.'WithMiddleware'); } } + +class TerminatingMiddleware +{ + public static $callback; + + public function handle($request, $next) + { + return $next($request); + } + + public function terminate($request, $response) + { + call_user_func(static::$callback, $request, $response); + } +} From 379459bf46ca3badff97ff4f9416be10742da711 Mon Sep 17 00:00:00 2001 From: Chris Morrell Date: Mon, 14 Dec 2020 10:56:17 -0500 Subject: [PATCH 2/3] StyleCI --- .../Testing/Concerns/MakesHttpRequestsTest.php | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php b/tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php index 2ba8d95f74a5..9ba6d068852f 100644 --- a/tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php +++ b/tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php @@ -118,17 +118,16 @@ public function testWithoutAndWithCredentials() $this->assertSame(['foo' => 'bar'], $this->prepareCookiesForJsonRequest()); } - public function testFollowingRedirects() { $router = $this->app->make(Registrar::class); $url = $this->app->make(UrlGenerator::class); - $router->get('from', function() use ($url) { + $router->get('from', function () use ($url) { return new RedirectResponse($url->to('to')); }); - $router->get('to', function() { + $router->get('to', function () { return 'OK'; }); @@ -138,28 +137,27 @@ public function testFollowingRedirects() ->assertSee('OK'); } - public function testFollowingRedirectsTerminatesInExpectedOrder() { $router = $this->app->make(Registrar::class); $url = $this->app->make(UrlGenerator::class); $callOrder = []; - TerminatingMiddleware::$callback = function($request) use (&$callOrder) { + TerminatingMiddleware::$callback = function ($request) use (&$callOrder) { $callOrder[] = $request->path(); }; - $router->get('from', function() use ($url) { + $router->get('from', function () use ($url) { return new RedirectResponse($url->to('to')); })->middleware(TerminatingMiddleware::class); - $router->get('to', function() { + $router->get('to', function () { return 'OK'; })->middleware(TerminatingMiddleware::class); $this->followingRedirects()->get('from'); - $this->assertEquals([ 'from', 'to' ], $callOrder); + $this->assertEquals(['from', 'to'], $callOrder); } } @@ -168,6 +166,7 @@ class MyMiddleware public function handle($request, $next) { return $next($request.'WithMiddleware'); + } } From b6eef9f193c9843cf5d5f6c3b2d8906113e64d15 Mon Sep 17 00:00:00 2001 From: Chris Morrell Date: Mon, 14 Dec 2020 10:57:04 -0500 Subject: [PATCH 3/3] StyleCI --- tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php b/tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php index 9ba6d068852f..da1540d21f33 100644 --- a/tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php +++ b/tests/Foundation/Testing/Concerns/MakesHttpRequestsTest.php @@ -166,7 +166,6 @@ class MyMiddleware public function handle($request, $next) { return $next($request.'WithMiddleware'); - } }