You are here

public function RouteBuilderTest::testRebuildWithProviderBasedRoutes in Drupal 8

Tests the rebuild with routes provided by a callback.

See also

\Drupal\Core\Routing\RouteBuilder::rebuild()

File

core/tests/Drupal/Tests/Core/Routing/RouteBuilderTest.php, line 191
Contains \Drupal\Tests\Core\Routing\RouteBuilderTest.

Class

RouteBuilderTest
@coversDefaultClass \Drupal\Core\Routing\RouteBuilder @group Routing

Namespace

Drupal\Tests\Core\Routing

Code

public function testRebuildWithProviderBasedRoutes() {
  $this->lock
    ->expects($this
    ->once())
    ->method('acquire')
    ->with('router_rebuild')
    ->will($this
    ->returnValue(TRUE));
  $this->yamlDiscovery
    ->expects($this
    ->once())
    ->method('findAll')
    ->will($this
    ->returnValue([
    'test_module' => [
      'route_callbacks' => [
        '\\Drupal\\Tests\\Core\\Routing\\TestRouteSubscriber::routesFromArray',
        'test_module.route_service:routesFromCollection',
      ],
    ],
  ]));
  $container = new ContainerBuilder();
  $container
    ->set('test_module.route_service', new TestRouteSubscriber());
  $this->controllerResolver
    ->expects($this
    ->any())
    ->method('getControllerFromDefinition')
    ->will($this
    ->returnCallback(function ($controller) use ($container) {
    $count = substr_count($controller, ':');
    if ($count == 1) {
      list($service, $method) = explode(':', $controller, 2);
      $object = $container
        ->get($service);
    }
    else {
      list($class, $method) = explode('::', $controller, 2);
      $object = new $class();
    }
    return [
      $object,
      $method,
    ];
  }));
  $route_collection_filled = new RouteCollection();
  $route_collection_filled
    ->add('test_route.1', new Route('/test-route/1'));
  $route_collection_filled
    ->add('test_route.2', new Route('/test-route/2'));
  $route_build_event = new RouteBuildEvent($route_collection_filled);

  // Ensure that the alter routes events are fired.
  $this->dispatcher
    ->expects($this
    ->at(0))
    ->method('dispatch')
    ->with(RoutingEvents::DYNAMIC, $route_build_event);
  $this->dispatcher
    ->expects($this
    ->at(1))
    ->method('dispatch')
    ->with(RoutingEvents::ALTER, $route_build_event);

  // Ensure that access checks are set.
  $this->checkProvider
    ->expects($this
    ->once())
    ->method('setChecks')
    ->with($route_collection_filled);

  // Ensure that the routes are set to the dumper and dumped.
  $this->dumper
    ->expects($this
    ->at(0))
    ->method('addRoutes')
    ->with($route_collection_filled);
  $this->dumper
    ->expects($this
    ->at(1))
    ->method('dump');
  $this
    ->assertTrue($this->routeBuilder
    ->rebuild());
}