|
|
@@ -14,6 +14,7 @@
|
|
|
*/
|
|
|
namespace Cake\Test\TestCase\Routing;
|
|
|
|
|
|
+use Cake\Http\ServerRequest;
|
|
|
use Cake\Routing\RouteBuilder;
|
|
|
use Cake\Routing\RouteCollection;
|
|
|
use Cake\Routing\Route\Route;
|
|
|
@@ -159,6 +160,86 @@ class RouteCollectionTest extends TestCase
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * Test parseRequest() throws an error on unknown routes.
|
|
|
+ *
|
|
|
+ * @expectedException \Cake\Routing\Exception\MissingRouteException
|
|
|
+ * @expectedExceptionMessage A route matching "/" could not be found
|
|
|
+ */
|
|
|
+ public function testParseRequestMissingRoute()
|
|
|
+ {
|
|
|
+ $routes = new RouteBuilder($this->collection, '/b', ['key' => 'value']);
|
|
|
+ $routes->connect('/', ['controller' => 'Articles']);
|
|
|
+ $routes->connect('/:id', ['controller' => 'Articles', 'action' => 'view']);
|
|
|
+
|
|
|
+ $request = new ServerRequest(['url' => '/']);
|
|
|
+ $result = $this->collection->parseRequest($request);
|
|
|
+ $this->assertEquals([], $result, 'Should not match, missing /b');
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Test parsing routes.
|
|
|
+ *
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ public function testParseRequest()
|
|
|
+ {
|
|
|
+ $routes = new RouteBuilder($this->collection, '/b', ['key' => 'value']);
|
|
|
+ $routes->connect('/', ['controller' => 'Articles']);
|
|
|
+ $routes->connect('/:id', ['controller' => 'Articles', 'action' => 'view']);
|
|
|
+ $routes->connect('/media/search/*', ['controller' => 'Media', 'action' => 'search']);
|
|
|
+
|
|
|
+ $request = new ServerRequest(['url' => '/b/']);
|
|
|
+ $result = $this->collection->parseRequest($request);
|
|
|
+ $expected = [
|
|
|
+ 'controller' => 'Articles',
|
|
|
+ 'action' => 'index',
|
|
|
+ 'pass' => [],
|
|
|
+ 'plugin' => null,
|
|
|
+ 'key' => 'value',
|
|
|
+ '_matchedRoute' => '/b',
|
|
|
+ ];
|
|
|
+ $this->assertEquals($expected, $result);
|
|
|
+
|
|
|
+ $request = new ServerRequest(['url' => '/b/the-thing?one=two']);
|
|
|
+ $result = $this->collection->parseRequest($request);
|
|
|
+ $expected = [
|
|
|
+ 'controller' => 'Articles',
|
|
|
+ 'action' => 'view',
|
|
|
+ 'id' => 'the-thing',
|
|
|
+ 'pass' => [],
|
|
|
+ 'plugin' => null,
|
|
|
+ 'key' => 'value',
|
|
|
+ '?' => ['one' => 'two'],
|
|
|
+ '_matchedRoute' => '/b/:id',
|
|
|
+ ];
|
|
|
+ $this->assertEquals($expected, $result);
|
|
|
+
|
|
|
+ $request = new ServerRequest(['url' => '/b/media/search']);
|
|
|
+ $result = $this->collection->parseRequest($request);
|
|
|
+ $expected = [
|
|
|
+ 'key' => 'value',
|
|
|
+ 'pass' => [],
|
|
|
+ 'plugin' => null,
|
|
|
+ 'controller' => 'Media',
|
|
|
+ 'action' => 'search',
|
|
|
+ '_matchedRoute' => '/b/media/search/*',
|
|
|
+ ];
|
|
|
+ $this->assertEquals($expected, $result);
|
|
|
+
|
|
|
+ $request = new ServerRequest(['url' => '/b/media/search/thing']);
|
|
|
+ $result = $this->collection->parseRequest($request);
|
|
|
+ $expected = [
|
|
|
+ 'key' => 'value',
|
|
|
+ 'pass' => ['thing'],
|
|
|
+ 'plugin' => null,
|
|
|
+ 'controller' => 'Media',
|
|
|
+ 'action' => 'search',
|
|
|
+ '_matchedRoute' => '/b/media/search/*',
|
|
|
+ ];
|
|
|
+ $this->assertEquals($expected, $result);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* Test match() throws an error on unknown routes.
|
|
|
*
|
|
|
* @expectedException \Cake\Routing\Exception\MissingRouteException
|