Version 1
[yaffs-website] / web / core / tests / Drupal / Tests / Core / EventSubscriber / PathRootsSubscriberTest.php
diff --git a/web/core/tests/Drupal/Tests/Core/EventSubscriber/PathRootsSubscriberTest.php b/web/core/tests/Drupal/Tests/Core/EventSubscriber/PathRootsSubscriberTest.php
new file mode 100644 (file)
index 0000000..ea4ec9f
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+
+namespace Drupal\Tests\Core\EventSubscriber;
+
+use Drupal\Core\EventSubscriber\PathRootsSubscriber;
+use Drupal\Core\Routing\RouteBuildEvent;
+use Drupal\Tests\UnitTestCase;
+use Symfony\Component\Routing\Route;
+use Symfony\Component\Routing\RouteCollection;
+
+/**
+ * @coversDefaultClass \Drupal\Core\EventSubscriber\PathRootsSubscriber
+ * @group EventSubscriber
+ */
+class PathRootsSubscriberTest extends UnitTestCase {
+
+  /**
+   * The mocked state.
+   *
+   * @var \Drupal\Core\State\StateInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $state;
+
+  /**
+   * The tested path root subscriber.
+   *
+   * @var \Drupal\Core\EventSubscriber\PathRootsSubscriber
+   */
+  protected $pathRootsSubscriber;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    $this->state = $this->getMock('Drupal\Core\State\StateInterface');
+    $this->pathRootsSubscriber = new PathRootsSubscriber($this->state);
+  }
+
+  /**
+   * Tests altering and finished event.
+   *
+   * @covers ::onRouteAlter
+   * @covers ::onRouteFinished
+   */
+  public function testSubscribing() {
+
+    // Ensure that onRouteFinished can be called without throwing notices
+    // when no path roots got set.
+    $this->pathRootsSubscriber->onRouteFinished();
+
+    $route_collection = new RouteCollection();
+    $route_collection->add('test_route1', new Route('/test/bar'));
+    $route_collection->add('test_route2', new Route('/test/baz'));
+    $route_collection->add('test_route3', new Route('/test2/bar/baz'));
+
+    $event = new RouteBuildEvent($route_collection, 'provider');
+    $this->pathRootsSubscriber->onRouteAlter($event);
+
+    $route_collection = new RouteCollection();
+    $route_collection->add('test_route4', new Route('/test1/bar'));
+    $route_collection->add('test_route5', new Route('/test2/baz'));
+    $route_collection->add('test_route6', new Route('/test2/bar/baz'));
+
+    $event = new RouteBuildEvent($route_collection, 'provider');
+    $this->pathRootsSubscriber->onRouteAlter($event);
+
+    $this->state->expects($this->once())
+      ->method('set')
+      ->with('router.path_roots', ['test', 'test2', 'test1']);
+
+    $this->pathRootsSubscriber->onRouteFinished();
+  }
+
+}