function RouteSubscriberTest::testOnAlterRoutes

Same name and namespace in other branches
  1. 9 core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php \Drupal\Tests\views\Unit\EventSubscriber\RouteSubscriberTest::testOnAlterRoutes()
  2. 8.9.x core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php \Drupal\Tests\views\Unit\EventSubscriber\RouteSubscriberTest::testOnAlterRoutes()
  3. 11.x core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php \Drupal\Tests\views\Unit\EventSubscriber\RouteSubscriberTest::testOnAlterRoutes()

Tests the onAlterRoutes method.

See also

\Drupal\views\EventSubscriber\RouteSubscriber::onAlterRoutes()

File

core/modules/views/tests/src/Unit/EventSubscriber/RouteSubscriberTest.php, line 92

Class

RouteSubscriberTest
@coversDefaultClass \Drupal\views\EventSubscriber\RouteSubscriber[[api-linebreak]] @group views

Namespace

Drupal\Tests\views\Unit\EventSubscriber

Code

public function testOnAlterRoutes() : void {
  $collection = new RouteCollection();
  // The first route will be overridden later.
  $collection->add('test_route', new Route('test_route', [
    '_controller' => 'Drupal\\Tests\\Core\\Controller\\TestController',
  ]));
  $route_2 = new Route('test_route/example', [
    '_controller' => 'Drupal\\Tests\\Core\\Controller\\TestController',
  ]);
  $collection->add('test_route_2', $route_2);
  $route_event = new RouteBuildEvent($collection);
  [
    $display_1,
    $display_2,
  ] = $this->setupMocks();
  // The page_1 display overrides an existing route, so the dynamicRoutes
  // should only call the second display.
  $display_1->expects($this->once())
    ->method('collectRoutes')
    ->willReturnCallback(function () use ($collection) {
    $collection->add('views.test_id.page_1', new Route('test_route', [
      '_controller' => 'Drupal\\views\\Routing\\ViewPageController',
    ]));
    return [
      'test_id.page_1' => 'views.test_id.page_1',
    ];
  });
  $display_1->expects($this->once())
    ->method('alterRoutes')
    ->willReturn([
    'test_id.page_1' => 'test_route',
  ]);
  $display_2->expects($this->once())
    ->method('collectRoutes')
    ->willReturnCallback(function () use ($collection) {
    $collection->add('views.test_id.page_2', new Route('test_route', [
      '_controller' => 'Drupal\\views\\Routing\\ViewPageController',
    ]));
    return [
      'test_id.page_2' => 'views.test_id.page_2',
    ];
  });
  $display_2->expects($this->once())
    ->method('alterRoutes')
    ->willReturn([]);
  // Ensure that even both the collectRoutes() and alterRoutes() methods
  // are called on the displays, we ensure that the route first defined by
  // views is dropped.
  $this->routeSubscriber
    ->routes();
  $this->assertNull($this->routeSubscriber
    ->onAlterRoutes($route_event));
  $this->state
    ->expects($this->once())
    ->method('set')
    ->with('views.view_route_names', [
    'test_id.page_1' => 'test_route',
    'test_id.page_2' => 'views.test_id.page_2',
  ]);
  $collection = $route_event->getRouteCollection();
  $this->assertEquals([
    'test_route',
    'test_route_2',
    'views.test_id.page_2',
  ], array_keys($collection->all()));
  $this->routeSubscriber
    ->routeRebuildFinished();
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.