Version 1
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Routing / MethodFilterTest.php
diff --git a/web/core/tests/Drupal/Tests/Core/Routing/MethodFilterTest.php b/web/core/tests/Drupal/Tests/Core/Routing/MethodFilterTest.php
new file mode 100644 (file)
index 0000000..1b72b75
--- /dev/null
@@ -0,0 +1,127 @@
+<?php
+
+namespace Drupal\Tests\Core\Routing;
+
+use Drupal\Core\Routing\MethodFilter;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Exception\MethodNotAllowedException;
+use Symfony\Component\Routing\Route;
+use Symfony\Component\Routing\RouteCollection;
+
+/**
+ * @coversDefaultClass \Drupal\Core\Routing\MethodFilter
+ * @group Routing
+ */
+class MethodFilterTest extends \PHPUnit_Framework_TestCase {
+
+  /**
+   * @covers ::applies
+   * @dataProvider providerApplies
+   */
+  public function testApplies(array $route_methods, $expected_applies) {
+    $route = new Route('/test', [], [], [], '', [], $route_methods);
+    $method_filter = new MethodFilter();
+
+    $this->assertSame($expected_applies, $method_filter->applies($route));
+  }
+
+  /**
+   * Data provider for testApplies().
+   *
+   * @return array
+   */
+  public function providerApplies() {
+    return [
+      'only GET' => [['GET'], TRUE],
+      'only PATCH' => [['PATCH'], TRUE],
+      'only POST' => [['POST'], TRUE],
+      'only DELETE' => [['DELETE'], TRUE],
+      'only HEAD' => [['HEAD'], TRUE],
+      'all' => [['GET', 'PATCH', 'POST', 'DELETE', 'HEAD'], TRUE],
+      'none' => [[], FALSE],
+    ];
+  }
+
+  /**
+   * @covers ::filter
+   */
+  public function testWithAllowedMethod() {
+    $request = Request::create('/test', 'GET');
+    $collection = new RouteCollection();
+    $collection->add('test_route.get', new Route('/test', [], [], [], '', [], ['GET']));
+    $collection_before = clone $collection;
+
+    $method_filter = new MethodFilter();
+    $result_collection = $method_filter->filter($collection, $request);
+
+    $this->assertEquals($collection_before, $result_collection);
+  }
+
+  /**
+   * @covers ::filter
+   */
+  public function testWithAllowedMethodAndMultipleMatchingRoutes() {
+    $request = Request::create('/test', 'GET');
+    $collection = new RouteCollection();
+    $collection->add('test_route.get', new Route('/test', [], [], [], '', [], ['GET']));
+    $collection->add('test_route2.get', new Route('/test', [], [], [], '', [], ['GET']));
+    $collection->add('test_route3.get', new Route('/test', [], [], [], '', [], ['GET']));
+
+    $collection_before = clone $collection;
+
+    $method_filter = new MethodFilter();
+    $result_collection = $method_filter->filter($collection, $request);
+
+    $this->assertEquals($collection_before, $result_collection);
+  }
+
+  /**
+   * @covers ::filter
+   */
+  public function testMethodNotAllowedException() {
+    $request = Request::create('/test', 'PATCH');
+    $collection = new RouteCollection();
+    $collection->add('test_route.get', new Route('/test', [], [], [], '', [], ['GET']));
+
+    $this->setExpectedException(MethodNotAllowedException::class);
+
+    $method_filter = new MethodFilter();
+    $method_filter->filter($collection, $request);
+  }
+
+  /**
+   * @covers ::filter
+   */
+  public function testMethodNotAllowedExceptionWithMultipleRoutes() {
+    $request = Request::create('/test', 'PATCH');
+    $collection = new RouteCollection();
+    $collection->add('test_route.get', new Route('/test', [], [], [], '', [], ['GET']));
+    $collection->add('test_route2.get', new Route('/test', [], [], [], '', [], ['GET']));
+    $collection->add('test_route3.get', new Route('/test', [], [], [], '', [], ['GET']));
+
+    $this->setExpectedException(MethodNotAllowedException::class);
+
+    $method_filter = new MethodFilter();
+    $method_filter->filter($collection, $request);
+  }
+
+  /**
+   * @covers ::filter
+   */
+  public function testFilteredMethods() {
+    $request = Request::create('/test', 'PATCH');
+    $collection = new RouteCollection();
+    $collection->add('test_route.get', new Route('/test', [], [], [], '', [], ['GET']));
+    $collection->add('test_route2.get', new Route('/test', [], [], [], '', [], ['PATCH']));
+    $collection->add('test_route3.get', new Route('/test', [], [], [], '', [], ['POST']));
+
+    $expected_collection = new RouteCollection();
+    $expected_collection->add('test_route2.get', new Route('/test', [], [], [], '', [], ['PATCH']));
+
+    $method_filter = new MethodFilter();
+    $result_collection = $method_filter->filter($collection, $request);
+
+    $this->assertEquals($expected_collection, $result_collection);
+  }
+
+}