Browse Source

Add test for #17221

The only way I could leverage the bug being fixed was with a custom
redirect route. I hope that is what was the intended usage scenario.
Mark Story 2 years ago
parent
commit
cb066e0e2f

+ 5 - 4
tests/TestCase/Routing/Middleware/RoutingMiddlewareTest.php

@@ -20,6 +20,7 @@ use Cake\Cache\Cache;
 use Cake\Cache\InvalidArgumentException as CacheInvalidArgumentException;
 use Cake\Core\Configure;
 use Cake\Core\HttpApplicationInterface;
+use Cake\Http\Exception\RedirectException;
 use Cake\Http\ServerRequestFactory;
 use Cake\Routing\Exception\FailedRouteCacheException;
 use Cake\Routing\Exception\MissingRouteException;
@@ -34,6 +35,7 @@ use TestApp\Application;
 use TestApp\Http\TestRequestHandler;
 use TestApp\Middleware\DumbMiddleware;
 use TestApp\Middleware\UnserializableMiddleware;
+use TestApp\Routing\Route\HeaderRedirectRoute;
 
 /**
  * Test for RoutingMiddleware
@@ -95,18 +97,17 @@ class RoutingMiddlewareTest extends TestCase
      */
     public function testRedirectResponseWithHeaders(): void
     {
-        $this->builder->scope('/', function (RouteBuilder $routes): void {
-            $routes->redirect('/testpath', '/pages');
-        });
+        $this->builder->connect('/testpath', ['controller' => 'Articles', 'action' => 'index'], ['routeClass' => HeaderRedirectRoute::class]);
         $request = ServerRequestFactory::fromGlobals(['REQUEST_URI' => '/testpath']);
         $handler = new TestRequestHandler(function ($request) {
-            return new Response('php://memory', 200, ['X-testing' => 'Yes']);
+            return new Response();
         });
         $middleware = new RoutingMiddleware($this->app());
         $response = $middleware->process($request, $handler);
 
         $this->assertSame(301, $response->getStatusCode());
         $this->assertSame('http://localhost/pages', $response->getHeaderLine('Location'));
+        $this->assertSame('yes', $response->getHeaderLine('Redirect-Exception'));
     }
 
     /**

+ 19 - 0
tests/test_app/TestApp/Routing/Route/HeaderRedirectRoute.php

@@ -0,0 +1,19 @@
+<?php
+declare(strict_types=1);
+
+namespace TestApp\Routing\Route;
+
+use Cake\Http\Exception\RedirectException;
+use Cake\Routing\Route\Route as Route;
+
+class HeaderRedirectRoute extends Route
+{
+    public function parse(string $url, string $method = ''): ?array
+    {
+        $params = parent::parse($url, $method);
+        if (!$params) {
+            return null;
+        }
+        throw new RedirectException('http://localhost/pages', 301, ['Redirect-Exception' => 'yes']);
+    }
+}