3 namespace Drupal\Tests\Core\Routing;
5 use Drupal\Core\Routing\MethodFilter;
6 use Drupal\Tests\UnitTestCase;
7 use Symfony\Component\HttpFoundation\Request;
8 use Symfony\Component\Routing\Exception\MethodNotAllowedException;
9 use Symfony\Component\Routing\Route;
10 use Symfony\Component\Routing\RouteCollection;
13 * @coversDefaultClass \Drupal\Core\Routing\MethodFilter
16 class MethodFilterTest extends UnitTestCase {
21 public function testWithAllowedMethod() {
22 $request = Request::create('/test', 'GET');
23 $collection = new RouteCollection();
24 $collection->add('test_route.get', new Route('/test', [], [], [], '', [], ['GET']));
25 $collection_before = clone $collection;
27 $method_filter = new MethodFilter();
28 $result_collection = $method_filter->filter($collection, $request);
30 $this->assertEquals($collection_before, $result_collection);
36 public function testWithAllowedMethodAndMultipleMatchingRoutes() {
37 $request = Request::create('/test', 'GET');
38 $collection = new RouteCollection();
39 $collection->add('test_route.get', new Route('/test', [], [], [], '', [], ['GET']));
40 $collection->add('test_route2.get', new Route('/test', [], [], [], '', [], ['GET']));
41 $collection->add('test_route3.get', new Route('/test', [], [], [], '', [], ['GET']));
43 $collection_before = clone $collection;
45 $method_filter = new MethodFilter();
46 $result_collection = $method_filter->filter($collection, $request);
48 $this->assertEquals($collection_before, $result_collection);
54 public function testMethodNotAllowedException() {
55 $request = Request::create('/test', 'PATCH');
56 $collection = new RouteCollection();
57 $collection->add('test_route.get', new Route('/test', [], [], [], '', [], ['GET']));
59 $this->setExpectedException(MethodNotAllowedException::class);
61 $method_filter = new MethodFilter();
62 $method_filter->filter($collection, $request);
68 public function testMethodNotAllowedExceptionWithMultipleRoutes() {
69 $request = Request::create('/test', 'PATCH');
70 $collection = new RouteCollection();
71 $collection->add('test_route.get', new Route('/test', [], [], [], '', [], ['GET']));
72 $collection->add('test_route2.get', new Route('/test', [], [], [], '', [], ['GET']));
73 $collection->add('test_route3.get', new Route('/test', [], [], [], '', [], ['GET']));
75 $this->setExpectedException(MethodNotAllowedException::class);
77 $method_filter = new MethodFilter();
78 $method_filter->filter($collection, $request);
84 public function testFilteredMethods() {
85 $request = Request::create('/test', 'PATCH');
86 $collection = new RouteCollection();
87 $collection->add('test_route.get', new Route('/test', [], [], [], '', [], ['GET']));
88 $collection->add('test_route2.get', new Route('/test', [], [], [], '', [], ['PATCH']));
89 $collection->add('test_route3.get', new Route('/test', [], [], [], '', [], ['POST']));
91 $expected_collection = new RouteCollection();
92 $expected_collection->add('test_route2.get', new Route('/test', [], [], [], '', [], ['PATCH']));
94 $method_filter = new MethodFilter();
95 $result_collection = $method_filter->filter($collection, $request);
97 $this->assertEquals($expected_collection, $result_collection);
101 * Ensures that the incoming and outgoing collections have the same order.
105 public function testCollectionOrder() {
106 $request = Request::create('/test', 'GET');
108 $collection = new RouteCollection();
109 $collection->add('entity.taxonomy_term.canonical', new Route('/test'));
110 $collection->add('views.view.taxonomy_term_page', new Route('/test', [], [], [], '', [], ['GET', 'POST']));
112 $method_filter = new MethodFilter();
113 $result_collection = $method_filter->filter($collection, $request);
115 $this->assertEquals(['entity.taxonomy_term.canonical', 'views.view.taxonomy_term_page'], array_keys($result_collection->all()));