class RoutePreloaderTest

Same name in other branches
  1. 9 core/tests/Drupal/Tests/Core/Routing/RoutePreloaderTest.php \Drupal\Tests\Core\Routing\RoutePreloaderTest
  2. 8.9.x core/tests/Drupal/Tests/Core/Routing/RoutePreloaderTest.php \Drupal\Tests\Core\Routing\RoutePreloaderTest
  3. 10 core/tests/Drupal/Tests/Core/Routing/RoutePreloaderTest.php \Drupal\Tests\Core\Routing\RoutePreloaderTest

@coversDefaultClass \Drupal\Core\Routing\RoutePreloader @group Routing

Hierarchy

Expanded class hierarchy of RoutePreloaderTest

File

core/tests/Drupal/Tests/Core/Routing/RoutePreloaderTest.php, line 18

Namespace

Drupal\Tests\Core\Routing
View source
class RoutePreloaderTest extends UnitTestCase {
    
    /**
     * The mocked preloadable route provider.
     *
     * @var \Drupal\Core\Routing\PreloadableRouteProviderInterface|\PHPUnit\Framework\MockObject\MockObject
     */
    protected $routeProvider;
    
    /**
     * The mocked state.
     *
     * @var \Drupal\Core\State\StateInterface|\PHPUnit\Framework\MockObject\MockObject
     */
    protected $state;
    
    /**
     * The tested preloader.
     *
     * @var \Drupal\Core\Routing\RoutePreloader
     */
    protected $preloader;
    
    /**
     * {@inheritdoc}
     */
    protected function setUp() : void {
        parent::setUp();
        $this->routeProvider = $this->createMock('Drupal\\Core\\Routing\\PreloadableRouteProviderInterface');
        $this->state = $this->createMock('\\Drupal\\Core\\State\\StateInterface');
        $this->preloader = new RoutePreloader($this->routeProvider, $this->state);
    }
    
    /**
     * Tests onAlterRoutes with just admin routes.
     */
    public function testOnAlterRoutesWithAdminRoutes() : void {
        $event = $this->getMockBuilder('Drupal\\Core\\Routing\\RouteBuildEvent')
            ->disableOriginalConstructor()
            ->getMock();
        $route_collection = new RouteCollection();
        $route_collection->add('test', new Route('/admin/foo', [
            '_controller' => 'Drupal\\ExampleController',
        ]));
        $route_collection->add('test2', new Route('/admin/bar', [
            '_controller' => 'Drupal\\ExampleController',
        ]));
        $event->expects($this->once())
            ->method('getRouteCollection')
            ->willReturn($route_collection);
        $this->state
            ->expects($this->once())
            ->method('set')
            ->with('routing.non_admin_routes', []);
        $this->preloader
            ->onAlterRoutes($event);
        $this->preloader
            ->onFinishedRoutes(new Event());
    }
    
    /**
     * Tests onAlterRoutes with "admin" appearing in the path.
     */
    public function testOnAlterRoutesWithAdminPathNoAdminRoute() : void {
        $event = $this->getMockBuilder('Drupal\\Core\\Routing\\RouteBuildEvent')
            ->disableOriginalConstructor()
            ->getMock();
        $route_collection = new RouteCollection();
        $route_collection->add('test', new Route('/foo/admin/foo', [
            '_controller' => 'Drupal\\ExampleController',
        ]));
        $route_collection->add('test2', new Route('/bar/admin/bar', [
            '_controller' => 'Drupal\\ExampleController',
        ]));
        $route_collection->add('test3', new Route('/administrator/a', [
            '_controller' => 'Drupal\\ExampleController',
        ]));
        $route_collection->add('test4', new Route('/admin', [
            '_controller' => 'Drupal\\ExampleController',
        ]));
        $event->expects($this->once())
            ->method('getRouteCollection')
            ->willReturn($route_collection);
        $this->state
            ->expects($this->once())
            ->method('set')
            ->with('routing.non_admin_routes', [
            'test',
            'test2',
            'test3',
        ]);
        $this->preloader
            ->onAlterRoutes($event);
        $this->preloader
            ->onFinishedRoutes(new Event());
    }
    
    /**
     * Tests onAlterRoutes with admin routes and non admin routes.
     */
    public function testOnAlterRoutesWithNonAdminRoutes() : void {
        $event = $this->getMockBuilder('Drupal\\Core\\Routing\\RouteBuildEvent')
            ->disableOriginalConstructor()
            ->getMock();
        $route_collection = new RouteCollection();
        $route_collection->add('test', new Route('/admin/foo', [
            '_controller' => 'Drupal\\ExampleController',
        ]));
        $route_collection->add('test2', new Route('/bar', [
            '_controller' => 'Drupal\\ExampleController',
        ]));
        // Non content routes, like ajax callbacks should be ignored.
        $route3 = new Route('/bar', [
            '_controller' => 'Drupal\\ExampleController',
        ]);
        $route3->setMethods([
            'POST',
        ]);
        $route_collection->add('test3', $route3);
        // Routes with the option _admin_route set to TRUE will be included.
        $route4 = new Route('/bar', [
            '_controller' => 'Drupal\\ExampleController',
        ]);
        $route4->setOption('_admin_route', TRUE);
        $route_collection->add('test4', $route4);
        // Non-HTML routes, like api_json routes should be ignored.
        $route5 = new Route('/bar', [
            '_controller' => 'Drupal\\ExampleController',
        ]);
        $route5->setRequirement('_format', 'api_json');
        $route_collection->add('test5', $route5);
        // Routes which include HTML should be included.
        $route6 = new Route('/bar', [
            '_controller' => 'Drupal\\ExampleController',
        ]);
        $route6->setRequirement('_format', 'json_api|html');
        $route_collection->add('test6', $route6);
        $event->expects($this->once())
            ->method('getRouteCollection')
            ->willReturn($route_collection);
        $this->state
            ->expects($this->once())
            ->method('set')
            ->with('routing.non_admin_routes', [
            'test2',
            'test4',
            'test6',
        ]);
        $this->preloader
            ->onAlterRoutes($event);
        $this->preloader
            ->onFinishedRoutes(new Event());
    }
    
    /**
     * Tests onRequest on a non html request.
     */
    public function testOnRequestNonHtml() : void {
        $event = $this->getMockBuilder('\\Symfony\\Component\\HttpKernel\\Event\\KernelEvent')
            ->disableOriginalConstructor()
            ->getMock();
        $request = new Request();
        $request->setRequestFormat('non-html');
        $event->expects($this->any())
            ->method('getRequest')
            ->willReturn($request);
        $this->routeProvider
            ->expects($this->never())
            ->method('getRoutesByNames');
        $this->state
            ->expects($this->never())
            ->method('get');
        $this->preloader
            ->onRequest($event);
    }
    
    /**
     * Tests onRequest on a html request.
     */
    public function testOnRequestOnHtml() : void {
        $event = $this->getMockBuilder('\\Symfony\\Component\\HttpKernel\\Event\\KernelEvent')
            ->disableOriginalConstructor()
            ->getMock();
        $request = new Request();
        $request->setRequestFormat('html');
        $event->expects($this->any())
            ->method('getRequest')
            ->willReturn($request);
        $this->routeProvider
            ->expects($this->once())
            ->method('preLoadRoutes')
            ->with([
            'test2',
        ]);
        $this->state
            ->expects($this->once())
            ->method('get')
            ->with('routing.non_admin_routes')
            ->willReturn([
            'test2',
        ]);
        $this->preloader
            ->onRequest($event);
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
ExpectDeprecationTrait::expectDeprecation public function Adds an expected deprecation.
ExpectDeprecationTrait::getCallableName private static function Returns a callable as a string suitable for inclusion in a message.
ExpectDeprecationTrait::setUpErrorHandler public function Sets up the test error handler.
ExpectDeprecationTrait::tearDownErrorHandler public function Tears down the test error handler.
RandomGeneratorTrait::getRandomGenerator protected function Gets the random generator for the utility methods.
RandomGeneratorTrait::randomMachineName protected function Generates a unique random string containing letters and numbers.
RandomGeneratorTrait::randomObject public function Generates a random PHP object.
RandomGeneratorTrait::randomString public function Generates a pseudo-random string of ASCII characters of codes 32 to 126.
RoutePreloaderTest::$preloader protected property The tested preloader.
RoutePreloaderTest::$routeProvider protected property The mocked preloadable route provider.
RoutePreloaderTest::$state protected property The mocked state.
RoutePreloaderTest::setUp protected function Overrides UnitTestCase::setUp
RoutePreloaderTest::testOnAlterRoutesWithAdminPathNoAdminRoute public function Tests onAlterRoutes with "admin" appearing in the path.
RoutePreloaderTest::testOnAlterRoutesWithAdminRoutes public function Tests onAlterRoutes with just admin routes.
RoutePreloaderTest::testOnAlterRoutesWithNonAdminRoutes public function Tests onAlterRoutes with admin routes and non admin routes.
RoutePreloaderTest::testOnRequestNonHtml public function Tests onRequest on a non html request.
RoutePreloaderTest::testOnRequestOnHtml public function Tests onRequest on a html request.
UnitTestCase::$root protected property The app root.
UnitTestCase::getClassResolverStub protected function Returns a stub class resolver.
UnitTestCase::getConfigFactoryStub public function Returns a stub config factory that behaves according to the passed array.
UnitTestCase::getContainerWithCacheTagsInvalidator protected function Sets up a container with a cache tags invalidator.
UnitTestCase::getStringTranslationStub public function Returns a stub translation manager that just returns the passed string.
UnitTestCase::setDebugDumpHandler public static function Registers the dumper CLI handler when the DebugDump extension is enabled.

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